[lkml]   [2004]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectQuestion on using MSI in PCI driver
    I'm looking at implementing MSI/MSI-X support in a PCI device driver
    I'm working on. However, I've run into an issue with the MSI API that
    I would like some clarification on.

    When I call pci_enable_msi, since my device is MSI-X capable, the
    kernel calls msix_capability_init, which works out the memory region
    where vectors should be written and then calls request_region. (In
    fact it calls

    dev_msi_cap * PCI_MSIX_ENTRY_SIZE,
    "MSI-X iomap Failure"))

    which leads to a bizarre entry in /proc/iomem with the name "MSI-X
    iomap Failure")

    The problem is that if I follow the standard route in my driver and
    call pci_request_regions() during init (since I want to claim my whole
    device), the request_mem_region in msix_capability_init will fail.
    Now, for my device, the MSI-X table happens to fall in the middle of a
    BAR, and I need to access stuff on both sides of it in that BAR. To
    make things even worse for me, my device has two more BARs I want to claim.

    So it seems I am forced to turn my nice clean pci_request_regions()
    call into two calls to request_mem_region() (to get the beginning and
    end of the BAR with the MSI-X table in it) and two more calls to
    pci_request_region() (to get the other two BARs).

    This isn't the end of the world but it feels suboptimal to me. Anyone
    have an idea for a better way to do this? (I'm happy to write a patch
    to the kernel if someone suggests how to change the MSI API)

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:04    [W:0.022 / U:0.568 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site