[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] bogus wrap check in xen-netback



On Wed, Apr 25, 2018 at 11:04:26AM +0200, Olaf Hering wrote:
> Am Wed, 25 Apr 2018 09:59:23 +0100
> schrieb Wei Liu <wei.liu2@xxxxxxxxxx>:
> 
> > Do you have the full diff of your changes? 
> 
> Not right now. But without 'val', or val being uint, the same error happens 
> in f():
> 
> #include <stdio.h>
> void f(void)
> {
>         unsigned short req_prod = 0, req_cons = 65400;
>         unsigned short val;
>         val = req_prod - req_cons;
>         printf("req_prod - req_cons %u\n", val);
>         printf("req_prod - req_cons %x\n", val);
> }

What Jan said.

Integer promotion makes unsigned short into unsigned int first then do
the calculation. Assigning the result to val truncates it back to
unsigned short.

For the original code, idx is of type unsigned int. No promotion or
truncation is needed so the end result is correct.

Wei.

> 
> int main(void)
> {
> #if 1
>         unsigned nr_ents = 0x100U, req_prod_pvt = 0x14U, rsp_cons = 
> 0xffffffeeU, req_prod = 0xfffffffeU;
>         unsigned rx_target = 0x40U, qlen = 0x1aU;
> #else
>         unsigned nr_ents = 0x100U, req_prod_pvt = 0x00U, rsp_cons = 
> 0xffffffeeU, req_prod = 0xfffffffeU;
>         unsigned rx_target = 0x40U, qlen = 0x1aU;
> #endif
>         printf("batch_target %u, skb_queue_len %u, rx_target %u\n", rx_target 
> - (req_prod_pvt - rsp_cons), qlen, rx_target);
>         printf("nr_ents %u\n", nr_ents);
>         printf("req_prod_pvt - rsp_cons %u\n", req_prod_pvt - rsp_cons);
>         printf("req_prod_pvt - req_prod %u\n", req_prod_pvt - req_prod);
>         printf("%u\n", nr_ents - (req_prod_pvt - rsp_cons));
>         printf("%u\n", nr_ents - (req_prod_pvt - rsp_cons));
>         f();
>         return 0;
> }



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.