On Thu, Feb 14, 2019 at 10:48:15AM +0100, Stefan Wahren wrote: > Hi Stanislaw, > > Am 14.02.19 um 10:25 schrieb Stanislaw Gruszka: > > On Thu, Feb 14, 2019 at 07:49:57AM +0100, Stefan Wahren wrote: > >> Hi Stanislaw, > >> > >>> Stanislaw Gruszka hat am 12. Februar 2019 um 10:30 geschrieben: > >>> > >>> > >>> > >>> In usb_sg_init() urb->num_sgs is set 0 for sg_tablesize = 0 controllers. > >>> In mt76 we set urb->num_sgs to 1. I thought it is fine, but now I think > >>> this is bug. We can fix that without changing allocation method and > >>> still use SG allocation. Attached patch do this, please check if it works > >>> on rpi. Patch is on top of your error path fixes. > >> your patch didn't apply cleanly to yesterdays next. After some minor manual fixup, i was able to build them and here are the results starting from boot (please ignore the invalid time in the kernel log): > >> https://gist.github.com/lategoodbye/33bd5bc75b9fc935faa231bc472defa8 > > I think this is due to urb->transfer_length and sg[0]->length mismatch, > > which should be addressed by my other patch. I'm attaching the patch > > rebased on -next with this line integrated, please test. > > > > But there could be other bug's in mt76-usb SG code. I found another bug in mt76usb SG code. We set sg->offset bigger than PAGE_SIZE that actually make sg point to memory in different page than sg->page. Correcting this with another patch that avoid using sg mapping with sg->length > PAGE_SIZE, fixed mt76x0u with AMD IOMMU: https://bugzilla.kernel.org/show_bug.cgi?id=202241 I'm attaching 3 patches, they should also fix issue on rpi. It's also possible that only 2 patches are sufficient: 0001-mt76usb-do-not-set-urb-num_sgs-to-1-for-non-SG-usb-h.patch 0003-mt76usb-do-not-use-compound-head-page-for-SG-I-O.patch to fix the issue, if doing dma_map_{page,sg} is fine with sg->offset == 0 and sg->length bigger than one page. Please test, thanks. Stanislaw