From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com ([134.134.136.65]:15009 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752830AbcCGRd3 (ORCPT ); Mon, 7 Mar 2016 12:33:29 -0500 Date: Mon, 7 Mar 2016 10:32:55 -0700 From: Ross Zwisler To: Sudip Mukherjee Cc: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, Ross Zwisler , stable@vger.kernel.org Subject: Re: [PATCH v2] parport: register driver later Message-ID: <20160307173255.GA26456@linux.intel.com> References: <1457277010-30593-1-git-send-email-sudipm.mukherjee@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1457277010-30593-1-git-send-email-sudipm.mukherjee@gmail.com> Sender: stable-owner@vger.kernel.org List-ID: On Sun, Mar 06, 2016 at 08:40:10PM +0530, Sudip Mukherjee wrote: > If the parport bus is not yet registered and any device using parallel > port tries to register with the bus we get a stackdump with a message > of Kernel bug. > > Reported-by: Fengguang Wu > Cc: # 4.2+ > Signed-off-by: Sudip Mukherjee > --- > > Hi Ross, > Can you please test this patch in your setup. This is a respin of the > previous patch in another way. Yep, this also solves the issue for me. Tested-by: Ross Zwisler > drivers/parport/share.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/parport/share.c b/drivers/parport/share.c > index 3308427..c1eba80 100644 > --- a/drivers/parport/share.c > +++ b/drivers/parport/share.c > @@ -135,9 +135,18 @@ static struct bus_type parport_bus_type = { > .probe = parport_probe, > }; > > +static bool is_registered; > + > int parport_bus_init(void) > { > - return bus_register(&parport_bus_type); > + int ret; > + > + ret = bus_register(&parport_bus_type); > + if (ret) > + return ret; > + > + is_registered = true; > + return 0; > } > > void parport_bus_exit(void) > @@ -273,6 +282,9 @@ int __parport_register_driver(struct parport_driver *drv, struct module *owner, > /* using device model */ > int ret; > > + if (!is_registered) > + return -EAGAIN; > + > /* initialize common driver fields */ > drv->driver.name = drv->name; > drv->driver.bus = &parport_bus_type; > -- > 1.9.1