Robin Murphy <robin.murphy@xxxxxxx> writes: > On 2022-03-24 10:25, Oleksandr Natalenko wrote: >> Hello. >> >> On čtvrtek 24. března 2022 6:57:32 CET Christoph Hellwig wrote: >>> On Wed, Mar 23, 2022 at 08:54:08PM +0000, Robin Murphy wrote: >>>> I'll admit I still never quite grasped the reason for also adding the >>>> override to swiotlb_sync_single_for_device() in aa6f8dcbab47, but I think >>>> by that point we were increasingly tired and confused and starting to >>>> second-guess ourselves (well, I was, at least). I don't think it's wrong >>>> per se, but as I said I do think it can bite anyone who's been doing >>>> dma_sync_*() wrong but getting away with it until now. If ddbd89deb7d3 >>>> alone turns out to work OK then I'd be inclined to try a partial revert of >>>> just that one hunk. >>> >>> Agreed. Let's try that first. >>> >>> Oleksandr, can you try the patch below: >>> >>> >>> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c >>> index 6db1c475ec827..6c350555e5a1c 100644 >>> --- a/kernel/dma/swiotlb.c >>> +++ b/kernel/dma/swiotlb.c >>> @@ -701,13 +701,10 @@ void swiotlb_tbl_unmap_single(struct device *dev, phys_addr_t tlb_addr, >>> void swiotlb_sync_single_for_device(struct device *dev, phys_addr_t tlb_addr, >>> size_t size, enum dma_data_direction dir) >>> { >>> - /* >>> - * Unconditional bounce is necessary to avoid corruption on >>> - * sync_*_for_cpu or dma_ummap_* when the device didn't overwrite >>> - * the whole lengt of the bounce buffer. >>> - */ >>> - swiotlb_bounce(dev, tlb_addr, size, DMA_TO_DEVICE); >>> - BUG_ON(!valid_dma_direction(dir)); >>> + if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) >>> + swiotlb_bounce(dev, tlb_addr, size, DMA_TO_DEVICE); >>> + else >>> + BUG_ON(dir != DMA_FROM_DEVICE); >>> } >>> >>> void swiotlb_sync_single_for_cpu(struct device *dev, phys_addr_t tlb_addr, >>> >> >> With this patch the AP works for me. > > Cool, thanks for confirming. So I think ath9k probably is doing > something dodgy with dma_sync_*(), but if Linus prefers to make the > above change rather than wait for that to get figured out, I believe > that should be fine. I'm looking into this; but in the interest of a speedy resolution of the regression I would be in favour of merging that partial revert and reinstating it if/when we identify (and fix) any bugs in ath9k :) -Toke