On Thu, Sep 24, 2020 at 05:03:11PM +1000, Alexey Kardashevskiy wrote: > May be... The current behavior is not wrong (after the fix) but not > optimal either. Even with legacy PCI it should just result in failing > attempt to set 64bit mask which drivers should still handle, i.e. choose > a shorter mask.
Err, no. > Why not ditch the whole dma_get_required_mask() and just fail on setting > a bigger mask? Are these failures not handled in some drivers? Or there > are cases when a shorter mask is better? Thanks, Because that is a complete pain. Think of it, the device/driver knows what it supports. For 98% of the modern devices that means all 64-bit bits, and for most others this means 32-bits, with a few wackos that support 48 bits or something like that. The 98% just take any address thrown at them, and the others just care that they never see an address larger than what they support. They could not care any less if the systems supports 31, 36, 41, 48, 52, 55, 61 or 63-bit addressing, an they most certainly should not implement stupid boilerplate code to guess what addressing mode the system implements. They just declare what they support. Then you have the 12 drivers for devices that can do optimizations if they never see large DMA addresses. They use the somewhat misnamed dma_get_required_mask API to query what the largest address they might see is and act based on that, while not putting any burden on all the sane devices/drivers.