Hello Johannes, > -----Original Message----- > From: Johannes Thumshirn [mailto:jthumshirn@xxxxxxx] > Sent: Wednesday, December 2, 2015 2:14 AM > To: Raghava Aditya Renukunta; JBottomley@xxxxxxxxxxxxx; linux- > scsi@xxxxxxxxxxxxxxx > Cc: Mahesh Rajashekhara; Murthy Bhat; Santosh Akula; Gana Sridaran; > aacraid@xxxxxxxxxxxxxx; 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 <raghavaaditya.renukunta@xxxxxxxx> > > > > 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 > > <raghavaaditya.renukunta@xxxxxxxx> > > --- > > 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��������+%������w��{.n�����{������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f