All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Gordeev <agordeev@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Alexander Gordeev <agordeev@redhat.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Michael Ellerman <michael@ellerman.id.au>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Tejun Heo <tj@kernel.org>,
	Ben Hutchings <bhutchings@solarflare.com>,
	David Laight <David.Laight@ACULAB.COM>,
	Mark Lord <kernel@start.ca>, "H. Peter Anvin" <hpa@zytor.com>,
	linux-pci@vger.kernel.org
Subject: [PATCH v4 0/9] PCI/MSI: Introduce pci_auto_enable_msi*() family helpers
Date: Mon, 16 Dec 2013 09:34:53 +0100	[thread overview]
Message-ID: <cover.1387140921.git.agordeev@redhat.com> (raw)

This series is against "next" branch in Bjorn's repo:
git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git

Changes from v3 to v4:
  - pcim_enable_msi* functions renamed to pci_auto_enable_msi* ones
  - PowerPC patches dropped
  - pci_get_msi_cap()     renamed to pci_get_msix_vec_count() and
    pci_msix_table_size() renamed to pci_get_msix_vec_count()

Changes from v2 to v3:
  - new public interfaces commented in drivers/pci/msi.c;
  - patch "Make quota traversing and requesting race-safe" explained;
  - pci_enable_msi/msix() 'nvec' arg type changed from 'unsigned int' to 'int';
  - pcim_enable_msi*() arg 'nvec' renamed to 'maxvec' when upper limit passed;
  - pcim_enable_msi*(..., maxvec, minvec) arg order swapped to minvec, maxvec;
  - "PCI: Fail MSI/MSI-X initialization if device is not in PCI_D0" commit
    869a161 and "PCI/MSI: Factor out pci_get_msi_cap() interface" patch
    conflicts resolved;

Currently many device drivers need contiguously call functions
pci_enable_msix() for MSI-X or pci_enable_msi_block() for MSI
in a loop until success or failure. This update generalizes
this usage pattern and introduces pci_auto_enable_msi*() family
helpers.

As result, device drivers do not have to deal with tri-state
return values from pci_enable_msix() and pci_enable_msi_block()
functions directly and expected to have more clearer and straight
code.

So i.e. the request loop described in the documentation...

	int foo_driver_enable_msix(struct foo_adapter *adapter,
				   int nvec)
	{
		while (nvec >= FOO_DRIVER_MINIMUM_NVEC) {
			rc = pci_enable_msix(adapter->pdev,
					     adapter->msix_entries,
					     nvec);
			if (rc > 0)
				nvec = rc;
			else
				return rc;
		}

		return -ENOSPC;
	}

...would turn into a single helper call....

	rc = pci_auto_enable_msix_range(adapter->pdev,
					adapter->msix_entries,
					FOO_DRIVER_MINIMUM_NVEC,
					nvec);

Device drivers with more specific requirements (i.e. a number of
MSI-Xs which is a multiple of a certain number within a specified
range) would still need to implement the loop using the two old
functions.

The tree could be found in "pci-next-msi-v4" branch in repo:
https://github.com/a-gordeev/linux.git


Alexander Gordeev (9):
  PCI/MSI/s390: Fix single MSI only check
  PCI/MSI/s390: Remove superfluous check of MSI type
  PCI/MSI: Fix return value when populate_msi_sysfs() failed
  PCI/MSI: Return -ENOSYS for unimplemented interfaces, not -1
  PCI/MSI: Make pci_enable_msi/msix() 'nvec' argument type as int
  PCI/MSI: Factor out pci_get_msi_vec_count() interface
  PCI/MSI: Get rid of pci_enable_msi_block_auto() interface
  PCI/MSI: Introduce pci_get_msix_vec_count() interface
  PCI/MSI: Introduce pci_auto_enable_msi*() family helpers

 Documentation/PCI/MSI-HOWTO.txt |  175 +++++++++++++++++++++++++++++++++------
 arch/s390/pci/pci.c             |    4 +-
 drivers/ata/ahci.c              |   56 ++++++++-----
 drivers/pci/msi.c               |  163 +++++++++++++++++++++++++++---------
 drivers/pci/pcie/portdrv_core.c |    7 +-
 include/linux/pci.h             |   78 +++++++++++++++---
 6 files changed, 380 insertions(+), 103 deletions(-)

-- 
1.7.7.6


             reply	other threads:[~2013-12-16 18:44 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-16  8:34 Alexander Gordeev [this message]
2013-12-16  8:34 ` [PATCH v4 1/9] PCI/MSI/s390: Fix single MSI only check Alexander Gordeev
2013-12-16  8:34 ` [PATCH v4 2/9] PCI/MSI/s390: Remove superfluous check of MSI type Alexander Gordeev
2013-12-16  8:34 ` [PATCH v4 3/9] PCI/MSI: Fix return value when populate_msi_sysfs() failed Alexander Gordeev
2013-12-16  8:34 ` [PATCH v4 4/9] PCI/MSI: Return -ENOSYS for unimplemented interfaces, not -1 Alexander Gordeev
2013-12-16  8:34 ` [PATCH v4 5/9] PCI/MSI: Make pci_enable_msi/msix() 'nvec' argument type as int Alexander Gordeev
2013-12-16  8:34 ` [PATCH v4 6/9] PCI/MSI: Factor out pci_get_msi_vec_count() interface Alexander Gordeev
2013-12-18  0:33   ` Bjorn Helgaas
2013-12-16  8:35 ` [PATCH v4 7/9] PCI/MSI: Get rid of pci_enable_msi_block_auto() interface Alexander Gordeev
2013-12-16  8:35 ` [PATCH v4 8/9] PCI/MSI: Introduce pci_get_msix_vec_count() interface Alexander Gordeev
2013-12-16  8:35 ` [PATCH v4 9/9] PCI/MSI: Introduce pci_auto_enable_msi*() family helpers Alexander Gordeev
2013-12-18  0:30   ` Bjorn Helgaas
2013-12-18 13:23     ` Alexander Gordeev
2013-12-18 18:58       ` Bjorn Helgaas
2013-12-19 13:42         ` Alexander Gordeev
2013-12-19 13:47           ` Tejun Heo
2013-12-19 21:37           ` Bjorn Helgaas
2013-12-20  9:04             ` Alexander Gordeev
2013-12-20 13:28               ` Tejun Heo
2013-12-20 10:28     ` Alexander Gordeev
2013-12-23 14:44     ` Alexander Gordeev
2013-12-23 17:19       ` Bjorn Helgaas
2013-12-19 22:30 ` [PATCH v4 0/9] " Bjorn Helgaas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1387140921.git.agordeev@redhat.com \
    --to=agordeev@redhat.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=bhutchings@solarflare.com \
    --cc=hpa@zytor.com \
    --cc=kernel@start.ca \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=michael@ellerman.id.au \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.