Christian Lamparter <chunkeey@xxxxxxxxx> writes: > On 2020-08-02 15:29, Jia-Ju Bai wrote: >> In p54p_tx(), skb->data is mapped to streaming DMA on line 337: >> mapping = pci_map_single(..., skb->data, ...); >> >> Then skb->data is accessed on line 349: >> desc->device_addr = ((struct p54_hdr *)skb->data)->req_id; >> >> This access may cause data inconsistency between CPU cache and hardware. >> >> To fix this problem, ((struct p54_hdr *)skb->data)->req_id is stored in >> a local variable before DMA mapping, and then the driver accesses this >> local variable instead of skb->data. > > Interesting. Please bear with me here. From my understanding, the > streaming direction is set to PCI_DMA_TODEVICE. So is it really > possible for the hardware to interfere with the data without the IOMMU > catching this? Also is there any documentation about this scenario? I would like to understand this better. > (That said, patch looks be fine. I'll need to dust off a old PCI PC to > check this with real hardware, if requested.) No need to test with real hardware for my sake, but a careful review is very much appreciated. -- https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches