On Tue, 2014-09-02 at 17:31 +0200, Federico Vaga wrote:
> There was not any kind of protection against carrier driver removal.
> In this way, device driver can 'get' the carrier driver when it is
> using it.
> 
> Signed-off-by: Federico Vaga <federico.v...@cern.ch>
> ---
>  drivers/ipack/carriers/tpci200.c |    3 ++-
>  drivers/ipack/ipack.c            |    4 +++-
>  include/linux/ipack.h            |   24 +++++++++++++++++++++++-
>  3 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/ipack/carriers/tpci200.c 
> b/drivers/ipack/carriers/tpci200.c
> index de5e321..9b23843 100644
> --- a/drivers/ipack/carriers/tpci200.c
> +++ b/drivers/ipack/carriers/tpci200.c
> @@ -572,7 +572,8 @@ static int tpci200_pci_probe(struct pci_dev *pdev,
>       /* Register the carrier in the industry pack bus driver */
>       tpci200->info->ipack_bus = ipack_bus_register(&pdev->dev,
>                                                     TPCI200_NB_SLOT,
> -                                                   &tpci200_bus_ops);
> +                                                   &tpci200_bus_ops,
> +                                                   THIS_MODULE);
>       if (!tpci200->info->ipack_bus) {
>               dev_err(&pdev->dev,
>                       "error registering the carrier on ipack driver\n");
> diff --git a/drivers/ipack/ipack.c b/drivers/ipack/ipack.c
> index d0016ba..c0e7b62 100644
> --- a/drivers/ipack/ipack.c
> +++ b/drivers/ipack/ipack.c
> @@ -206,7 +206,8 @@ static struct bus_type ipack_bus_type = {
>  };
>  
>  struct ipack_bus_device *ipack_bus_register(struct device *parent, int slots,
> -                                         const struct ipack_bus_ops *ops)
> +                                         const struct ipack_bus_ops *ops,
> +                                         struct module *owner)
>  {
>       int bus_nr;
>       struct ipack_bus_device *bus;
> @@ -225,6 +226,7 @@ struct ipack_bus_device *ipack_bus_register(struct device 
> *parent, int slots,
>       bus->parent = parent;
>       bus->slots = slots;
>       bus->ops = ops;
> +     bus->owner = owner;
>       return bus;
>  }
>  EXPORT_SYMBOL_GPL(ipack_bus_register);
> diff --git a/include/linux/ipack.h b/include/linux/ipack.h
> index 1888e06..8bddc3f 100644
> --- a/include/linux/ipack.h
> +++ b/include/linux/ipack.h
> @@ -172,6 +172,7 @@ struct ipack_bus_ops {
>   *   @ops: bus operations for the mezzanine drivers
>   */
>  struct ipack_bus_device {
> +     struct module *owner;
>       struct device *parent;
>       int slots;
>       int bus_nr;
> @@ -189,7 +190,8 @@ struct ipack_bus_device {
>   * available bus device in ipack.
>   */
>  struct ipack_bus_device *ipack_bus_register(struct device *parent, int slots,
> -                                         const struct ipack_bus_ops *ops);
> +                                         const struct ipack_bus_ops *ops,
> +                                         struct module *owner);
>  
>  /**
>   *   ipack_bus_unregister -- unregister an ipack bus
> @@ -265,3 +267,23 @@ void ipack_put_device(struct ipack_device *dev);
>        .format = (_format), \
>        .vendor = (vend), \
>        .device = (dev)
> +
> +/**
> + * ipack_get_carrier - it increase the carrier ref. counter of
> + *                     the carrier module
> + * @dev: mezzanine device which wants to get the carrier
> + */
> +static inline int ipack_get_carrier(struct ipack_device *dev)
> +{
> +     return try_module_get(dev->bus->owner);
> +}
> +
> +/**
> + * ipack_get_carrier - it decrease the carrier ref. counter of
> + *                     the carrier module
> + * @dev: mezzanine device which wants to get the carrier
> + */
> +static inline void ipack_put_carrier(struct ipack_device *dev)
> +{
> +     module_put(dev->bus->owner);
> +}

Acked-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com>

Sam

Attachment: signature.asc
Description: This is a digitally signed message part

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Industrypack-devel mailing list
Industrypack-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/industrypack-devel

Reply via email to