From: Bjørn Mork [mailto:bjorn@xxxxxxx] > David Laight <David.Laight@xxxxxxxxxx> writes: > > From: Bjørn Mork > >> David Laight <David.Laight@xxxxxxxxxx> writes: > >> > >> > The patch you submitted is wrong. > >> > Whoever wrote the sg interface was on crack. > >> > The 'last' marker needs moving as well. > >> > >> I'm afraid I don't understand what you meant by this. > >> > >> sg_init_table() set the 'last' marker. AFAICS, you don't need to change > >> it unless you want to chain lists. > >> > >> Care to explain with some code? > > > > Just assuming that there will be some code, somewhere, that will try > > to process the entire sg list - so won't like the entry with a > > NULL pointer and zero length at the end. > > > > If all the places that process the list are given an explicit > > number of entries, or don't care about the NULL it doesn't matter. > > I believe all processing use the urb->num_sgs field to limit the number > of entries. Common interfaces like dma_map_sg() and for_each_sg() limit > their processing to "nents" entries, and the USB code use the value of > urb->num_sgs for this parameter. Which mostly means that the sg_xxx functions are doing a whole load of unnecessary instructions and memory accesses... This probably has a lot to do with the significant difference in the cpu use for the usb3 and 'normal' ethernet interfaces. While each bit doesn't seem significant, they soon add up. David ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥