lkml.org 
[lkml]   [2013]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 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


    \
     
     \ /
      Last update: 2013-10-09 21:41    [W:3.498 / U:0.676 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site