From nobody Tue Dec 13 20:47:09 2022 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 4NWrCK2CHNz4kk11; Tue, 13 Dec 2022 20:47:09 +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 4NWrCK1jfRz3NsM; Tue, 13 Dec 2022 20:47:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670964429; 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=vYe2zNyiUucVm7cmXO4Aoo2ztXpdEomq0iKn2p9hTGw=; b=w+UYsBQFWmFX3TsxjqKgYQQMycrdWVY+XLgqyCSf1mRsakiy6MvLb6xKDPMhT7bCvgSmLq oSKPbo//K1ufHV8QEvWs2CfjfWnUmIm7SwQ6EBhR3RILGQQG1+5eC7Rp9a7+SMr0CY12Uj BQ4hg7pVJn9o3cdNkA11cZtkub2Gj3iaWsUo/KU68DUfRSoIzs8dXfacysAcafDRi1SErd g72h8UJJ8IV67Z39FqdpVKnjEHU9PLLXzUxtsWH6xumUQ2DYhQ/1uM9Z9zmiW60XIonVgR iDWQLKkcjuDIpcY7elHYiv2Sv0RjLWmfcBv2e5IpYNSDhK09LexzKcw2y1FBtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670964429; 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=vYe2zNyiUucVm7cmXO4Aoo2ztXpdEomq0iKn2p9hTGw=; b=DvXP497cEXHMtXzbxESEskBUc6KTniwxaSbUbhKYYJGe6o8kucVoEAHx5+zKMPcVmOHFZs 58a2wcZTIzbjt3S22tiZ03RqLVQc69HDv0EsusKDLJvgwsjVjsyfVkmoFJaQOTT3wbJepf aFbGFHIfI7YdNJUwI4sgyesATDUCJZ20SeU0DK0NzcEGL1dpowGEmu5MG5jjRqf/m2EcpC 5ziMvSQtdLTsKusY21/FQ1JcQ8q5U/Z80LMsMyuLak5NI7Ax0JO/KghcPUvsEyj4A5r8Zm MczvLVSSlsditSSFZKie/8hJrswq2RE9NBfv58wGCYwvXwrszVbr9kTWogjsEQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1670964429; a=rsa-sha256; cv=none; b=IgQ9YgAinRcL8wfAAEhx6ZJpEmWAGlkzTQ3X+7+Fe4g5poE70SzOvtSQhIMRFGzB+zlTtl esmHDmy1AWGaWi6eiJ3Sq9PtxIMOrtiUE5mnEFq9g14jqsuL8Ln5ugt2uo22jWw9AhH+Sg X7VkHfQdhcb1G1otJapkYjPpJGogEwZq0r5l/FzCYTaCQcDAVXeloMhkRdukoDo9oL/IEB hjgKArfpCMVgTVgnW6AMBpY1JFVuoBSNU/JvxGxV+C/Kys0OA9OeD4QmAstP7KAdSxgm6s xIazl/NMWru8Hmkgh4sj6UJ1Uv5B7PSADXCLJTkYbonD6KPak/BR13AQ5IeZlA== 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 4NWrCK0m7RzS0B; Tue, 13 Dec 2022 20:47:09 +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 2BDKl9Ej065328; Tue, 13 Dec 2022 20:47:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2BDKl92M065327; Tue, 13 Dec 2022 20:47:09 GMT (envelope-from git) Date: Tue, 13 Dec 2022 20:47:09 GMT Message-Id: <202212132047.2BDKl92M065327@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mateusz Guzik Subject: git: e6bc24b0385a - main - kref: switch internal type to atomic_t and bring back const to kref_read 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: mjg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e6bc24b0385a166526d20b2eb0cbb6a116350075 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=e6bc24b0385a166526d20b2eb0cbb6a116350075 commit e6bc24b0385a166526d20b2eb0cbb6a116350075 Author: Mateusz Guzik AuthorDate: 2022-12-13 20:42:32 +0000 Commit: Mateusz Guzik CommitDate: 2022-12-13 20:46:58 +0000 kref: switch internal type to atomic_t and bring back const to kref_read This unbreak drm-kmod build. the const is part of Linux API Unfortunately drm-kmod uses hand-rolled refcount* calls on a kref object. For now go the easy route of keeping it operational by casting stuff internally. The general goal here is to make FreeBSD refcount API use an opaque type, hence the ongoing removal of hand-rolled accesses. Reported by: emaste --- sys/compat/linuxkpi/common/include/linux/kref.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/kref.h b/sys/compat/linuxkpi/common/include/linux/kref.h index 9a6814175223..5a1fd834a58d 100644 --- a/sys/compat/linuxkpi/common/include/linux/kref.h +++ b/sys/compat/linuxkpi/common/include/linux/kref.h @@ -44,35 +44,35 @@ struct kref { /* XXX In Linux this is a refcount_t */ - volatile u_int32_t refcount; + atomic_t refcount; }; static inline void kref_init(struct kref *kref) { - refcount_init(&kref->refcount, 1); + refcount_init((uint32_t *)&kref->refcount, 1); } static inline unsigned int -kref_read(struct kref *kref) +kref_read(const struct kref *kref) { - return (refcount_load(&kref->refcount)); + return (refcount_load(__DECONST(u_int32_t *, &kref->refcount))); } static inline void kref_get(struct kref *kref) { - refcount_acquire(&kref->refcount); + refcount_acquire((uint32_t *)&kref->refcount); } static inline int kref_put(struct kref *kref, void (*rel)(struct kref *kref)) { - if (refcount_release(&kref->refcount)) { + if (refcount_release((uint32_t *)&kref->refcount)) { rel(kref); return 1; } @@ -84,7 +84,7 @@ kref_put_lock(struct kref *kref, void (*rel)(struct kref *kref), spinlock_t *lock) { - if (refcount_release(&kref->refcount)) { + if (refcount_release((uint32_t *)&kref->refcount)) { spin_lock(lock); rel(kref); return (1); @@ -98,7 +98,7 @@ kref_sub(struct kref *kref, unsigned int count, { while (count--) { - if (refcount_release(&kref->refcount)) { + if (refcount_release((uint32_t *)&kref->refcount)) { rel(kref); return 1; } @@ -110,16 +110,16 @@ static inline int __must_check kref_get_unless_zero(struct kref *kref) { - return refcount_acquire_if_not_zero(&kref->refcount); + return refcount_acquire_if_not_zero((uint32_t *)&kref->refcount); } static inline int kref_put_mutex(struct kref *kref, void (*release)(struct kref *kref), struct mutex *lock) { WARN_ON(release == NULL); - if (unlikely(!refcount_release_if_not_last(&kref->refcount))) { + if (unlikely(!refcount_release_if_not_last((uint32_t *)&kref->refcount))) { mutex_lock(lock); - if (unlikely(!refcount_release(&kref->refcount))) { + if (unlikely(!refcount_release((uint32_t *)&kref->refcount))) { mutex_unlock(lock); return 0; }