Juergen Keil wrote:
>> Garrett D'Amore wrote:
>>  
>>     
>>> Today I posted some updates for iprb and fdc.  These drivers, available from
>>>
>>>      http://www.opensolaris.org/os/community/device_drivers/files/
>>>
>>> have made it possible for me to use suspend/resume nicely on my Dell 
>>> Precision M390 workstation.  I'm using build 100 of Solaris.  These 
>>> drivers also support quiesce, and I'm able to use reboot -f on this 
>>> platform now, as well.
>>>
>>> Look for files named "iprb-2008-11-01.tar.gz" and 
>>> "fdc-2008-11-01.tar.gz".  The fdc tarball actually includes a nice 
>>> installation script.  I wrote that after I'd already posted iprb, so the 
>>> iprb tarball lacks it.
>>>       
>> There is a problem with the fdc webrev.  I added the fdc.patch to my
>> set of opensolaris sources, compiled and installed.
>>
>> Test-suspend (uadmin 3 22) on an ASUS M2NPV-VM with a PS/2 floppy drive
>> paniced the system on suspend.  System was booted without floppy media
>> in the PS/2 floppy drive, nor was a floppy media inserted into the drive
>> before trying the uadmin 3 22.
>>
>>
>> Apparently it is crashing in fdc.c fdc_select_impl() because fjp->fj_drive
>> is a NULL pointer:
>>
>>              /* make sure drive is not selected in case we change speed */
>>              fcp->c_digout = (fcp->c_digout & ~FD_DRSEL) |
>>                  (~unit & FD_DRSEL);
>>              outb(fcp->c_regbase + FCR_DOR, fcp->c_digout);
>>
>>              (void) fdc_motorsm(fjp, FMI_STARTCMD,
>>                  fjp->fj_drive->fdd_motoron);   <<<<<<<<<<<<<<<<<<<<<<<
>>     
>
>
> Hmm, in fd.c fd_attach(), fj_drive is set to a non NULL pointer and
> the flag FUNIT_DRVATCH is added to fj_flags.
>
> But in fd_detach(), fj_drive is set to NULL, but the FUNIT_DRVATCH remains
> set in fj_flags.  Shouldn't fd_detach() clear the FUNIT_DRVATCH flag in
> fj_flags?
>   

I'm not sure.  Actually, looking at the code more closely, I think the 
problem is that the responsibility for configuring the fj_drive 
structure is misplaced.  I think this should have been done by the fdc 
nexus driver, rather than the fd floppy controller.

    -- Garrett
> --- a/usr/src/uts/common/io/fd.c
> +++ b/usr/src/uts/common/io/fd.c
>
> ...
>
> @@ -586,24 +569,12 @@ fd_detach(dev_info_t *dip, ddi_detach_cm
>                 fjp->fj_drive = NULL;
>                 fjp->fj_chars = NULL;
>                 fjp->fj_attr = NULL;
> +               fjp->fj_flags &= ~FUNIT_DRVATCH;
>                 ddi_prop_remove_all(dip);
>                 mutex_destroy(&fjp->fj_lock);
>                 sema_destroy(&fdp->d_ocsem);
>                 ddi_soft_state_free(fd_state_head, drive_num);
>                 break;
>
> ...
>
>   

_______________________________________________
driver-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/driver-discuss

Reply via email to