linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

      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).