From nobody Sat Sep 9 22:01:36 2023 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 4Rjn4c6gNlz4t3YF; Sat, 9 Sep 2023 22:01:36 +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 4Rjn4c6Dsxz4T0j; Sat, 9 Sep 2023 22:01:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694296896; 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=63WmoviD+8gklmcblFoEvgkC5GIpol/mvzLckDYIL6I=; b=bDAF5GOw4c9WhZlKLmmPlD4hW+1xAYW0M2llDLBRNk8JhsUiPTZeIxV8CXYBk2DhiyuHIQ 0UB1MLGexaO/CwUAKN5/3FfVfyooF7uoR9RYfy1T6lV4kp/ntKlAYK1Qmts83Zs+5od3ho QXBSX8Zip+Q0bBBjaw6CAvGfGfD69GzwVEnzHZNO/aRdeIrQtG83efZh9uNpc6qDemRXr5 e00RqkBm0Z41mFXNVROB6l53FQA4DaFLwaODwTqdZc+S3pZpDZHWHTQ69eqUode07SyOxH zsRwcNhuXebCbHAmHg+KqgATUxr4yAJ0sZy0K0qUyXFgoilgQs0HyZ/gn7gGiA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694296896; a=rsa-sha256; cv=none; b=Pgi8mSG59XQqQBdp75WO/0ctUYJkz2E0ht+pbr7chSCaXHS3Hvx19Ugpveh3znDh7khq9L +nO4PAEggoPAEPs8PQob3Kz6pEjvk30XwlXl07ryVPUYD01OQl1XCvGHgbyn0qa3lwVLQ1 ylf1HygMRtqo7iTKk5qOSmJW4/hJ1MXa64OXXEnDvP4KLWny/ctBFOI6BHYrlvhiFIJabt d+Iy0XdgjzgjAiY2Sg08jeMl5WJeMV89YHCr89buVG22EabF07JVXdd3TqbW3Trr1/9lgE ryrz3z/v9QtVgbwB30kh6b2LppT2SoTgTKxWm2G+nNTfWoWSVxmTChTBjEW1eQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694296896; 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=63WmoviD+8gklmcblFoEvgkC5GIpol/mvzLckDYIL6I=; b=pMjyPIcqiouNjlS9iHXyEOrv5mnNMGS4iZoDQekRuERA/xlUv7mqnP0P3huRRfEdO3ZXTs lqkkUCTdvTZy653ZqqNROaBNdwrh7IEm0Su81NEdPgc5c6ollhqEx9Qz8hDoUrsREJ3n1v uJQcdCpgTUngR8vF7a9r6SqqBVZkF7hz4ROOHov/6gyOp0FkGfuSR/9+OjZ5MEHKyYEmeT 2rbVCAaK07DoJaWle7mH1jgFLMtOLJhPwcQ3R2GPWDXOEPyZ2+QYwHMLHv1X19k38YGZTn qkwh+1+e2UveQFMpPdtHVT8TOoRbJAe/DIUGDs2iE7M3n3DD5Ut8id/Kl1rzGw== 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 4Rjn4c5KhbzhNr; Sat, 9 Sep 2023 22:01:36 +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 389M1aud013911; Sat, 9 Sep 2023 22:01:36 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 389M1aV4013892; Sat, 9 Sep 2023 22:01:36 GMT (envelope-from git) Date: Sat, 9 Sep 2023 22:01:36 GMT Message-Id: <202309092201.389M1aV4013892@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 6df6facf44f9 - main - shmfd: hide direct rangelock(9) use under a wrapper 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6df6facf44f952f64753bee00831fd93f16c99a9 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=6df6facf44f952f64753bee00831fd93f16c99a9 commit 6df6facf44f952f64753bee00831fd93f16c99a9 Author: Konstantin Belousov AuthorDate: 2023-08-18 12:38:28 +0000 Commit: Konstantin Belousov CommitDate: 2023-09-09 22:00:06 +0000 shmfd: hide direct rangelock(9) use under a wrapper Sponsored by: The FreeBSD Foundation MFC after: 1 week --- sys/kern/uipc_shm.c | 69 +++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/sys/kern/uipc_shm.c b/sys/kern/uipc_shm.c index 1975f0d60f89..a8e2502808a0 100644 --- a/sys/kern/uipc_shm.c +++ b/sys/kern/uipc_shm.c @@ -182,6 +182,15 @@ SYSCTL_INT(_vm_largepages, OID_AUTO, reclaim_tries, CTLFLAG_RWTUN, &largepage_reclaim_tries, 0, "Number of contig reclaims before giving up for default alloc policy"); +#define shm_rangelock_unlock(shmfd, cookie) \ + rangelock_unlock(&(shmfd)->shm_rl, (cookie), &(shmfd)->shm_mtx) +#define shm_rangelock_rlock(shmfd, start, end) \ + rangelock_rlock(&(shmfd)->shm_rl, (start), (end), &(shmfd)->shm_mtx) +#define shm_rangelock_tryrlock(shmfd, start, end) \ + rangelock_tryrlock(&(shmfd)->shm_rl, (start), (end), &(shmfd)->shm_mtx) +#define shm_rangelock_wlock(shmfd, start, end) \ + rangelock_wlock(&(shmfd)->shm_rl, (start), (end), &(shmfd)->shm_mtx) + static int uiomove_object_page(vm_object_t obj, size_t len, struct uio *uio) { @@ -456,10 +465,10 @@ shm_read(struct file *fp, struct uio *uio, struct ucred *active_cred, return (error); #endif foffset_lock_uio(fp, uio, flags); - rl_cookie = rangelock_rlock(&shmfd->shm_rl, uio->uio_offset, - uio->uio_offset + uio->uio_resid, &shmfd->shm_mtx); + rl_cookie = shm_rangelock_rlock(shmfd, uio->uio_offset, + uio->uio_offset + uio->uio_resid); error = uiomove_object(shmfd->shm_object, shmfd->shm_size, uio); - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); foffset_unlock_uio(fp, uio, flags); return (error); } @@ -497,13 +506,10 @@ shm_write(struct file *fp, struct uio *uio, struct ucred *active_cred, } else { size = uio->uio_offset + uio->uio_resid; } - if ((flags & FOF_OFFSET) == 0) { - rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); - } else { - rl_cookie = rangelock_wlock(&shmfd->shm_rl, uio->uio_offset, - size, &shmfd->shm_mtx); - } + if ((flags & FOF_OFFSET) == 0) + rl_cookie = shm_rangelock_wlock(shmfd, 0, OFF_MAX); + else + rl_cookie = shm_rangelock_wlock(shmfd, uio->uio_offset, size); if ((shmfd->shm_seals & F_SEAL_WRITE) != 0) { error = EPERM; } else { @@ -516,7 +522,7 @@ shm_write(struct file *fp, struct uio *uio, struct ucred *active_cred, error = uiomove_object(shmfd->shm_object, shmfd->shm_size, uio); } - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); foffset_unlock_uio(fp, uio, flags); return (error); } @@ -571,22 +577,20 @@ shm_ioctl(struct file *fp, u_long com, void *data, struct ucred *active_cred, conf->alloc_policy != SHM_LARGEPAGE_ALLOC_HARD) return (EINVAL); - rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, 0, OFF_MAX); shmfd->shm_lp_psind = conf->psind; shmfd->shm_lp_alloc_policy = conf->alloc_policy; shmfd->shm_object->un_pager.phys.data_val = conf->psind; - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (0); case FIOGSHMLPGCNF: if (!shm_largepage(shmfd)) return (ENOTTY); conf = data; - rl_cookie = rangelock_rlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_rlock(shmfd, 0, OFF_MAX); conf->psind = shmfd->shm_lp_psind; conf->alloc_policy = shmfd->shm_lp_alloc_policy; - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (0); default: return (ENOTTY); @@ -917,10 +921,9 @@ shm_dotruncate(struct shmfd *shmfd, off_t length) void *rl_cookie; int error; - rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, 0, OFF_MAX); error = shm_dotruncate_cookie(shmfd, length, rl_cookie); - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (error); } @@ -1258,8 +1261,7 @@ kern_shm_open2(struct thread *td, const char *userpath, int flags, mode_t mode, error = ENOENT; } } else { - rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, 0, OFF_MAX); /* * kern_shm_open() likely shouldn't ever error out on @@ -1331,8 +1333,7 @@ kern_shm_open2(struct thread *td, const char *userpath, int flags, mode_t mode, shmfd->shm_seals |= initial_seals; shm_hold(shmfd); } - rangelock_unlock(&shmfd->shm_rl, rl_cookie, - &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); } sx_xunlock(&shm_dict_lock); @@ -1648,8 +1649,7 @@ shm_mmap(struct file *fp, vm_map_t map, vm_offset_t *addr, vm_size_t objsize, shmfd = fp->f_data; maxprot = VM_PROT_NONE; - rl_cookie = rangelock_rlock(&shmfd->shm_rl, 0, objsize, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_rlock(shmfd, 0, objsize); /* FREAD should always be set. */ if ((fp->f_flag & FREAD) != 0) maxprot |= VM_PROT_EXECUTE | VM_PROT_READ; @@ -1723,7 +1723,7 @@ shm_mmap(struct file *fp, vm_map_t map, vm_offset_t *addr, vm_size_t objsize, vm_object_deallocate(shmfd->shm_object); } out: - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (error); } @@ -1941,8 +1941,7 @@ shm_add_seals(struct file *fp, int seals) error = 0; shmfd = fp->f_data; - rl_cookie = rangelock_wlock(&shmfd->shm_rl, 0, OFF_MAX, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, 0, OFF_MAX); /* Even already-set seals should result in EPERM. */ if ((shmfd->shm_seals & F_SEAL_SEAL) != 0) { @@ -1973,7 +1972,7 @@ shm_add_seals(struct file *fp, int seals) } shmfd->shm_seals |= nseals; out: - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (error); } @@ -2067,8 +2066,7 @@ shm_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags, off = *offset; len = *length; - rl_cookie = rangelock_wlock(&shmfd->shm_rl, off, off + len, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, off, off + len); switch (cmd) { case SPACECTL_DEALLOC: if ((shmfd->shm_seals & F_SEAL_WRITE) != 0) { @@ -2082,7 +2080,7 @@ shm_fspacectl(struct file *fp, int cmd, off_t *offset, off_t *length, int flags, default: __assert_unreachable(); } - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); return (error); } @@ -2109,11 +2107,10 @@ shm_fallocate(struct file *fp, off_t offset, off_t len, struct thread *td) * the shmfd is not necessarily a concern. If other mechanisms are * added to grow a shmfd, this may need to be re-evaluated. */ - rl_cookie = rangelock_wlock(&shmfd->shm_rl, offset, size, - &shmfd->shm_mtx); + rl_cookie = shm_rangelock_wlock(shmfd, offset, size); if (size > shmfd->shm_size) error = shm_dotruncate_cookie(shmfd, size, rl_cookie); - rangelock_unlock(&shmfd->shm_rl, rl_cookie, &shmfd->shm_mtx); + shm_rangelock_unlock(shmfd, rl_cookie); /* Translate to posix_fallocate(2) return value as needed. */ if (error == ENOMEM) error = ENOSPC;