Dell PowerEdge 1750 and mpt
David Sze
dsze at alumni.uwaterloo.ca
Thu Oct 16 06:18:26 PDT 2003
At 11:31 PM 15/10/2003 -0600, Kenneth D. Merry wrote this to All:
>On Wed, Oct 15, 2003 at 21:41:30 -0400, David Sze wrote:
> > Notice how this snippet of code never directly sends
> XPT_GET_TRAN_SETTINGS,
> > so the source of the junk pointer/CCB cannot be me.
>
>libcam sends the XPT_GET_TRAN_SETTINGS CCB, to fill in sync rate/bus width
>fields in the cam_device structure.
Right, I see where that is in libcam. So if I just want the serial, then I
should just open the appropriate /dev/passX and send a XPT_GDEV_TYPE, and
that shouldn't tickle the panic with mpt(4).
> > Removing all traces of this serial # gathering code from our application
> > has gotten rid of the panics.
>
>Since it works on other drivers and fails with the mpt(4) driver, it may
>be a problem with the mpt(4) driver.
Or possibly with the hardware/firmware revision of the 53c1030 in the Dell
1750. I have three IBM eServer 345 boxes that also use mpt(4), and so far
they aren't showing the panic problem when running the same code.
> > int main() {
> > struct cam_device device;
> > char kpcSerials[sizeof(device.serial_num)*DEVICE_MAX+1];
> > unsigned int unLen = 0;
> >
> > for (int n = 0; n < DEVICE_MAX; ++n) {
> > if (NULL == ::cam_open_spec_device("pass", n, O_RDWR, &device))
> > break;
>
>You'd probably be better off going back to your original code that uses an
>XPT_DEV_MATCH CCB.
>
>With the above code, you'll run into problems if you've got sparse unit
>numbers. e.g. if you've got a device hardwired, or if you rescan a bus or
>device and it goes away. (e.g. you've got pass0, pass1, pass2, and pass4)
Not to mention that a ::cam_open_spec_device() followed by a
::cam_close_spec_device() seems to result in a descriptor leak. I wrapped
the previous code in a while(1){}, and /dev/xpt0 wasn't being closed.
More information about the freebsd-scsi
mailing list