Hello Johannes,
> -----Original Message-----
> From: Johannes Thumshirn [mailto:[email protected]]
> Sent: Wednesday, December 2, 2015 2:14 AM
> To: Raghava Aditya Renukunta; [email protected]; linux-
> [email protected]
> Cc: Mahesh Rajashekhara; Murthy Bhat; Santosh Akula; Gana Sridaran;
> [email protected]; Rich Bono
> Subject: Re: [PATCH 09/10] aacraid: Fix character device re-initialization
>
> Hi Raghava,
>
> On Tue, 2015-12-01 at 04:39 -0800, Raghava Aditya Renukunta wrote:
> > From: Raghava Aditya Renukunta <[email protected]>
> >
> > During EEH PCI hotplug activity kernel unloads and loads the driver,
> > causing character device to be unregistered(aac_remove_one).When the
> > driver is loaded back using aac_probe_one the character device needs
> > to be registered again for the AIF management tools to work.
> >
> > Fixed by adding code to register character device in aac_probe_one if
> > it is unregistered in aac_remove_one.
> >
> > Signed-off-by: Raghava Aditya Renukunta
> > <[email protected]>
> > ---
> > drivers/scsi/aacraid/linit.c | 19 +++++++++++++------
> > 1 file changed, 13 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/scsi/aacraid/linit.c
> > b/drivers/scsi/aacraid/linit.c index 2094842..7142578 100644
> > --- a/drivers/scsi/aacraid/linit.c
> > +++ b/drivers/scsi/aacraid/linit.c
> > @@ -1123,6 +1123,13 @@ static void __aac_shutdown(struct aac_dev *
> aac)
> > else if (aac->max_msix > 1)
> > pci_disable_msix(aac->pdev);
> > }
> > +static void aac_init_char(void)
> > +{
> > + aac_cfg_major = register_chrdev(0, "aac", &aac_cfg_fops);
> > + if (aac_cfg_major < 0) {
> > + pr_err("aacraid: unable to register \"aac\" device.\n");
> > + }
> > +}
> >
> > static int aac_probe_one(struct pci_dev *pdev, const struct
> > pci_device_id
> > *id)
> > {
> > @@ -1185,6 +1192,9 @@ static int aac_probe_one(struct pci_dev *pdev,
> > const struct pci_device_id *id)
> > shost->max_cmd_len = 16;
> > shost->use_cmd_list = 1;
> >
> > + if (aac_cfg_major == -2)
> > + aac_init_char();
> > +
> > aac = (struct aac_dev *)shost->hostdata;
> > aac->base_start = pci_resource_start(pdev, 0);
> > aac->scsi_host_ptr = shost;
> > @@ -1536,7 +1546,7 @@ static void aac_remove_one(struct pci_dev
> *pdev)
> > pci_disable_device(pdev);
> > if (list_empty(&aac_devices)) {
> > unregister_chrdev(aac_cfg_major, "aac");
> > - aac_cfg_major = -1;
> > + aac_cfg_major = -2;
>
> Please add something like
> #define AAC_CHARDEV_UNREGISTERED -1
> #define AAC_CHARDEV_NEEDS_REINIT -2
>
> so it's obvious what you're doing.
Thank you for pointing that out, I will make
the necessary changes in the next iteration.
>
> > }
> > }
> >
> > @@ -1697,11 +1707,8 @@ static int __init aac_init(void)
> > if (error < 0)
> > return error;
> >
> > - aac_cfg_major = register_chrdev( 0, "aac", &aac_cfg_fops);
> > - if (aac_cfg_major < 0) {
> > - printk(KERN_WARNING
> > - "aacraid: unable to register \"aac\" device.\n");
> > - }
> > + aac_init_char();
> > +
> >
> > return 0;
> > }
Regards,
Raghava Aditya
N�����r��y����b�X��ǧv�^�){.n�+����{���"�{ay�ʇڙ�,j��f���h���z��w���
���j:+v���w�j�m��������zZ+�����ݢj"��!�i