svn commit: r314624 - in head/sys/cam: . scsi [Prevented PowerMac G5 so-called "Quad Core" boot completion]
Mark Millard
markmi at dsl-only.net
Mon Mar 6 22:26:09 UTC 2017
Just for the record:
scsi_pass.c -r314624 is the problem file vintage of the two files:
scsi_pass.c -r314624 (new) and cam_xpt.c -r314283 (old): fails.
cam_xpt.c -r314624 (new) and scsi_pass.c -r308451 (old) : works fine so far.
Prior results:
cam_xpt.c and scsi_pass.c both being -r314624 (both new): fails
cam_xpt.c -r314283 and scsi_pass.c -r308451 (both old): works fine.
So that gives a clue for where cleanup might be needed in order
to allow -r314624 use (both files).
===
Mark Millard
markmi at dsl-only.net
On 2017-Mar-6, at 2:35 AM, Mark Millard <markmi at dsl-only.net> wrote:
> [I should have CC'd svn-src-head in the first place.]
>
> On 2017-Mar-6, at 2:05 AM, Mark Millard <markmi at dsl-only.net> wrote:
>
>> On 2017-Mar-6, at 1:37 AM, Mark Millard <markmi at dsl-only.net> wrote:
>>
>>> When I tried to jump from head -r314479 to -r314687 the -r314687 kernel
>>> the result failed by always(?) getting:
>>>
>>> CAM status: Command timeout
>>>
>>> for:
>>>
>>> ATAPI_IDENTIFY
>>> INQUIRY
>>> DSM TRIM
>>> READ_DMA48
>>> SETFEATURES ENABLE RCACHE
>>> WRITE_DMA48
>>> etc.
>>>
>>> at:
>>>
>>> ada0:ata2:0:0:0
>>> aprobe0:ata0:0:0:0
>>>
>>> Booting with the older -r314479 works fine (same -r314687 world).
>>>
>>> [FYI: It is a ufs context.]
>>>
>>>
>>> The only thing that looks likely to me for
>>> the change in behavior is. . .
>>>
>>> Author: markj
>>> Date: Fri Mar 3 20:51:57 2017
>>> New Revision: 314624
>>> URL:
>>> https://svnweb.freebsd.org/changeset/base/314624
>>>
>>>
>>> Log:
>>> Reject userland CCBs that have CAM_UNLOCKED set.
>>>
>>> CAM_UNLOCKED is internal flag and cannot correctly be set by userland.
>>> Return EINVAL from CAMIOCOMMAND and CAMIOQUEUE if it is set.
>>>
>>> Also fix leaks in some of the error paths for CAMIOQUEUE.
>>>
>>> PR: 215356
>>> Reviewed by: ken, mav
>>> MFC after: 1 week
>>> Differential Revision:
>>> https://reviews.freebsd.org/D9869
>>>
>>>
>>> Modified:
>>> head/sys/cam/cam_xpt.c
>>> head/sys/cam/scsi/scsi_pass.c
>>>
>>>
>>>
>>> [This may just mean that it exposes other problems.]
>>
>> Yep: reverting the two files allowed the PowerMac G5 so-called
>> "Quad Core" to boot fully and I could log in.
>>
>> It appears that if such powerpc64 machines are to stay bootable
>> then other things need to be cleaned up before the two updated
>> files from -r314624 should be used.
>>
>> Should the 2 files be reverted until other things are cleaned up?
>
> An interesting note is where CAM_UNLOCKED occurs (this is from
> after reverting the 2 files relative to the -r314687 that I
> started with):
>
> # grep -r CAM_UNLOCKED /usr/src/* | more
> /usr/src/sys/cam/cam_periph.c: KASSERT((ccb->ccb_h.flags & CAM_UNLOCKED) == 0,
> /usr/src/sys/cam/scsi/scsi_da.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_da.c: ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_da.c: ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_da.c: ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_xpt.c: work_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_xpt.c: request_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_xpt.c: request_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/scsi/scsi_xpt.c: request_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/nvme/nvme_da.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/nvme/nvme_da.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/cam_ccb.h: CAM_UNLOCKED = 0x80000000 /* Call callback without lock. */
> /usr/src/sys/cam/ata/ata_da.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ata/ata_da.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ata/ata_xpt.c: work_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ata/ata_xpt.c: request_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ctl/scsi_ctl.c: new_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ctl/scsi_ctl.c: new_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ctl/scsi_ctl.c: start_ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/ctl/scsi_ctl.c: KASSERT((done_ccb->ccb_h.flags & CAM_UNLOCKED) != 0,
> /usr/src/sys/cam/ctl/scsi_ctl.c: ("CCB in ctlfedone() without CAM_UNLOCKED flag"));
> /usr/src/sys/cam/ctl/scsi_ctl.c: csio->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/cam_xpt.c: ccb->ccb_h.flags |= CAM_UNLOCKED;
> /usr/src/sys/cam/cam_xpt.c: if ((ccb_h->flags & CAM_UNLOCKED) == 0) {
>
>
> ===
> Mark Millard
> markmi at dsl-only.net
More information about the svn-src-head
mailing list