From: Thomas Gleixner <tglx@linutronix.de> To: LKML <linux-kernel@vger.kernel.org> Cc: Ming Lei <ming.lei@redhat.com>, Christoph Hellwig <hch@lst.de>, Bjorn Helgaas <helgaas@kernel.org>, Jens Axboe <axboe@kernel.dk>, linux-block@vger.kernel.org, Sagi Grimberg <sagi@grimberg.me>, linux-nvme@lists.infradead.org, linux-pci@vger.kernel.org, Keith Busch <keith.busch@intel.com>, Marc Zyngier <marc.zyngier@arm.com>, Sumit Saxena <sumit.saxena@broadcom.com>, Kashyap Desai <kashyap.desai@broadcom.com>, Shivasharan Srikanteshwara <shivasharan.srikanteshwara@broadcom.com> Subject: [patch V5 0/8] genirq/affinity: Overhaul the multiple interrupt sets support Date: Thu, 14 Feb 2019 21:47:55 +0100 [thread overview] Message-ID: <20190214204755.819014197@linutronix.de> (raw) This is a follow up on Ming's V4 patch series, which addresses the short comings of multiple interrupt sets in the core code: https://lkml.kernel.org/r/20190214122347.17372-1-ming.lei@redhat.com The series applies against: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git master and is also available from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git The changes vs. Ming's v4 are: 1) Do a cleanup as a first step to convert all the integer logic over to use unsigned int. I did this because I tripped over the plain integer calculation at some point and there is really no reason why any of this should be signed. In hindsight I should had asked for that when the whole stuff got introduced but for some reason I totally missed that. 2) Fix the memcpy() in the preparatory patch which moves the set_size array into struct irq_affinity. Fixed up the kerneldoc comments 3) Fixed the case for simple invocations (no sets, no callback) by installing a default callback which just sets nr_sets to 1 and transfers the number of spreadable vectors to the set_size array at index 0. That allows multiple consequtive invocations from the PCI code without having conditionals and corner case handling in the affinity spreading logic. IOW, it's just a variant of set handling. Moved the sanity check for the number of sets after the callback invocation so broken driver callback code is catched properly. The callback is now invoked with the number of spreadable interrupts instead of the total vectors, so the callback does not have to worry about the pre/post_vector reservation at all. 4) Simplified the NVME callback logic further and brought the adjustments of the number of sets back which got dropped accidentaly. 5) Remove all workarounds and leftovers of the old set support because from now on multiple interrupt sets can only be supported when a driver callback is supplied. Checking irq_affinity::nr_sets and the callback does not make any sense now. On top of that I added the two patches which I postponed due to Ming's work. They add support for marking a set unmanaged. This was asked for the MegaSaS folks (Cc'ed) so they can request one managed set for the normal multi queue logic and one unmanaged set for special driver specific interrupts. The unmanaged set is spread out in the usual way, but not marked managed and therefore the interrupts are treated as regular device interrupts like the pre/post vectors. Ming, thanks for the great work and your patience. I picked that up and fixed up the missing bits only because my deadline for 5.1 feature patches is basically tomorrow and not because I'm disappointed with your work. Quite the contrary! As I dropped the reviewed/acked-by's due to some fundamental changes, can I ask everyone to have an eye on the set again please? Especially the NVME callback needs some scrunity, it looks way too simple now :) Some testing would be appreciated as well. Thanks, tglx 8<---------------- drivers/nvme/host/pci.c | 111 ++++++++++------------------------------ drivers/pci/msi.c | 32 +++-------- drivers/scsi/be2iscsi/be_main.c | 2 include/linux/interrupt.h | 35 ++++++++---- include/linux/pci.h | 4 - kernel/irq/affinity.c | 107 +++++++++++++++++++++----------------- 6 files changed, 126 insertions(+), 165 deletions(-)
WARNING: multiple messages have this Message-ID (diff)
From: tglx@linutronix.de (Thomas Gleixner) Subject: [patch V5 0/8] genirq/affinity: Overhaul the multiple interrupt sets support Date: Thu, 14 Feb 2019 21:47:55 +0100 [thread overview] Message-ID: <20190214204755.819014197@linutronix.de> (raw) This is a follow up on Ming's V4 patch series, which addresses the short comings of multiple interrupt sets in the core code: https://lkml.kernel.org/r/20190214122347.17372-1-ming.lei at redhat.com The series applies against: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git master and is also available from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git The changes vs. Ming's v4 are: 1) Do a cleanup as a first step to convert all the integer logic over to use unsigned int. I did this because I tripped over the plain integer calculation at some point and there is really no reason why any of this should be signed. In hindsight I should had asked for that when the whole stuff got introduced but for some reason I totally missed that. 2) Fix the memcpy() in the preparatory patch which moves the set_size array into struct irq_affinity. Fixed up the kerneldoc comments 3) Fixed the case for simple invocations (no sets, no callback) by installing a default callback which just sets nr_sets to 1 and transfers the number of spreadable vectors to the set_size array at index 0. That allows multiple consequtive invocations from the PCI code without having conditionals and corner case handling in the affinity spreading logic. IOW, it's just a variant of set handling. Moved the sanity check for the number of sets after the callback invocation so broken driver callback code is catched properly. The callback is now invoked with the number of spreadable interrupts instead of the total vectors, so the callback does not have to worry about the pre/post_vector reservation at all. 4) Simplified the NVME callback logic further and brought the adjustments of the number of sets back which got dropped accidentaly. 5) Remove all workarounds and leftovers of the old set support because from now on multiple interrupt sets can only be supported when a driver callback is supplied. Checking irq_affinity::nr_sets and the callback does not make any sense now. On top of that I added the two patches which I postponed due to Ming's work. They add support for marking a set unmanaged. This was asked for the MegaSaS folks (Cc'ed) so they can request one managed set for the normal multi queue logic and one unmanaged set for special driver specific interrupts. The unmanaged set is spread out in the usual way, but not marked managed and therefore the interrupts are treated as regular device interrupts like the pre/post vectors. Ming, thanks for the great work and your patience. I picked that up and fixed up the missing bits only because my deadline for 5.1 feature patches is basically tomorrow and not because I'm disappointed with your work. Quite the contrary! As I dropped the reviewed/acked-by's due to some fundamental changes, can I ask everyone to have an eye on the set again please? Especially the NVME callback needs some scrunity, it looks way too simple now :) Some testing would be appreciated as well. Thanks, tglx 8<---------------- drivers/nvme/host/pci.c | 111 ++++++++++------------------------------ drivers/pci/msi.c | 32 +++-------- drivers/scsi/be2iscsi/be_main.c | 2 include/linux/interrupt.h | 35 ++++++++---- include/linux/pci.h | 4 - kernel/irq/affinity.c | 107 +++++++++++++++++++++----------------- 6 files changed, 126 insertions(+), 165 deletions(-)
next reply other threads:[~2019-02-14 21:37 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-14 20:47 Thomas Gleixner [this message] 2019-02-14 20:47 ` [patch V5 0/8] genirq/affinity: Overhaul the multiple interrupt sets support Thomas Gleixner 2019-02-14 20:47 ` [patch V5 1/8] genirq/affinity: Code consolidation Thomas Gleixner 2019-02-14 20:47 ` Thomas Gleixner 2019-02-14 20:47 ` [patch V5 2/8] genirq/affinity: Store interrupt sets size in struct irq_affinity Thomas Gleixner 2019-02-14 20:47 ` Thomas Gleixner 2019-02-14 20:47 ` [patch V5 3/8] genirq/affinity: Add new callback for (re)calculating interrupt sets Thomas Gleixner 2019-02-14 20:47 ` Thomas Gleixner 2019-02-14 20:47 ` [patch V5 4/8] nvme-pci: Simplify interrupt allocation Thomas Gleixner 2019-02-14 20:47 ` Thomas Gleixner 2019-02-14 22:41 ` Ming Lei 2019-02-14 22:41 ` Ming Lei 2019-02-14 23:55 ` Thomas Gleixner 2019-02-14 23:55 ` Thomas Gleixner 2019-02-15 23:00 ` Thomas Gleixner 2019-02-15 23:00 ` Thomas Gleixner 2019-02-15 9:24 ` Marc Zyngier 2019-02-15 9:24 ` Marc Zyngier 2019-02-15 9:52 ` Thomas Gleixner 2019-02-15 9:52 ` Thomas Gleixner 2019-02-15 9:54 ` Thomas Gleixner 2019-02-15 9:54 ` Thomas Gleixner 2019-02-14 20:48 ` [patch V5 5/8] genirq/affinity: Remove the leftovers of the original set support Thomas Gleixner 2019-02-14 20:48 ` Thomas Gleixner 2019-02-14 20:48 ` [patch V5 6/8] PCI/MSI: Remove obsolete sanity checks for multiple interrupt sets Thomas Gleixner 2019-02-14 20:48 ` Thomas Gleixner 2019-02-14 20:48 ` [patch V5 7/8] genirq/affinity: Set is_managed in the spreading function Thomas Gleixner 2019-02-14 20:48 ` Thomas Gleixner 2019-02-14 20:48 ` [patch V5 8/8] genirq/affinity: Add support for non-managed affinity sets Thomas Gleixner 2019-02-14 20:48 ` Thomas Gleixner
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=20190214204755.819014197@linutronix.de \ --to=tglx@linutronix.de \ --cc=axboe@kernel.dk \ --cc=hch@lst.de \ --cc=helgaas@kernel.org \ --cc=kashyap.desai@broadcom.com \ --cc=keith.busch@intel.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=linux-pci@vger.kernel.org \ --cc=marc.zyngier@arm.com \ --cc=ming.lei@redhat.com \ --cc=sagi@grimberg.me \ --cc=shivasharan.srikanteshwara@broadcom.com \ --cc=sumit.saxena@broadcom.com \ /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: linkBe 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.