On Tue, Mar 12, 2019 at 05:34:32PM +0100, Lorenzo Bianconi wrote:
> > Alloc sg table at the end of urb structure. This will increase
> > cache usage.
> > 
> 
> I am curious, have you observed any performance improvement doing so?

It's hard to measure that. Stressing net transfer with about 175 Mbit/s
by netperf (what is max I can get) only took about 15% of CPU for me
and net performance fluctuate so CPU pref stats vary too.

> > -   if (dev->usb.sg_en) {
> > -           urb->sg = devm_kcalloc(dev->dev, MT_SG_MAX_SIZE,
> > -                                  sizeof(urb->sg), GFP_KERNEL);
FTR: Here is bug it should be sizeof(*urb->sg).

> > -           if (!urb->sg)
> > -                   return -ENOMEM;
> > -   }
> > +   usb_init_urb(e->urb);
> > +
> > +   if (dev->usb.sg_en)
> > +           e->urb->sg = (struct scatterlist *)((u8 *)e->urb + 
> > sizeof(struct urb));
> 
> You can avoid u8 cast doing:
> (struct scatterlist *)(e->urb + 1)
Cool trick!

Stanislaw

Reply via email to