From nobody Fri Jul 14 18:41:03 2023 X-Original-To: dev-commits-src-main@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 4R2gKW5VCNz4mpmr; Fri, 14 Jul 2023 18:41:03 +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 4R2gKW53Mmz4KFG; Fri, 14 Jul 2023 18:41:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1689360063; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=edeBtsotKMMjOI3V9jR3z9VQIjqvRrv1uOeE0CluReI=; b=AQaouKYuDSg6IpMrEF6UoduGJLeu88T68C90+SmxYxSJeR2/Lm1x7lh5M8GNJYVKS7glff stVvjsb5qgN6aShmE9oDdJE/1Xuzp5UXJCI674i/jktOy/ES7gTlAwgn5EWmNa/9iD7kzm CqAO5Flxc13rkWmvtd3AY5c2ZnaudvbPbZyQjIvfKQJe7d6CZX0FUqvzvChSQLZjsXgFva oQ8yXasoQgHX94ezApsd/qEBG9ztsfdXMQb2wFZjjvW0fMjup6jVna86ct9S1gllowPRgo Kp3FjAbX4A73i498Xhmu01ldjGUV5aJrs9QbboP+d4VHzkVrJaKtnQXdR21CIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1689360063; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=edeBtsotKMMjOI3V9jR3z9VQIjqvRrv1uOeE0CluReI=; b=sieF2B38nbcqXdnka6v2dffw+wW7lO1bUMPXamp/ZrgYqTo5UT1vkswN3OGoykn5rsl6Ux kR6RAEX9WJg2Seyrulj4a3rLfEgHvQS0n3cEGA2XMKu8MGuQaH6YaPHdqncGquK0M26yD5 LnnF7jzIp1xfYntId2KE2dMFgIozgSh9EO8jjtT3choXTOyZuaJpxDZ9XJ0v5PQnhX5Ruh pD9x/5Uod7y1svKoNZC5hTYQHUwEKOLniKPSXs6Uoz51dqs7bPchBVihTzZMTDNoSdwTg8 cbtpEd7p6dTNuOJWSo1JeyLtRTXFqI1eAIDhKExdVrVZ3Z5+urGbzxivSQsCmw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1689360063; a=rsa-sha256; cv=none; b=AAMIPBZzFSIW/7SXjh97e3RURWycA+BKiV0YawIOBqC7G1Zr6ZFyaDrVwL0IivResTyM06 nNLvdu9HpcXz7FVUBYDwJRoa/kdIM37li4SHb4FGH+z03j5DWdDfAg+b8jhbghQISNM1qo gp//VL1qG90b/tuLpUJBcpx7dVTknBkKdVxUYzEmWm5gIpB7wsKHmmnCi4vZF+8quPETWE sXWmfvcyB3+9pSh7n/DVa+dGSTGKx77Swg5GR0NGc5RWZ2RxiQmYyvP9O3OXSkdu6T18pW 25GS6JEhQQDkQJsEl/GlovRA1/Smjv3F3oIDhoXPZ9nc23ohvh7dzX3flhuToA== 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 4R2gKW47BnzTNW; Fri, 14 Jul 2023 18:41:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 36EIf3UY019404; Fri, 14 Jul 2023 18:41:03 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 36EIf3f0019403; Fri, 14 Jul 2023 18:41:03 GMT (envelope-from git) Date: Fri, 14 Jul 2023 18:41:03 GMT Message-Id: <202307141841.36EIf3f0019403@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 60381fd1ee86 - main - memdesc: Retire MEMDESC_CCB. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 60381fd1ee8668ea1e4676a6128883d987cab858 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=60381fd1ee8668ea1e4676a6128883d987cab858 commit 60381fd1ee8668ea1e4676a6128883d987cab858 Author: John Baldwin AuthorDate: 2023-07-14 18:30:31 +0000 Commit: John Baldwin CommitDate: 2023-07-14 18:32:16 +0000 memdesc: Retire MEMDESC_CCB. Instead, change memdesc_ccb to examine the CCB and return a memdesc of a more generic type describing the data buffer. Reviewed by: imp, markj Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D40880 --- sys/cam/cam.c | 72 +++++++++++++++++++++++++++ sys/kern/subr_bus_dma.c | 129 ++---------------------------------------------- sys/kern/subr_msan.c | 78 ----------------------------- sys/sys/memdesc.h | 12 +---- 4 files changed, 76 insertions(+), 215 deletions(-) diff --git a/sys/cam/cam.c b/sys/cam/cam.c index ae1286c8bc6a..ce7dc81b3495 100644 --- a/sys/cam/cam.c +++ b/sys/cam/cam.c @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #ifdef _KERNEL #include #include +#include #include #else /* _KERNEL */ #include @@ -571,3 +572,74 @@ cam_calc_geometry(struct ccb_calc_geometry *ccg, int extended) ccg->cylinders = ccg->volume_size / secs_per_cylinder; ccg->ccb_h.status = CAM_REQ_CMP; } + +#ifdef _KERNEL +struct memdesc +memdesc_ccb(union ccb *ccb) +{ + struct ccb_hdr *ccb_h; + void *data_ptr; + uint32_t dxfer_len; + uint16_t sglist_cnt; + + ccb_h = &ccb->ccb_h; + switch (ccb_h->func_code) { + case XPT_SCSI_IO: { + struct ccb_scsiio *csio; + + csio = &ccb->csio; + data_ptr = csio->data_ptr; + dxfer_len = csio->dxfer_len; + sglist_cnt = csio->sglist_cnt; + break; + } + case XPT_CONT_TARGET_IO: { + struct ccb_scsiio *ctio; + + ctio = &ccb->ctio; + data_ptr = ctio->data_ptr; + dxfer_len = ctio->dxfer_len; + sglist_cnt = ctio->sglist_cnt; + break; + } + case XPT_ATA_IO: { + struct ccb_ataio *ataio; + + ataio = &ccb->ataio; + data_ptr = ataio->data_ptr; + dxfer_len = ataio->dxfer_len; + sglist_cnt = 0; + break; + } + case XPT_NVME_IO: + case XPT_NVME_ADMIN: { + struct ccb_nvmeio *nvmeio; + + nvmeio = &ccb->nvmeio; + data_ptr = nvmeio->data_ptr; + dxfer_len = nvmeio->dxfer_len; + sglist_cnt = nvmeio->sglist_cnt; + break; + } + default: + panic("%s: Unsupported func code %d", __func__, + ccb_h->func_code); + } + + switch ((ccb_h->flags & CAM_DATA_MASK)) { + case CAM_DATA_VADDR: + return (memdesc_vaddr(data_ptr, dxfer_len)); + case CAM_DATA_PADDR: + return (memdesc_paddr((vm_paddr_t)(uintptr_t)data_ptr, + dxfer_len)); + case CAM_DATA_SG: + return (memdesc_vlist(data_ptr, sglist_cnt)); + case CAM_DATA_SG_PADDR: + return (memdesc_plist(data_ptr, sglist_cnt)); + case CAM_DATA_BIO: + return (memdesc_bio(data_ptr)); + default: + panic("%s: flags 0x%X unimplemented", __func__, ccb_h->flags); + } +} +#endif diff --git a/sys/kern/subr_bus_dma.c b/sys/kern/subr_bus_dma.c index 65a08aeba17c..bfaad30b37d3 100644 --- a/sys/kern/subr_bus_dma.c +++ b/sys/kern/subr_bus_dma.c @@ -304,94 +304,6 @@ bus_dmamap_load_ma_triv(bus_dma_tag_t dmat, bus_dmamap_t map, return (error); } -/* - * Load a cam control block. - */ -static int -_bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb, - int *nsegs, int flags) -{ - struct ccb_hdr *ccb_h; - void *data_ptr; - int error; - uint32_t dxfer_len; - uint16_t sglist_cnt; - - error = 0; - ccb_h = &ccb->ccb_h; - switch (ccb_h->func_code) { - case XPT_SCSI_IO: { - struct ccb_scsiio *csio; - - csio = &ccb->csio; - data_ptr = csio->data_ptr; - dxfer_len = csio->dxfer_len; - sglist_cnt = csio->sglist_cnt; - break; - } - case XPT_CONT_TARGET_IO: { - struct ccb_scsiio *ctio; - - ctio = &ccb->ctio; - data_ptr = ctio->data_ptr; - dxfer_len = ctio->dxfer_len; - sglist_cnt = ctio->sglist_cnt; - break; - } - case XPT_ATA_IO: { - struct ccb_ataio *ataio; - - ataio = &ccb->ataio; - data_ptr = ataio->data_ptr; - dxfer_len = ataio->dxfer_len; - sglist_cnt = 0; - break; - } - case XPT_NVME_IO: - case XPT_NVME_ADMIN: { - struct ccb_nvmeio *nvmeio; - - nvmeio = &ccb->nvmeio; - data_ptr = nvmeio->data_ptr; - dxfer_len = nvmeio->dxfer_len; - sglist_cnt = nvmeio->sglist_cnt; - break; - } - default: - panic("_bus_dmamap_load_ccb: Unsupported func code %d", - ccb_h->func_code); - } - - switch ((ccb_h->flags & CAM_DATA_MASK)) { - case CAM_DATA_VADDR: - error = _bus_dmamap_load_buffer(dmat, map, data_ptr, dxfer_len, - kernel_pmap, flags, NULL, nsegs); - break; - case CAM_DATA_PADDR: - error = _bus_dmamap_load_phys(dmat, map, - (vm_paddr_t)(uintptr_t)data_ptr, dxfer_len, flags, NULL, - nsegs); - break; - case CAM_DATA_SG: - error = _bus_dmamap_load_vlist(dmat, map, - (bus_dma_segment_t *)data_ptr, sglist_cnt, kernel_pmap, - nsegs, flags, 0, dxfer_len); - break; - case CAM_DATA_SG_PADDR: - error = _bus_dmamap_load_plist(dmat, map, - (bus_dma_segment_t *)data_ptr, sglist_cnt, nsegs, flags); - break; - case CAM_DATA_BIO: - error = _bus_dmamap_load_bio(dmat, map, (struct bio *)data_ptr, - nsegs, flags); - break; - default: - panic("_bus_dmamap_load_ccb: flags 0x%X unimplemented", - ccb_h->flags); - } - return (error); -} - /* * Load a uio. */ @@ -566,49 +478,18 @@ bus_dmamap_load_ccb(bus_dma_tag_t dmat, bus_dmamap_t map, union ccb *ccb, bus_dmamap_callback_t *callback, void *callback_arg, int flags) { - bus_dma_segment_t *segs; struct ccb_hdr *ccb_h; struct memdesc mem; - int error; - int nsegs; - -#ifdef KMSAN - mem = memdesc_ccb(ccb); - _bus_dmamap_load_kmsan(dmat, map, &mem); -#endif ccb_h = &ccb->ccb_h; if ((ccb_h->flags & CAM_DIR_MASK) == CAM_DIR_NONE) { callback(callback_arg, NULL, 0, 0); return (0); } - if ((flags & BUS_DMA_NOWAIT) == 0) { - mem = memdesc_ccb(ccb); - _bus_dmamap_waitok(dmat, map, &mem, callback, callback_arg); - } - nsegs = -1; - error = _bus_dmamap_load_ccb(dmat, map, ccb, &nsegs, flags); - nsegs++; - - CTR5(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d nsegs %d", - __func__, dmat, flags, error, nsegs); - - if (error == EINPROGRESS) - return (error); - segs = _bus_dmamap_complete(dmat, map, NULL, nsegs, error); - if (error) - (*callback)(callback_arg, segs, 0, error); - else - (*callback)(callback_arg, segs, nsegs, error); - /* - * Return ENOMEM to the caller so that it can pass it up the stack. - * This error only happens when NOWAIT is set, so deferral is disabled. - */ - if (error == ENOMEM) - return (error); - - return (0); + mem = memdesc_ccb(ccb); + return (bus_dmamap_load_mem(dmat, map, &mem, callback, callback_arg, + flags)); } int @@ -702,10 +583,6 @@ bus_dmamap_load_mem(bus_dma_tag_t dmat, bus_dmamap_t map, error = _bus_dmamap_load_mbuf_sg(dmat, map, mem->u.md_mbuf, NULL, &nsegs, flags); break; - case MEMDESC_CCB: - error = _bus_dmamap_load_ccb(dmat, map, mem->u.md_ccb, &nsegs, - flags); - break; } nsegs++; diff --git a/sys/kern/subr_msan.c b/sys/kern/subr_msan.c index 236693cfd841..756d1fca4910 100644 --- a/sys/kern/subr_msan.c +++ b/sys/kern/subr_msan.c @@ -57,9 +57,6 @@ __KERNEL_RCSID(0, "$NetBSD: subr_msan.c,v 1.14 2020/09/09 16:29:59 maxv Exp $"); #include #include -#include -#include - #include #include @@ -555,42 +552,6 @@ kmsan_mark_bio(const struct bio *bp, uint8_t c) kmsan_mark(bp->bio_data, bp->bio_length, c); } -static void -kmsan_mark_ccb(const union ccb *ccb, uint8_t c) -{ - if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_IN) - return; - if ((ccb->ccb_h.flags & CAM_DATA_MASK) != CAM_DATA_VADDR) - return; - - switch (ccb->ccb_h.func_code) { - case XPT_SCSI_IO: { - const struct ccb_scsiio *scsiio; - - scsiio = &ccb->ctio; - kmsan_mark(scsiio->data_ptr, scsiio->dxfer_len, c); - break; - } - case XPT_ATA_IO: { - const struct ccb_ataio *ataio; - - ataio = &ccb->ataio; - kmsan_mark(ataio->data_ptr, ataio->dxfer_len, c); - break; - } - case XPT_NVME_IO: { - const struct ccb_nvmeio *nvmeio; - - nvmeio = &ccb->nvmeio; - kmsan_mark(nvmeio->data_ptr, nvmeio->dxfer_len, c); - break; - } - default: - kmsan_panic("%s: unhandled CCB type %d", __func__, - ccb->ccb_h.func_code); - } -} - void kmsan_mark_mbuf(const struct mbuf *m, uint8_t c) { @@ -613,39 +574,6 @@ kmsan_check_bio(const struct bio *bp, const char *descr) kmsan_shadow_check((uintptr_t)bp->bio_data, bp->bio_length, descr); } -void -kmsan_check_ccb(const union ccb *ccb, const char *descr) -{ - if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_OUT) - return; - switch (ccb->ccb_h.func_code) { - case XPT_SCSI_IO: { - const struct ccb_scsiio *scsiio; - - scsiio = &ccb->ctio; - kmsan_check(scsiio->data_ptr, scsiio->dxfer_len, descr); - break; - } - case XPT_ATA_IO: { - const struct ccb_ataio *ataio; - - ataio = &ccb->ataio; - kmsan_check(ataio->data_ptr, ataio->dxfer_len, descr); - break; - } - case XPT_NVME_IO: { - const struct ccb_nvmeio *nvmeio; - - nvmeio = &ccb->nvmeio; - kmsan_check(nvmeio->data_ptr, nvmeio->dxfer_len, descr); - break; - } - default: - kmsan_panic("%s: unhandled CCB type %d", __func__, - ccb->ccb_h.func_code); - } -} - void kmsan_check_mbuf(const struct mbuf *m, const char *descr) { @@ -1586,9 +1514,6 @@ kmsan_bus_dmamap_sync(struct memdesc *desc, bus_dmasync_op_t op) case MEMDESC_MBUF: kmsan_check_mbuf(desc->u.md_mbuf, "dmasync"); break; - case MEMDESC_CCB: - kmsan_check_ccb(desc->u.md_ccb, "dmasync"); - break; case 0: break; default: @@ -1608,9 +1533,6 @@ kmsan_bus_dmamap_sync(struct memdesc *desc, bus_dmasync_op_t op) case MEMDESC_MBUF: kmsan_mark_mbuf(desc->u.md_mbuf, KMSAN_STATE_INITED); break; - case MEMDESC_CCB: - kmsan_mark_ccb(desc->u.md_ccb, KMSAN_STATE_INITED); - break; case 0: break; default: diff --git a/sys/sys/memdesc.h b/sys/sys/memdesc.h index 68dc83d03ef0..1c92ae5b1eb5 100644 --- a/sys/sys/memdesc.h +++ b/sys/sys/memdesc.h @@ -49,7 +49,6 @@ struct memdesc { struct bio *md_bio; struct uio *md_uio; struct mbuf *md_mbuf; - union ccb *md_ccb; } u; size_t md_opaque; /* type specific data. */ uint32_t md_type; /* Type of memory. */ @@ -62,7 +61,6 @@ struct memdesc { #define MEMDESC_BIO 5 /* Pointer to a bio (block io). */ #define MEMDESC_UIO 6 /* Pointer to a uio (any io). */ #define MEMDESC_MBUF 7 /* Pointer to a mbuf (network io). */ -#define MEMDESC_CCB 8 /* Cam control block. (scsi/ata io). */ static inline struct memdesc memdesc_vaddr(void *vaddr, size_t len) @@ -145,14 +143,6 @@ memdesc_mbuf(struct mbuf *mbuf) return (mem); } -static inline struct memdesc -memdesc_ccb(union ccb *ccb) -{ - struct memdesc mem; +struct memdesc memdesc_ccb(union ccb *ccb); - mem.u.md_ccb = ccb; - mem.md_type = MEMDESC_CCB; - - return (mem); -} #endif /* _SYS_MEMDESC_H_ */