Loading .gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ modules.builtin *.gz *.bz2 *.lzma *.lzo *.patch *.gcno Loading Documentation/.gitignore 0 → 100644 +7 −0 Original line number Diff line number Diff line filesystems/dnotify_test laptops/dslm timers/hpet_example vm/hugepage-mmap vm/hugepage-shm vm/map_hugetlb Documentation/ABI/testing/sysfs-bus-pci +0 −40 Original line number Diff line number Diff line Loading @@ -133,46 +133,6 @@ Description: The symbolic link points to the PCI device sysfs entry of the Physical Function this device associates with. What: /sys/bus/pci/slots/... Date: April 2005 (possibly older) KernelVersion: 2.6.12 (possibly older) Contact: linux-pci@vger.kernel.org Description: When the appropriate driver is loaded, it will create a directory per claimed physical PCI slot in /sys/bus/pci/slots/. The names of these directories are specific to the driver, which in turn, are specific to the platform, but in general, should match the label on the machine's physical chassis. The drivers that can create slot directories include the PCI hotplug drivers, and as of 2.6.27, the pci_slot driver. The slot directories contain, at a minimum, a file named 'address' which contains the PCI bus:device:function tuple. Other files may appear as well, but are specific to the driver. What: /sys/bus/pci/slots/.../function[0-7] Date: March 2010 KernelVersion: 2.6.35 Contact: linux-pci@vger.kernel.org Description: If PCI slot directories (as described above) are created, and the physical slot is actually populated with a device, symbolic links in the slot directory pointing to the device's PCI functions are created as well. What: /sys/bus/pci/devices/.../slot Date: March 2010 KernelVersion: 2.6.35 Contact: linux-pci@vger.kernel.org Description: If PCI slot directories (as described above) are created, a symbolic link pointing to the slot directory will be created as well. What: /sys/bus/pci/slots/.../module Date: June 2009 Contact: linux-pci@vger.kernel.org Loading Documentation/ABI/testing/sysfs-firmware-sfi 0 → 100644 +15 −0 Original line number Diff line number Diff line What: /sys/firmware/sfi/tables/ Date: May 2010 Contact: Len Brown <lenb@kernel.org> Description: SFI defines a number of small static memory tables so the kernel can get platform information from firmware. The tables are defined in the latest SFI specification: http://simplefirmware.org/documentation While the tables are used by the kernel, user-space can observe them this way: # cd /sys/firmware/sfi/tables # cat $TABLENAME > $TABLENAME.bin Documentation/DMA-API-HOWTO.txt +49 −36 Original line number Diff line number Diff line Loading @@ -639,6 +639,36 @@ is planned to completely remove virt_to_bus() and bus_to_virt() as they are entirely deprecated. Some ports already do not provide these as it is impossible to correctly support them. Handling Errors DMA address space is limited on some architectures and an allocation failure can be determined by: - checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0 - checking the returned dma_addr_t of dma_map_single and dma_map_page by using dma_mapping_error(): dma_addr_t dma_handle; dma_handle = dma_map_single(dev, addr, size, direction); if (dma_mapping_error(dev, dma_handle)) { /* * reduce current DMA mapping usage, * delay and try again later or * reset driver. */ } Networking drivers must call dev_kfree_skb to free the socket buffer and return NETDEV_TX_OK if the DMA mapping fails on the transmit hook (ndo_start_xmit). This means that the socket buffer is just dropped in the failure case. SCSI drivers must return SCSI_MLQUEUE_HOST_BUSY if the DMA mapping fails in the queuecommand hook. This means that the SCSI subsystem passes the command to the driver again later. Optimizing Unmap State Space Consumption On many platforms, dma_unmap_{single,page}() is simply a nop. Loading Loading @@ -703,42 +733,25 @@ to "Closing". 1) Struct scatterlist requirements. Struct scatterlist must contain, at a minimum, the following members: struct page *page; unsigned int offset; unsigned int length; The base address is specified by a "page+offset" pair. Previous versions of struct scatterlist contained a "void *address" field that was sometimes used instead of page+offset. As of Linux 2.5., page+offset is always used, and the "address" field has been deleted. 2) More to come... Handling Errors DMA address space is limited on some architectures and an allocation failure can be determined by: - checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0 - checking the returned dma_addr_t of dma_map_single and dma_map_page by using dma_mapping_error(): dma_addr_t dma_handle; dma_handle = dma_map_single(dev, addr, size, direction); if (dma_mapping_error(dev, dma_handle)) { /* * reduce current DMA mapping usage, * delay and try again later or * reset driver. */ } Don't invent the architecture specific struct scatterlist; just use <asm-generic/scatterlist.h>. You need to enable CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs (including software IOMMU). 2) ARCH_KMALLOC_MINALIGN Architectures must ensure that kmalloc'ed buffer is DMA-safe. Drivers and subsystems depend on it. If an architecture isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in the CPU cache is identical to data in main memory), ARCH_KMALLOC_MINALIGN must be set so that the memory allocator makes sure that kmalloc'ed buffer doesn't share a cache line with the others. See arch/arm/include/asm/cache.h as an example. Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment constraints. You don't need to worry about the architecture data alignment constraints (e.g. the alignment constraints about 64-bit objects). Closing Loading Loading
.gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ modules.builtin *.gz *.bz2 *.lzma *.lzo *.patch *.gcno Loading
Documentation/.gitignore 0 → 100644 +7 −0 Original line number Diff line number Diff line filesystems/dnotify_test laptops/dslm timers/hpet_example vm/hugepage-mmap vm/hugepage-shm vm/map_hugetlb
Documentation/ABI/testing/sysfs-bus-pci +0 −40 Original line number Diff line number Diff line Loading @@ -133,46 +133,6 @@ Description: The symbolic link points to the PCI device sysfs entry of the Physical Function this device associates with. What: /sys/bus/pci/slots/... Date: April 2005 (possibly older) KernelVersion: 2.6.12 (possibly older) Contact: linux-pci@vger.kernel.org Description: When the appropriate driver is loaded, it will create a directory per claimed physical PCI slot in /sys/bus/pci/slots/. The names of these directories are specific to the driver, which in turn, are specific to the platform, but in general, should match the label on the machine's physical chassis. The drivers that can create slot directories include the PCI hotplug drivers, and as of 2.6.27, the pci_slot driver. The slot directories contain, at a minimum, a file named 'address' which contains the PCI bus:device:function tuple. Other files may appear as well, but are specific to the driver. What: /sys/bus/pci/slots/.../function[0-7] Date: March 2010 KernelVersion: 2.6.35 Contact: linux-pci@vger.kernel.org Description: If PCI slot directories (as described above) are created, and the physical slot is actually populated with a device, symbolic links in the slot directory pointing to the device's PCI functions are created as well. What: /sys/bus/pci/devices/.../slot Date: March 2010 KernelVersion: 2.6.35 Contact: linux-pci@vger.kernel.org Description: If PCI slot directories (as described above) are created, a symbolic link pointing to the slot directory will be created as well. What: /sys/bus/pci/slots/.../module Date: June 2009 Contact: linux-pci@vger.kernel.org Loading
Documentation/ABI/testing/sysfs-firmware-sfi 0 → 100644 +15 −0 Original line number Diff line number Diff line What: /sys/firmware/sfi/tables/ Date: May 2010 Contact: Len Brown <lenb@kernel.org> Description: SFI defines a number of small static memory tables so the kernel can get platform information from firmware. The tables are defined in the latest SFI specification: http://simplefirmware.org/documentation While the tables are used by the kernel, user-space can observe them this way: # cd /sys/firmware/sfi/tables # cat $TABLENAME > $TABLENAME.bin
Documentation/DMA-API-HOWTO.txt +49 −36 Original line number Diff line number Diff line Loading @@ -639,6 +639,36 @@ is planned to completely remove virt_to_bus() and bus_to_virt() as they are entirely deprecated. Some ports already do not provide these as it is impossible to correctly support them. Handling Errors DMA address space is limited on some architectures and an allocation failure can be determined by: - checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0 - checking the returned dma_addr_t of dma_map_single and dma_map_page by using dma_mapping_error(): dma_addr_t dma_handle; dma_handle = dma_map_single(dev, addr, size, direction); if (dma_mapping_error(dev, dma_handle)) { /* * reduce current DMA mapping usage, * delay and try again later or * reset driver. */ } Networking drivers must call dev_kfree_skb to free the socket buffer and return NETDEV_TX_OK if the DMA mapping fails on the transmit hook (ndo_start_xmit). This means that the socket buffer is just dropped in the failure case. SCSI drivers must return SCSI_MLQUEUE_HOST_BUSY if the DMA mapping fails in the queuecommand hook. This means that the SCSI subsystem passes the command to the driver again later. Optimizing Unmap State Space Consumption On many platforms, dma_unmap_{single,page}() is simply a nop. Loading Loading @@ -703,42 +733,25 @@ to "Closing". 1) Struct scatterlist requirements. Struct scatterlist must contain, at a minimum, the following members: struct page *page; unsigned int offset; unsigned int length; The base address is specified by a "page+offset" pair. Previous versions of struct scatterlist contained a "void *address" field that was sometimes used instead of page+offset. As of Linux 2.5., page+offset is always used, and the "address" field has been deleted. 2) More to come... Handling Errors DMA address space is limited on some architectures and an allocation failure can be determined by: - checking if dma_alloc_coherent returns NULL or dma_map_sg returns 0 - checking the returned dma_addr_t of dma_map_single and dma_map_page by using dma_mapping_error(): dma_addr_t dma_handle; dma_handle = dma_map_single(dev, addr, size, direction); if (dma_mapping_error(dev, dma_handle)) { /* * reduce current DMA mapping usage, * delay and try again later or * reset driver. */ } Don't invent the architecture specific struct scatterlist; just use <asm-generic/scatterlist.h>. You need to enable CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs (including software IOMMU). 2) ARCH_KMALLOC_MINALIGN Architectures must ensure that kmalloc'ed buffer is DMA-safe. Drivers and subsystems depend on it. If an architecture isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in the CPU cache is identical to data in main memory), ARCH_KMALLOC_MINALIGN must be set so that the memory allocator makes sure that kmalloc'ed buffer doesn't share a cache line with the others. See arch/arm/include/asm/cache.h as an example. Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment constraints. You don't need to worry about the architecture data alignment constraints (e.g. the alignment constraints about 64-bit objects). Closing Loading