From: Ming Lei <ming.lei@redhat.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@lst.de>,
linux-block@vger.kernel.org, linux-nvme@lists.infradead.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
Sagi Grimberg <sagi@grimberg.me>, Daniel Wagner <dwagner@suse.de>,
Wen Xiong <wenxiong@us.ibm.com>,
John Garry <john.garry@huawei.com>,
Hannes Reinecke <hare@suse.de>, Keith Busch <kbusch@kernel.org>
Subject: Re: [PATCH V4 1/3] driver core: mark device as irq affinity managed if any irq is managed
Date: Sat, 17 Jul 2021 17:30:43 +0800 [thread overview]
Message-ID: <YPKjQxZ4roigdvbq@T590> (raw)
In-Reply-To: <20210716200154.GA2113453@bjorn-Precision-5520>
On Fri, Jul 16, 2021 at 03:01:54PM -0500, Bjorn Helgaas wrote:
> On Thu, Jul 15, 2021 at 08:08:42PM +0800, Ming Lei wrote:
> > irq vector allocation with managed affinity may be used by driver, and
> > blk-mq needs this info because managed irq will be shutdown when all
> > CPUs in the affinity mask are offline.
> >
> > The info of using managed irq is often produced by drivers(pci subsystem,
>
> Add space between "drivers" and "(".
> s/pci/PCI/
OK.
>
> Does this "managed IRQ" (or "managed affinity", not sure what the
> correct terminology is here) have something to do with devm?
>
> > platform device, ...), and it is consumed by blk-mq, so different subsystems
> > are involved in this info flow
>
> Add period at end of sentence.
OK.
>
> > Address this issue by adding one field of .irq_affinity_managed into
> > 'struct device'.
> >
> > Suggested-by: Christoph Hellwig <hch@lst.de>
> > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > ---
> > drivers/base/platform.c | 7 +++++++
> > drivers/pci/msi.c | 3 +++
> > include/linux/device.h | 1 +
> > 3 files changed, 11 insertions(+)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 8640578f45e9..d28cb91d5cf9 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -388,6 +388,13 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev,
> > ptr->irq[i], ret);
> > goto err_free_desc;
> > }
> > +
> > + /*
> > + * mark the device as irq affinity managed if any irq affinity
> > + * descriptor is managed
> > + */
> > + if (desc[i].is_managed)
> > + dev->dev.irq_affinity_managed = true;
> > }
> >
> > devres_add(&dev->dev, ptr);
> > diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> > index 3d6db20d1b2b..7ddec90b711d 100644
> > --- a/drivers/pci/msi.c
> > +++ b/drivers/pci/msi.c
> > @@ -1197,6 +1197,7 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
> > if (flags & PCI_IRQ_AFFINITY) {
> > if (!affd)
> > affd = &msi_default_affd;
> > + dev->dev.irq_affinity_managed = true;
>
> This is really opaque to me. I can't tell what the connection between
> PCI_IRQ_AFFINITY and irq_affinity_managed is.
Comment for PCI_IRQ_AFFINITY is 'Auto-assign affinity',
'irq_affinity_managed' basically means that irq's affinity is managed by
kernel.
What blk-mq needs is exactly if PCI_IRQ_AFFINITY is applied when
allocating irq vectors. When PCI_IRQ_AFFINITY is used, genirq will
shutdown the irq when all CPUs in the assigned affinity are offline,
then blk-mq has to drain all in-flight IOs which will be completed
via this irq and prevent new IO. That is the connection.
Or you think 'irq_affinity_managed' isn't named well?
>
> AFAICT the only place irq_affinity_managed is ultimately used is
> blk_mq_hctx_notify_offline(), and there's no obvious connection
> between that and this code.
I believe the connection is described in comment.
Thanks,
Ming
WARNING: multiple messages have this Message-ID (diff)
From: Ming Lei <ming.lei@redhat.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@lst.de>,
linux-block@vger.kernel.org, linux-nvme@lists.infradead.org,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
Sagi Grimberg <sagi@grimberg.me>, Daniel Wagner <dwagner@suse.de>,
Wen Xiong <wenxiong@us.ibm.com>,
John Garry <john.garry@huawei.com>,
Hannes Reinecke <hare@suse.de>, Keith Busch <kbusch@kernel.org>
Subject: Re: [PATCH V4 1/3] driver core: mark device as irq affinity managed if any irq is managed
Date: Sat, 17 Jul 2021 17:30:43 +0800 [thread overview]
Message-ID: <YPKjQxZ4roigdvbq@T590> (raw)
In-Reply-To: <20210716200154.GA2113453@bjorn-Precision-5520>
On Fri, Jul 16, 2021 at 03:01:54PM -0500, Bjorn Helgaas wrote:
> On Thu, Jul 15, 2021 at 08:08:42PM +0800, Ming Lei wrote:
> > irq vector allocation with managed affinity may be used by driver, and
> > blk-mq needs this info because managed irq will be shutdown when all
> > CPUs in the affinity mask are offline.
> >
> > The info of using managed irq is often produced by drivers(pci subsystem,
>
> Add space between "drivers" and "(".
> s/pci/PCI/
OK.
>
> Does this "managed IRQ" (or "managed affinity", not sure what the
> correct terminology is here) have something to do with devm?
>
> > platform device, ...), and it is consumed by blk-mq, so different subsystems
> > are involved in this info flow
>
> Add period at end of sentence.
OK.
>
> > Address this issue by adding one field of .irq_affinity_managed into
> > 'struct device'.
> >
> > Suggested-by: Christoph Hellwig <hch@lst.de>
> > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > ---
> > drivers/base/platform.c | 7 +++++++
> > drivers/pci/msi.c | 3 +++
> > include/linux/device.h | 1 +
> > 3 files changed, 11 insertions(+)
> >
> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> > index 8640578f45e9..d28cb91d5cf9 100644
> > --- a/drivers/base/platform.c
> > +++ b/drivers/base/platform.c
> > @@ -388,6 +388,13 @@ int devm_platform_get_irqs_affinity(struct platform_device *dev,
> > ptr->irq[i], ret);
> > goto err_free_desc;
> > }
> > +
> > + /*
> > + * mark the device as irq affinity managed if any irq affinity
> > + * descriptor is managed
> > + */
> > + if (desc[i].is_managed)
> > + dev->dev.irq_affinity_managed = true;
> > }
> >
> > devres_add(&dev->dev, ptr);
> > diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
> > index 3d6db20d1b2b..7ddec90b711d 100644
> > --- a/drivers/pci/msi.c
> > +++ b/drivers/pci/msi.c
> > @@ -1197,6 +1197,7 @@ int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
> > if (flags & PCI_IRQ_AFFINITY) {
> > if (!affd)
> > affd = &msi_default_affd;
> > + dev->dev.irq_affinity_managed = true;
>
> This is really opaque to me. I can't tell what the connection between
> PCI_IRQ_AFFINITY and irq_affinity_managed is.
Comment for PCI_IRQ_AFFINITY is 'Auto-assign affinity',
'irq_affinity_managed' basically means that irq's affinity is managed by
kernel.
What blk-mq needs is exactly if PCI_IRQ_AFFINITY is applied when
allocating irq vectors. When PCI_IRQ_AFFINITY is used, genirq will
shutdown the irq when all CPUs in the assigned affinity are offline,
then blk-mq has to drain all in-flight IOs which will be completed
via this irq and prevent new IO. That is the connection.
Or you think 'irq_affinity_managed' isn't named well?
>
> AFAICT the only place irq_affinity_managed is ultimately used is
> blk_mq_hctx_notify_offline(), and there's no obvious connection
> between that and this code.
I believe the connection is described in comment.
Thanks,
Ming
_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme
next prev parent reply other threads:[~2021-07-17 9:31 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-15 12:08 [PATCH V4 0/3] blk-mq: fix blk_mq_alloc_request_hctx Ming Lei
2021-07-15 12:08 ` Ming Lei
2021-07-15 12:08 ` [PATCH V4 1/3] driver core: mark device as irq affinity managed if any irq is managed Ming Lei
2021-07-15 12:08 ` Ming Lei
2021-07-15 12:40 ` Greg Kroah-Hartman
2021-07-15 12:40 ` Greg Kroah-Hartman
2021-07-16 2:17 ` Ming Lei
2021-07-16 2:17 ` Ming Lei
2021-07-16 20:01 ` Bjorn Helgaas
2021-07-16 20:01 ` Bjorn Helgaas
2021-07-17 9:30 ` Ming Lei [this message]
2021-07-17 9:30 ` Ming Lei
2021-07-21 0:30 ` Bjorn Helgaas
2021-07-21 0:30 ` Bjorn Helgaas
2021-07-19 7:51 ` John Garry
2021-07-19 7:51 ` John Garry
2021-07-19 9:44 ` Christoph Hellwig
2021-07-19 9:44 ` Christoph Hellwig
2021-07-19 10:39 ` John Garry
2021-07-19 10:39 ` John Garry
2021-07-20 2:38 ` Ming Lei
2021-07-20 2:38 ` Ming Lei
2021-07-21 7:20 ` Thomas Gleixner
2021-07-21 7:20 ` Thomas Gleixner
2021-07-21 7:24 ` Christoph Hellwig
2021-07-21 7:24 ` Christoph Hellwig
2021-07-21 9:44 ` John Garry
2021-07-21 9:44 ` John Garry
2021-07-21 20:22 ` Thomas Gleixner
2021-07-21 20:22 ` Thomas Gleixner
2021-07-22 7:48 ` John Garry
2021-07-22 7:48 ` John Garry
2021-07-21 20:14 ` Thomas Gleixner
2021-07-21 20:14 ` Thomas Gleixner
2021-07-21 20:32 ` Christoph Hellwig
2021-07-21 20:32 ` Christoph Hellwig
2021-07-21 22:38 ` Thomas Gleixner
2021-07-21 22:38 ` Thomas Gleixner
2021-07-22 7:46 ` Christoph Hellwig
2021-07-22 7:46 ` Christoph Hellwig
2021-07-15 12:08 ` [PATCH V4 2/3] blk-mq: mark if one queue map uses managed irq Ming Lei
2021-07-15 12:08 ` Ming Lei
2021-07-15 12:08 ` [PATCH V4 3/3] blk-mq: don't deactivate hctx if managed irq isn't used Ming Lei
2021-07-15 12:08 ` Ming Lei
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=YPKjQxZ4roigdvbq@T590 \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=bhelgaas@google.com \
--cc=dwagner@suse.de \
--cc=gregkh@linuxfoundation.org \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=helgaas@kernel.org \
--cc=john.garry@huawei.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=sagi@grimberg.me \
--cc=tglx@linutronix.de \
--cc=wenxiong@us.ibm.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: 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.