ahci: per-port msix support
authorDan Williams <dan.j.williamps@intel.com>
Thu, 12 Nov 2015 00:27:33 +0000 (16:27 -0800)
committerTejun Heo <tj@kernel.org>
Mon, 16 Nov 2015 16:29:10 +0000 (11:29 -0500)
commitd684a90d38e24dcaf95fdb32c83efe05f80d152a
tree855bb8396232c9b682394125c46ada2671452bca
parent4d92f0099a06ef0e36c7673f7c090f1a448b2d1b
ahci: per-port msix support

Some AHCI controllers support per-port MSI-X vectors.  At the same time
the Linux AHCI driver needs to support one-off architectures that
implement a single MSI-X vector for all ports.  The heuristic for
enabling AHCI ports becomes, in order of preference:

1/ per-port multi-MSI-X

2/ per-port multi-MSI

3/ single MSI

4/ single MSI-X

5/ legacy INTX

This all depends on AHCI implementations with potentially broken MSI-X
requesting less vectors than the number of ports.  If this assumption is
violated we will need to start explicitly white-listing AHCI-MSIX
implementations.

Reported-by: Ricardo Neri <ricardo.neri@intel.com>
[ricardo: fix struct msix_entry handling]
Reported-by: kernel test robot <ying.huang@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/ahci.c
drivers/ata/ahci.h
drivers/ata/libahci.c