From: Rajat Jain <rajatjain@juniper.net>
To: Bjorn Helgaas <bhelgaas@google.com>,
Sandeep Mann <sandeep@purestorage.com>
Cc: "linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"rajatxjain@gmail.com" <rajatxjain@gmail.com>,
Guenter Roeck <groeck@juniper.net>,
Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
"Tejun Heo" <tj@kernel.org>
Subject: RE: [PATCH] PCI: pciehp: Use ordered workqueue for HPC events
Date: Tue, 4 Nov 2014 08:10:15 +0000 [thread overview]
Message-ID: <9d8b44697a4e42a5a69012a5f3be1b26@DM2PR05MB975.namprd05.prod.outlook.com> (raw)
In-Reply-To: <20140904211042.GD17125@google.com>
Hello,
> -----Original Message-----
> From: linux-pci-owner@vger.kernel.org [mailto:linux-pci-
> owner@vger.kernel.org] On Behalf Of Bjorn Helgaas
> Sent: Thursday, September 04, 2014 2:11 PM
> To: Sandeep Mann
> Cc: linux-pci@vger.kernel.org
> Subject: Re: [PATCH] PCI: pciehp: Use ordered workqueue for HPC events
>
> On Fri, Aug 01, 2014 at 03:47:12PM -0700, Sandeep Mann wrote:
> > Using an ordered workqueue serializes processing of hotplug event.
> > Processing an hotplug event for some devices can take a relatively
> > "long" time, which means if a device is added and removed in quick
> > succession (or due to flacky hardware), it can lead to multiple
> > outstanding hotplug events. Processing these events concurrently can
> > lead to unknown internal state and/or kernel panics.
> >
> > Signed-off-by: Sandeep Mann <sandeep@purestorage.com>
Acked-by: Rajat Jain <rajatxjain@gmail.com>
>
> What's the status of this? I see Rajat's ack, but there was a lot of subsequent
> discussion, and I'm not sure whether there was a conclusion.
Yes, we concluded that the patch was needed.
>
> Given that, I'd like to see a bugzilla with the relevant background (lspci -vv,
> dmesg log).
Sandeep, is that something you can provide?
> Also, shpchp_core.c has similar code, so I'd like to see either a
> similar patch for it or an explanation of why that driver doesn't need it.
>
I can provide that patch. I took a look at the commit history of SHPCHP and PCIEHP
And I see a bunch of commits that switch to using the unordered work queues.
d347e75847 ("PCI: shpchp: Handle push button event asynchronously")
10959d72d4 ("PCI: shpchp: Make shpchp_wq non-ordered")
486b10b9f4 ("PCI: pciehp: Handle push button event asynchronously")
e24dcbef93 ("shpchp: update workqueue usage")
a827ea307b ("pciehp: update workqueue usage")
While I'm still trying to understand if there are scenarios where ordered queues can be a problem,
I'm able to find convincing scenarios where having an unordered queue will fail the driver.
Using ordered queues are definitely a requirement for cases where
hotplug events can happen very fast enough not to give SW the time to
handle them. (For e.g., for pciehp: PCIe link fluctuations may result in
such events).
Problem:
Consider a very fast ocuurance of HOTPLUG->UNPLUG->HOTPLUG
(fast enough that it does not give the wq to get a chance to run)
If the wq can be reordered, it is a problem if the worker function
is invoked as HOTPLUG->HOTPLUG->UNPLUG.
Why:
In the above example, the final result should have been a device
added, but if it is reordered like above, thre shall be no device
added. The second HOTPLUG event shall be treated as a stray one
since a device is already present there (""Cannot add device at..")
Thus we need to have ordered work queues.
The primary reasons to switch to using unordered workqueues as far
as I could understand from the logs were (1) avoid using the system
workqueue, and (2) let the button events be handled asynchronously.
Do you think a ordered workqueue not work for any of the reasons above?
Thanks,
Rajat
(PS: In short, I think the ordered workqueues are definitely needed for pciehp, specially with the inclusion of link-state hotplug. I think it will also help the shpchp - but I'm still trying to understand if there are any uncovered scenarios).
> So I'll drop this for now, pending these updates.
>
> Bjorn
>
> > ---
> > drivers/pci/hotplug/pciehp_hpc.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/pci/hotplug/pciehp_hpc.c
> > b/drivers/pci/hotplug/pciehp_hpc.c
> > index 42914e0..c4eedab 100644
> > --- a/drivers/pci/hotplug/pciehp_hpc.c
> > +++ b/drivers/pci/hotplug/pciehp_hpc.c
> > @@ -681,7 +681,7 @@ static int pcie_init_slot(struct controller *ctrl)
> > if (!slot)
> > return -ENOMEM;
> >
> > - slot->wq = alloc_workqueue("pciehp-%u", 0, 0, PSN(ctrl));
> > + slot->wq = alloc_ordered_workqueue("pciehp-%u", 0, PSN(ctrl));
> > if (!slot->wq)
> > goto abort;
> >
> > --
> > 1.8.3.2
> >
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in the
> body of a message to majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2014-11-04 8:10 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-01 22:47 [PATCH] PCI: pciehp: Use ordered workqueue for HPC events Sandeep Mann
2014-08-04 20:22 ` Rajat Jain
2014-08-12 22:00 ` Bjorn Helgaas
2014-08-12 22:30 ` Sandeep S Mann
2014-08-12 23:31 ` Rajat Jain
2014-08-13 0:09 ` Sandeep S Mann
2014-08-13 0:33 ` Rajat Jain
2014-08-13 17:00 ` Sandeep S Mann
2014-09-04 21:10 ` Bjorn Helgaas
2014-11-04 8:10 ` Rajat Jain [this message]
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=9d8b44697a4e42a5a69012a5f3be1b26@DM2PR05MB975.namprd05.prod.outlook.com \
--to=rajatjain@juniper.net \
--cc=bhelgaas@google.com \
--cc=groeck@juniper.net \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=linux-pci@vger.kernel.org \
--cc=rajatxjain@gmail.com \
--cc=sandeep@purestorage.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).