]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Always map full length of coherent DMA buffer allocation 331/head
authorMichael Brown <mcb30@ipxe.org>
Tue, 20 Apr 2021 13:37:08 +0000 (14:37 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 20 Apr 2021 13:37:08 +0000 (14:37 +0100)
The EFI PCI API takes a page count as the input to AllocateBuffer()
but a byte count as the input to Map().  There is nothing in the UEFI
specification that requires us to map exactly the allocated length,
and no systems have yet been observed that will fail if the map length
does not exactly match the allocated length.  However, it is plausible
that some implementations may fail if asked to map a length that does
not match the length of the corresponding allocation.

Avoid potential future problems by always mapping the full allocated
length.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_pci.c

index 4adee0fd8602e735506b9d2338591b62c754cbc4..ef02c9c0e8ca57677e872b8db8c74c601d30721d 100644 (file)
@@ -523,7 +523,8 @@ static void * efipci_dma_alloc ( struct dma_device *dma,
 
        /* Map buffer */
        if ( ( rc = efipci_dma_map ( dma, map, virt_to_phys ( addr ),
-                                    len, DMA_BI ) ) != 0 )
+                                    ( pages * EFI_PAGE_SIZE ),
+                                    DMA_BI ) ) != 0 )
                goto err_map;
 
        /* Increment allocation count (for debugging) */