[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20131009191652.GA18611@kroah.com>
Date: Wed, 9 Oct 2013 12:16:52 -0700
From: "gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>
To: Yoder Stuart-B08248 <B08248@...escale.com>
Cc: Wood Scott-B07421 <B07421@...escale.com>,
Kim Phillips <kim.phillips@...aro.org>,
Christoffer Dall <christoffer.dall@...aro.org>,
Alex Williamson <alex.williamson@...hat.com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"a.motakis@...tualopensystems.com" <a.motakis@...tualopensystems.com>,
"agraf@...e.de" <agraf@...e.de>,
Sethi Varun-B16395 <B16395@...escale.com>,
Bhushan Bharat-R65777 <R65777@...escale.com>,
"peter.maydell@...aro.org" <peter.maydell@...aro.org>,
"santosh.shukla@...aro.org" <santosh.shukla@...aro.org>,
"kvm@...r.kernel.org" <kvm@...r.kernel.org>
Subject: Re: RFC: (re-)binding the VFIO platform driver to a platform device
On Wed, Oct 09, 2013 at 07:02:25PM +0000, Yoder Stuart-B08248 wrote:
> Have been thinking about this issue some more. As Scott mentioned,
> 'wildcard' matching for a driver can be fairly done in the platform
> bus driver. We could add a new flag to the platform driver struct:
>
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index 4f8bef3..4d6cf14 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -727,6 +727,10 @@ static int platform_match(struct device *dev, struct device_driver *drv)
> struct platform_device *pdev = to_platform_device(dev);
> struct platform_driver *pdrv = to_platform_driver(drv);
>
> + /* the driver matches any device */
> + if (pdrv->match_any)
> + return 1;
> +
> /* Attempt an OF style match first */
> if (of_driver_match_device(dev, drv))
> return 1;
>
> However, the more problematic issue is that a bus driver has no way to
> differentiate from an explicit bind request via sysfs and a bind that
> happened through bus probing.
That was by design, nice to see I implemented it properly :)
> I think something like the new flag in the snippet below would enable the platform
> bus to support platform drivers that only bind on explicit request:
>
> diff --git a/drivers/base/bus.c b/drivers/base/bus.c
> index 4c289ab..daf6d24 100644
> --- a/drivers/base/bus.c
> +++ b/drivers/base/bus.c
> @@ -201,7 +201,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf,
> int err = -ENODEV;
>
> dev = bus_find_device_by_name(bus, NULL, buf);
> - if (dev && dev->driver == NULL && driver_match_device(drv, dev)) {
> + if (dev && dev->driver == NULL && driver_match_device(drv, dev, 1)) {
Magic flags are the spawn of your favorite anti-$DIETY. I'm never going
to accept that, sorry.
If you really want to do something "special" for the platform bus, then
do it only for the platform bus. But even then, you'll find me arguing
that you really don't want to do it at all, sorry.
I'm still yet to be convinced this is even an issue at all, but maybe
that's just the jetlag talking...
greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists