From nobody Thu Oct 14 10:50:51 2021 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id BCF6117F9EA6; Thu, 14 Oct 2021 10:50:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HVR5R51zvz3skN; Thu, 14 Oct 2021 10:50:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8CE2412026; Thu, 14 Oct 2021 10:50:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 19EAopOu015120; Thu, 14 Oct 2021 10:50:51 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 19EAop7E015119; Thu, 14 Oct 2021 10:50:51 GMT (envelope-from git) Date: Thu, 14 Oct 2021 10:50:51 GMT Message-Id: <202110141050.19EAop7E015119@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Alexander Motin Subject: git: bcc00cabdbb9 - stable/13 - mps/mpr(4): Move xpt_register_async() out of lock. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mav X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: bcc00cabdbb9e8255e347f4824838d0303afdd54 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by mav: URL: https://cgit.FreeBSD.org/src/commit/?id=bcc00cabdbb9e8255e347f4824838d0303afdd54 commit bcc00cabdbb9e8255e347f4824838d0303afdd54 Author: Alexander Motin AuthorDate: 2021-09-14 21:37:02 +0000 Commit: Alexander Motin CommitDate: 2021-10-14 10:50:12 +0000 mps/mpr(4): Move xpt_register_async() out of lock. It fixes lock ordere reversal between SIM and device locks. Also remove registration for AC_FOUND_DEVICE, unused for a while now. MFC after: 1 month (cherry picked from commit 02d8194012a9a0e367a92c7f89567b808bf0e9a8) --- sys/dev/mpr/mpr_sas.c | 21 +++++++++++---------- sys/dev/mps/mps_sas.c | 18 ++++++++++-------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/sys/dev/mpr/mpr_sas.c b/sys/dev/mpr/mpr_sas.c index 043d24e82f44..09fa6ac4bc92 100644 --- a/sys/dev/mpr/mpr_sas.c +++ b/sys/dev/mpr/mpr_sas.c @@ -821,6 +821,8 @@ mpr_attach_sas(struct mpr_softc *sc) callout_init(&sassc->discovery_callout, 1 /*mpsafe*/); + mpr_unlock(sc); + /* * Register for async events so we can determine the EEDP * capabilities of devices. @@ -835,7 +837,7 @@ mpr_attach_sas(struct mpr_softc *sc) } else { int event; - event = AC_ADVINFO_CHANGED | AC_FOUND_DEVICE; + event = AC_ADVINFO_CHANGED; status = xpt_register_async(event, mprsas_async, sc, sassc->path); @@ -855,8 +857,6 @@ mpr_attach_sas(struct mpr_softc *sc) mpr_printf(sc, "EEDP capabilities disabled.\n"); } - mpr_unlock(sc); - mprsas_register_events(sc); out: if (error) @@ -890,12 +890,6 @@ mpr_detach_sas(struct mpr_softc *sc) if (sassc->ev_tq != NULL) taskqueue_free(sassc->ev_tq); - /* Make sure CAM doesn't wedge if we had to bail out early. */ - mpr_lock(sc); - - while (sassc->startup_refcount != 0) - mprsas_startup_decrement(sassc); - /* Deregister our async handler */ if (sassc->path != NULL) { xpt_register_async(0, mprsas_async, sc, sassc->path); @@ -903,6 +897,12 @@ mpr_detach_sas(struct mpr_softc *sc) sassc->path = NULL; } + /* Make sure CAM doesn't wedge if we had to bail out early. */ + mpr_lock(sc); + + while (sassc->startup_refcount != 0) + mprsas_startup_decrement(sassc); + if (sassc->flags & MPRSAS_IN_STARTUP) xpt_release_simq(sassc->sim, 1); @@ -3326,6 +3326,7 @@ mprsas_async(void *callback_arg, uint32_t code, struct cam_path *path, sc = (struct mpr_softc *)callback_arg; + mpr_lock(sc); switch (code) { case AC_ADVINFO_CHANGED: { struct mprsas_target *target; @@ -3412,10 +3413,10 @@ mprsas_async(void *callback_arg, uint32_t code, struct cam_path *path, } break; } - case AC_FOUND_DEVICE: default: break; } + mpr_unlock(sc); } /* diff --git a/sys/dev/mps/mps_sas.c b/sys/dev/mps/mps_sas.c index 3124384b6cbb..136e3586ef20 100644 --- a/sys/dev/mps/mps_sas.c +++ b/sys/dev/mps/mps_sas.c @@ -779,6 +779,8 @@ mps_attach_sas(struct mps_softc *sc) callout_init(&sassc->discovery_callout, 1 /*mpsafe*/); + mps_unlock(sc); + /* * Register for async events so we can determine the EEDP * capabilities of devices. @@ -812,8 +814,6 @@ mps_attach_sas(struct mps_softc *sc) mps_printf(sc, "EEDP capabilities disabled.\n"); } - mps_unlock(sc); - mpssas_register_events(sc); out: if (error) @@ -847,12 +847,6 @@ mps_detach_sas(struct mps_softc *sc) if (sassc->ev_tq != NULL) taskqueue_free(sassc->ev_tq); - /* Make sure CAM doesn't wedge if we had to bail out early. */ - mps_lock(sc); - - while (sassc->startup_refcount != 0) - mpssas_startup_decrement(sassc); - /* Deregister our async handler */ if (sassc->path != NULL) { xpt_register_async(0, mpssas_async, sc, sassc->path); @@ -860,6 +854,12 @@ mps_detach_sas(struct mps_softc *sc) sassc->path = NULL; } + /* Make sure CAM doesn't wedge if we had to bail out early. */ + mps_lock(sc); + + while (sassc->startup_refcount != 0) + mpssas_startup_decrement(sassc); + if (sassc->flags & MPSSAS_IN_STARTUP) xpt_release_simq(sassc->sim, 1); @@ -3150,6 +3150,7 @@ mpssas_async(void *callback_arg, uint32_t code, struct cam_path *path, sc = (struct mps_softc *)callback_arg; + mps_lock(sc); switch (code) { case AC_ADVINFO_CHANGED: { struct mpssas_target *target; @@ -3240,6 +3241,7 @@ mpssas_async(void *callback_arg, uint32_t code, struct cam_path *path, default: break; } + mps_unlock(sc); } /*