Dell PowerEdge 1750 and mpt
Kenneth D. Merry
ken at kdm.org
Wed Oct 15 22:31:27 PDT 2003
On Wed, Oct 15, 2003 at 21:41:30 -0400, David Sze wrote:
> At 01:38 PM 15/10/2003 -0700, Nate Lawson wrote this to All:
> >I'm out of time for this thread. Find the diff between your code and
> >camcontrol inquiry -S and you'll find the bug.
>
> Thanks for your help Nate. I don't expect you to respond to this message,
> I'm just replying so that it shows up in the archives for anyone else that
> might have problems with the Dell 1750 and mpt.
>
> For those who are interested, it doesn't appear to be a bug in my code. I
> replaced everything that I copied from camcontrol with what follows below,
> which only uses the functions documented in cam(3). The kernel still
> panic'ed after a few hours, with an identical backtrace to the one posted
> previously.
>
> 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.
> 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.
> 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)
Ken
--
Kenneth Merry
ken at kdm.org
More information about the freebsd-scsi
mailing list