Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Mar 2017 02:35:41 -0800
From:      Mark Millard <markmi@dsl-only.net>
To:        svn-src-head@freebsd.org
Cc:        markj@FreeBSD.org, FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>, Justin Hibbits <chmeeedalf@gmail.com>
Subject:   Re: svn commit: r314624 - in head/sys/cam: . scsi [Prevented PowerMac G5 so-called "Quad Core" boot completion]
Message-ID:  <00787DC4-F3AF-4378-BF55-05581DCB88E8@dsl-only.net>

next in thread | raw e-mail | index | archive | help
[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:
>=20
>> When I tried to jump from head -r314479 to -r314687 the -r314687 =
kernel
>> the result failed by always(?) getting:
>>=20
>> CAM status: Command timeout
>>=20
>> for:
>>=20
>> ATAPI_IDENTIFY
>> INQUIRY
>> DSM TRIM
>> READ_DMA48
>> SETFEATURES ENABLE RCACHE
>> WRITE_DMA48
>> etc.
>>=20
>> at:
>>=20
>> ada0:ata2:0:0:0
>> aprobe0:ata0:0:0:0
>>=20
>> Booting with the older -r314479 works fine (same -r314687 world).
>>=20
>> [FYI: It is a ufs context.]
>>=20
>>=20
>> The only thing that looks likely to me for
>> the change in behavior is. . .
>>=20
>> Author: markj
>> Date: Fri Mar  3 20:51:57 2017
>> New Revision: 314624
>> URL:=20
>> https://svnweb.freebsd.org/changeset/base/314624
>>=20
>>=20
>> Log:
>> Reject userland CCBs that have CAM_UNLOCKED set.
>>=20
>> CAM_UNLOCKED is internal flag and cannot correctly be set by =
userland.
>> Return EINVAL from CAMIOCOMMAND and CAMIOQUEUE if it is set.
>>=20
>> Also fix leaks in some of the error paths for CAMIOQUEUE.
>>=20
>> PR:		215356
>> Reviewed by:	ken, mav
>> MFC after:	1 week
>> Differential Revision:=09
>> https://reviews.freebsd.org/D9869
>>=20
>>=20
>> Modified:
>> head/sys/cam/cam_xpt.c
>> head/sys/cam/scsi/scsi_pass.c
>>=20
>>=20
>>=20
>> [This may just mean that it exposes other problems.]
>=20
> Yep: reverting the two files allowed the PowerMac G5 so-called
> "Quad Core" to boot fully and I could log in.
>=20
> 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.
>=20
> 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) =3D=3D 0,
/usr/src/sys/cam/scsi/scsi_da.c:                start_ccb->ccb_h.flags =
|=3D CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_da.c:        ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_da.c:        ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_da.c:        ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_xpt.c:                       =
work_ccb->ccb_h.flags |=3D CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_xpt.c:                       =
request_ccb->ccb_h.flags |=3D CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_xpt.c:                       =
request_ccb->ccb_h.flags |=3D CAM_UNLOCKED;
/usr/src/sys/cam/scsi/scsi_xpt.c:               request_ccb->ccb_h.flags =
|=3D CAM_UNLOCKED;
/usr/src/sys/cam/nvme/nvme_da.c:                        =
start_ccb->ccb_h.flags |=3D CAM_UNLOCKED;
/usr/src/sys/cam/nvme/nvme_da.c:                start_ccb->ccb_h.flags =
|=3D CAM_UNLOCKED;
/usr/src/sys/cam/cam_ccb.h:     CAM_UNLOCKED            =3D 0x80000000 =
/* Call callback without lock.   */
/usr/src/sys/cam/ata/ata_da.c:                  start_ccb->ccb_h.flags =
|=3D CAM_UNLOCKED;
/usr/src/sys/cam/ata/ata_da.c:          start_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ata/ata_xpt.c:         work_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ata/ata_xpt.c:         request_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ctl/scsi_ctl.c:                new_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ctl/scsi_ctl.c:                new_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ctl/scsi_ctl.c:        start_ccb->ccb_h.flags |=3D =
CAM_UNLOCKED;
/usr/src/sys/cam/ctl/scsi_ctl.c:        KASSERT((done_ccb->ccb_h.flags & =
CAM_UNLOCKED) !=3D 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 |=3D CAM_UNLOCKED;
/usr/src/sys/cam/cam_xpt.c:     ccb->ccb_h.flags |=3D CAM_UNLOCKED;
/usr/src/sys/cam/cam_xpt.c:     if ((ccb_h->flags & CAM_UNLOCKED) =3D=3D =
0) {


=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00787DC4-F3AF-4378-BF55-05581DCB88E8>