git: e1891351cf10 - stable/13 - mmc_sim: Make XPT_MMC_GET_TRAN_SETTINGS fully async

Emmanuel Vadot manu at FreeBSD.org
Thu Jul 22 17:27:02 UTC 2021


The branch stable/13 has been updated by manu:

URL: https://cgit.FreeBSD.org/src/commit/?id=e1891351cf10232871f95569156400d376fe8422

commit e1891351cf10232871f95569156400d376fe8422
Author:     Emmanuel Vadot <manu at FreeBSD.org>
AuthorDate: 2021-06-17 18:09:52 +0000
Commit:     Emmanuel Vadot <manu at FreeBSD.org>
CommitDate: 2021-07-22 17:26:47 +0000

    mmc_sim: Make XPT_MMC_GET_TRAN_SETTINGS fully async
    
    Sponsored by:   Diablotin Systems
    
    (cherry picked from commit 3386347f65cdcd7c36feec216af05f188f82cf2c)
---
 sys/cam/mmc/mmc_sim.c | 34 ++++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/sys/cam/mmc/mmc_sim.c b/sys/cam/mmc/mmc_sim.c
index 6fe38f26d339..022a1569cc59 100644
--- a/sys/cam/mmc/mmc_sim.c
+++ b/sys/cam/mmc/mmc_sim.c
@@ -63,11 +63,25 @@ mmc_sim_task(void *arg, int pending)
 		return;
 
 	cts = &mmc_sim->ccb->cts;
-	rv = MMC_SIM_SET_TRAN_SETTINGS(mmc_sim->dev, &cts->proto_specific.mmc);
-	if (rv != 0)
-		mmc_sim->ccb->ccb_h.status = CAM_REQ_INVALID;
-	else
-		mmc_sim->ccb->ccb_h.status = CAM_REQ_CMP;
+	switch (mmc_sim->ccb->ccb_h.func_code) {
+	case XPT_MMC_GET_TRAN_SETTINGS:
+		rv = MMC_SIM_GET_TRAN_SETTINGS(mmc_sim->dev, &cts->proto_specific.mmc);
+		if (rv != 0)
+			mmc_sim->ccb->ccb_h.status = CAM_REQ_INVALID;
+		else
+			mmc_sim->ccb->ccb_h.status = CAM_REQ_CMP;
+		break;
+	case XPT_MMC_SET_TRAN_SETTINGS:
+		rv = MMC_SIM_SET_TRAN_SETTINGS(mmc_sim->dev, &cts->proto_specific.mmc);
+		if (rv != 0)
+			mmc_sim->ccb->ccb_h.status = CAM_REQ_INVALID;
+		else
+			mmc_sim->ccb->ccb_h.status = CAM_REQ_CMP;
+		break;
+	default:
+		panic("Unsupported ccb func %x\n", mmc_sim->ccb->ccb_h.func_code);
+		break;
+	}
 
 	xpt_done(mmc_sim->ccb);
 	mmc_sim->ccb = NULL;
@@ -108,7 +122,6 @@ mmc_cam_sim_default_action(struct cam_sim *sim, union ccb *ccb)
 		}
 		break;
 	case XPT_GET_TRAN_SETTINGS:
-	case XPT_MMC_GET_TRAN_SETTINGS:
 	{
 		struct ccb_trans_settings *cts = &ccb->cts;
 
@@ -125,6 +138,15 @@ mmc_cam_sim_default_action(struct cam_sim *sim, union ccb *ccb)
 		}
 		break;
 	}
+	case XPT_MMC_GET_TRAN_SETTINGS:
+	{
+		ccb->ccb_h.status = CAM_SIM_QUEUED;
+		mmc_sim->ccb = ccb;
+		taskqueue_enqueue(taskqueue_thread, &mmc_sim->sim_task);
+		return;
+		/* NOTREACHED */
+		break;
+	}
 	case XPT_SET_TRAN_SETTINGS:
 	{
 		struct ccb_trans_settings *cts = &ccb->cts;


More information about the dev-commits-src-all mailing list