Date: Mon, 7 Nov 2016 01:25:29 -0700 From: Scott Long <scottl@samsco.org> To: Michael Tuexen <tuexen@FreeBSD.org> Cc: Sean Bruno <sbruno@freebsd.org>, freebsd-scsi <freebsd-scsi@freebsd.org> Subject: Re: mpt driver issue? Message-ID: <1E584A39-B268-4253-A588-7A5CA5D46C97@samsco.org> In-Reply-To: <1909C322-A218-4463-9A86-8E859B4715E6@freebsd.org> References: <CA9B9B19-5311-4A4E-87ED-8771C1000BEC@freebsd.org> <4398FA07-AABF-441E-A412-42BABCD59444@freebsd.org> <e9698b93-11e6-530a-1d27-ef45706eae66@freebsd.org> <CA6234F2-C0BF-472E-B904-FFBAE0ED29F9@freebsd.org> <D7516284-A279-469F-9FE3-A0E6A88791C3@samsco.org> <1909C322-A218-4463-9A86-8E859B4715E6@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> On Nov 7, 2016, at 1:21 AM, Michael Tuexen <tuexen@FreeBSD.org> wrote: >=20 >> On 6 Nov 2016, at 23:46, Scott Long <scottl@samsco.org> wrote: >>=20 >>=20 >>> On Nov 6, 2016, at 1:57 PM, Michael Tuexen <tuexen@FreeBSD.org> = wrote: >>>=20 >>>> On 6 Nov 2016, at 20:41, Sean Bruno <sbruno@freebsd.org> wrote: >>>>=20 >>>>=20 >>>>=20 >>>> On 11/06/16 10:54, Michael Tuexen wrote: >>>>> Dear all, >>>>>=20 >>>>> it was suggested on current@ to forward this to freebsd-scsi@ >>>>>=20 >>>>> The problem shows up since r308268 and it looks like an issue >>>>> in the mpt driver... >>>>>=20 >>>>> Best regards >>>>> Michael >>>>=20 >>>> I don't see any *obvious* reason that we should hold the mpt lock = here. >>>> It looks ok to just drop it. >>> I tried that and the system (with WITNESS) panic'ed... >>> Can't write a core (not a surprise). >>=20 >> Any info on where the panic was? > After learning how to add a serial console to a VM und Fusion: >=20 >>=20 Thanks. I have a fix, but I seem to not be able to access the svn = server over ssh right now so I can=E2=80=99t commit it. Here=E2=80=99s = the patch: --- mpt.c (revision 308358) +++ mpt.c (working copy) @@ -2695,7 +2695,11 @@ */ mpt->max_cam_seg_cnt =3D min(mpt->max_seg_cnt, (MAXPHYS / = PAGE_SIZE) + 1); =20 + /* XXX Lame Locking! */ + MPT_UNLOCK(mpt); error =3D mpt_dma_buf_alloc(mpt); + MPT_LOCK(mpt); + if (error !=3D 0) { mpt_prt(mpt, "mpt_dma_buf_alloc() failed!\n"); return (EIO); @@ -2745,6 +2749,7 @@ * retrieved, we are responsible for re-downloading * the firmware after any hard-reset. */ + MPT_UNLOCK(mpt); mpt->fw_image_size =3D mpt->ioc_facts.FWImageSize; error =3D mpt_dma_tag_create(mpt, mpt->parent_dmat, 1, = 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, = NULL, @@ -2752,6 +2757,7 @@ &mpt->fw_dmat); if (error !=3D 0) { mpt_prt(mpt, "cannot create firmware dma = tag\n"); + MPT_LOCK(mpt); return (ENOMEM); } error =3D bus_dmamem_alloc(mpt->fw_dmat, @@ -2760,6 +2766,7 @@ if (error !=3D 0) { mpt_prt(mpt, "cannot allocate firmware = memory\n"); bus_dma_tag_destroy(mpt->fw_dmat); + MPT_LOCK(mpt); return (ENOMEM); } mi.mpt =3D mpt; @@ -2768,6 +2775,7 @@ mpt->fw_image, mpt->fw_image_size, mpt_map_rquest, = &mi, 0); mpt->fw_phys =3D mi.phys; =20 + MPT_LOCK(mpt); error =3D mpt_upload_fw(mpt); if (error !=3D 0) { mpt_prt(mpt, "firmware upload failed.\n");
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1E584A39-B268-4253-A588-7A5CA5D46C97>