• Hector Martin's avatar
    firewire-ohci: work around oversized DMA reads on JMicron controllers · 18877518
    Hector Martin authored
    At least some JMicron controllers issue buggy oversized DMA reads when
    fetching context descriptors, always fetching 0x20 bytes at once for
    descriptors which are only 0x10 bytes long. This is often harmless, but
    can cause page faults on modern systems with IOMMUs:
    
    DMAR: [DMA Read] Request device [05:00.0] fault addr fff56000 [fault reason 06] PTE Read access is not set
    firewire_ohci 0000:05:00.0: DMA context IT0 has stopped, error code: evt_descriptor_read
    
    This works around the problem by always leaving 0x10 padding bytes at
    the end of descriptor buffer pages, which should be harmless to do
    unconditionally for controllers in case others have the same behavior.
    Signed-off-by: default avatarHector Martin <marcan@marcan.st>
    Reviewed-by: default avatarClemens Ladisch <clemens@ladisch.de>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    18877518
ohci.c 106 KB