Re: [PATCH] PCI: add function reset callback to pci_driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2013-11-20 at 12:00 -0700, Bjorn Helgaas wrote:
> [+cc Alex]
> 
> On Wed, Nov 20, 2013 at 10:26 AM, Keith Busch <keith.busch@xxxxxxxxx> wrote:
> > A user can issue a pci function level reset to a device using sysfs
> > entry /sys/bus/pci/devices/.../reset. A kernel driver handling the
> > pci device probably would like to know that such a reset has occured,
> > so this patch adds a callback in to pci_driver's pci_error_handler.

Seems reasonable to me, but I'd like to see what useful thing you're
going to do in the driver when this is triggered too.  Thanks,

Alex

> > Signed-off-by: Keith Busch <keith.busch@xxxxxxxxx>
> > ---
> > Assuming this is a good idea, is this the right place to invoke the
> > reset callback, or should it be up the call stack closer to the sysfs
> > reset entry point? Or somewhere else entirely?
> >
> >  drivers/pci/pci.c   |    6 ++++++
> >  include/linux/pci.h |    3 +++
> >  2 files changed, 9 insertions(+)
> >
> > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> > index b127fbda..5ee6fc0 100644
> > --- a/drivers/pci/pci.c
> > +++ b/drivers/pci/pci.c
> > @@ -3435,6 +3435,12 @@ static int __pci_dev_reset(struct pci_dev *dev, int probe)
> >
> >         rc = pci_parent_bus_reset(dev, probe);
> >  done:
> > +       if (rc != -ENOTTY && !probe) {
> > +               struct pci_error_handlers *err_handler =
> > +                               dev->driver ? dev->driver->err_handler : NULL;
> > +               if (err_handler && err_handler->function_reset)
> > +                       err_handler->function_reset(dev);
> > +       }
> >         return rc;
> >  }
> >
> > diff --git a/include/linux/pci.h b/include/linux/pci.h
> > index 835ec7b..d1f100e 100644
> > --- a/include/linux/pci.h
> > +++ b/include/linux/pci.h
> > @@ -605,6 +605,9 @@ struct pci_error_handlers {
> >         /* PCI slot has been reset */
> >         pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
> >
> > +       /* PCI function has been reset */
> > +       pci_ers_result_t (*function_reset)(struct pci_dev *dev);
> > +
> >         /* Device driver may resume normal operations */
> >         void (*resume)(struct pci_dev *dev);
> >  };
> > --
> > 1.7.10.4
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux