From nobody Mon Feb 9 04:44:34 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1584459662; cv=none; d=zohomail.com; s=zohoarc; b=aQPNLWvmYVvy6rD1YiDD74aJ3lfMCysTLb5WhrrIqiaEar8bhXcLv1hCaZlfzWGszv5AHYFlOkQ2ui2Sfa7ywxPdx8lfUIjTHNuWGnwNUKqGfWvwHM6uJDbpXxDLTFX5pyGjAxsRGFKLHJN/fRv1HXqZ7/vnf/8wzr6SiCgsejU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584459662; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To; bh=p/QNWqtHLHlLJabEV0juycrJrvzhVqK6OOT+GGxhCZY=; b=Zq2Q1L15qiJMEWWTJBg7oSomWw8jHnKyp7t5xbytOB1hAE/nqcSe59oSB2JnAAi5rXDhH6PCUuXE7kl9utufC2mR5Wa2PGY2uPQLe3rp2ld8JmTzazlSRB7s64nh/9aKcC3OTWik3XGRkPQqCGYglLGBXBSdBLJ3XScwfjDiwNI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584459662286426.9416626623338; Tue, 17 Mar 2020 08:41:02 -0700 (PDT) Received: from localhost ([::1]:34986 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEEKz-0003bU-5r for importer@patchew.org; Tue, 17 Mar 2020 11:41:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36096) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jEE0c-0006xk-A9 for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:19:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jEE0b-0006Og-0B for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:19:58 -0400 Received: from us-smtp-delivery-74.mimecast.com ([216.205.24.74]:58685) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jEE0a-0006Lf-Qd for qemu-devel@nongnu.org; Tue, 17 Mar 2020 11:19:56 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-371-xm2vl7bkMyi3MW-H7iodSw-1; Tue, 17 Mar 2020 11:19:54 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E44128017CC for ; Tue, 17 Mar 2020 15:19:53 +0000 (UTC) Received: from 640k.localdomain.com (unknown [10.36.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2D44C7E312 for ; Tue, 17 Mar 2020 15:19:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1584458396; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=p/QNWqtHLHlLJabEV0juycrJrvzhVqK6OOT+GGxhCZY=; b=HUZcyctuGBKXZXOTX/kYAtdHgGnTdFIUic+oXjArX1YkQX80AntEDc0TPy2intbfD0S+VK G789DNm/BMHsH2I4N/mgYrH/+hlILS26nQcBGpMfvQxEqJKcMixBqTc84MGOouMBCBA8MR MPm/GaSipNZ9EYrXVIYjr2OciNA9kzg= X-MC-Unique: xm2vl7bkMyi3MW-H7iodSw-1 From: Paolo Bonzini To: qemu-devel@nongnu.org Subject: [PULL v3 35/62] lockable: add QEMU_MAKE_LOCKABLE_NONNULL Date: Tue, 17 Mar 2020 16:19:32 +0100 Message-Id: <1584458374-29068-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1584458374-29068-1-git-send-email-pbonzini@redhat.com> References: <1584458374-29068-1-git-send-email-pbonzini@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 216.205.24.74 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This will be needed for lock guards, because if the lock is NULL the dummy for loop of the lock guard never runs. This can cause confusion and dummy warnings in the compiler, but even if it did not, aborting with a NULL pointer dereference is a less surprising behavior. Signed-off-by: Paolo Bonzini --- include/qemu/lockable.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/include/qemu/lockable.h b/include/qemu/lockable.h index 84ea794..313d4d9 100644 --- a/include/qemu/lockable.h +++ b/include/qemu/lockable.h @@ -65,7 +65,7 @@ qemu_make_lockable(void *x, QemuLockable *lockable) * In C++ it would be different, but then C++ wouldn't need QemuLockable * either... */ -#define QEMU_MAKE_LOCKABLE_(x) qemu_make_lockable((x), &(QemuLockable) { = \ +#define QEMU_MAKE_LOCKABLE_(x) (&(QemuLockable) { \ .object =3D (x), \ .lock =3D QEMU_LOCK_FUNC(x), \ .unlock =3D QEMU_UNLOCK_FUNC(x), \ @@ -76,11 +76,24 @@ qemu_make_lockable(void *x, QemuLockable *lockable) * @x: a lock object (currently one of QemuMutex, CoMutex, QemuSpin). * * Returns a QemuLockable object that can be passed around - * to a function that can operate with locks of any kind. + * to a function that can operate with locks of any kind, or + * NULL if @x is %NULL. */ #define QEMU_MAKE_LOCKABLE(x) \ QEMU_GENERIC(x, \ (QemuLockable *, (x)), \ + qemu_make_lockable((x), QEMU_MAKE_LOCKABLE_(x))) + +/* QEMU_MAKE_LOCKABLE_NONNULL - Make a polymorphic QemuLockable + * + * @x: a lock object (currently one of QemuMutex, CoMutex, QemuSpin). + * + * Returns a QemuLockable object that can be passed around + * to a function that can operate with locks of any kind. + */ +#define QEMU_MAKE_LOCKABLE_NONNULL(x) \ + QEMU_GENERIC(x, \ + (QemuLockable *, (x)), \ QEMU_MAKE_LOCKABLE_(x)) =20 static inline void qemu_lockable_lock(QemuLockable *x) --=20 1.8.3.1