Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Oct 2003 21:41:30 -0400
From:      David Sze <dsze@alumni.uwaterloo.ca>
To:        Nate Lawson <nate@root.org>
Cc:        freebsd-scsi@freebsd.org
Subject:   Re: Dell PowerEdge 1750 and mpt
Message-ID:  <6.0.0.22.2.20031015212813.039fcd48@mail.distrust.net>
In-Reply-To: <20031015133813.O35236@root.org>
References:  <6.0.0.22.2.20031014232154.03a0b990@mail.distrust.net> <6.0.0.22.2.20031015080310.03ac9b88@mail.distrust.net> <20031015100215.U34498@root.org> <20031015180131.GA25402@pooh.distrust.net> <20031015133813.O35236@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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.

Removing all traces of this serial # gathering code from our application 
has gotten rid of the panics.


#include <stdio.h>
#include <camlib.h>
#include <fcntl.h>
#include <string.h>

#define DEVICE_MAX 16

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;

         ::bcopy(device.serial_num, kpcSerials + unLen,
             device.serial_num_len);
         unLen += device.serial_num_len;

         ::cam_close_spec_device(&device);
     }

     kpcSerials[unLen] = '\0';
     ::printf("%s\n", kpcSerials);
     return 0;
}






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6.0.0.22.2.20031015212813.039fcd48>