From nobody Fri May 17 08:24:50 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1626255177457837.9909462582253; Wed, 14 Jul 2021 02:32:57 -0700 (PDT) Received: from localhost ([::1]:37142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m3bGB-0003s7-Cz for importer@patchew.org; Wed, 14 Jul 2021 05:32:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33560) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bDm-0001hK-8g for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:60285) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bDk-00007A-LY for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:26 -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-157-Trw-e8r7MxmjdTrn2uuRyA-1; Wed, 14 Jul 2021 05:30:22 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 93156801107 for ; Wed, 14 Jul 2021 09:30:21 +0000 (UTC) Received: from localhost (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id BBDF95C232; Wed, 14 Jul 2021 09:30:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626255023; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nUnwbG2LTVhPpxM8WRSWhFamkuOkPnk96+tXIzDWUtY=; b=SreM44B8RL+bDEh0/AvEgXl/3iVmRsQT1Eu2aFZ1+Hwf4oiogURxpY8WFaVR4w71+fhXRi nPDf4X8gm1RL88Sj7Z9w0E3HiIzgtEm9ksY/08zE+MP8EnJPSG1Wsmbd/HFcUvowWockv7 7Z8wxFLGJQtaBMxylKWEBDrtgCcXg94= X-MC-Unique: Trw-e8r7MxmjdTrn2uuRyA-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v3 1/3] tests/qtest/vhost-user-test: use share=on with memfd Date: Wed, 14 Jul 2021 10:29:44 +0100 Message-Id: <20210714092946.569516-2-stefanha@redhat.com> In-Reply-To: <20210714092946.569516-1-stefanha@redhat.com> References: <20210714092946.569516-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.7, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: Laurent Vivier , kwolf@redhat.com, Thomas Huth , "Michael S. Tsirkin" , Stefan Hajnoczi , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1626255179167100001 Content-Type: text/plain; charset="utf-8" Add share=3Don for consistency and to prevent future bugs in the test. Note that share=3Don is the default for memory-backend-memfd so existing tests work. Reviewed-by: Marc-Andr=C3=A9 Lureau Acked-by: Thomas Huth Signed-off-by: Stefan Hajnoczi Reviewed-by: Pankaj Gupta --- tests/qtest/vhost-user-test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/qtest/vhost-user-test.c b/tests/qtest/vhost-user-test.c index 3d6337fb5c..6c0891d429 100644 --- a/tests/qtest/vhost-user-test.c +++ b/tests/qtest/vhost-user-test.c @@ -40,7 +40,7 @@ #define QEMU_CMD_MEM " -m %d -object memory-backend-file,id=3Dmem,size= =3D%dM," \ "mem-path=3D%s,share=3Don -numa node,memdev=3Dmem" #define QEMU_CMD_MEMFD " -m %d -object memory-backend-memfd,id=3Dmem,size= =3D%dM," \ - " -numa node,memdev=3Dmem" + "share=3Don -numa node,memdev=3Dmem" #define QEMU_CMD_CHR " -chardev socket,id=3D%s,path=3D%s%s" #define QEMU_CMD_NETDEV " -netdev vhost-user,id=3Dhs0,chardev=3D%s,vhostfo= rce" =20 --=20 2.31.1 From nobody Fri May 17 08:24:50 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1626255188881691.9249734376381; Wed, 14 Jul 2021 02:33:08 -0700 (PDT) Received: from localhost ([::1]:37824 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m3bGN-0004M1-Nr for importer@patchew.org; Wed, 14 Jul 2021 05:33:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bDy-00025J-6u for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:26985) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bDw-0000Ez-Bm for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:37 -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-478-UpWIMsYMM8uQx3s-V_Prhg-1; Wed, 14 Jul 2021 05:30:34 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8FDC7101F003 for ; Wed, 14 Jul 2021 09:30:33 +0000 (UTC) Received: from localhost (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id A5A9E26DC5; Wed, 14 Jul 2021 09:30:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626255035; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oRAs9inLvqN32CDm3YvQbZuQXoq/BmR1BVABzfrIpR0=; b=EcCGZHK07L2Y2q41pEstdCKhf4PtRRhdHtVXh5JegE3HUEj0EbdxhlQS/nn2+LUosjqEIz qFC1ujaH0IU7cd22KPSOSk3afH2bDit3RXOFZwNJHETnl/a9wr8nmpKo2emjMQP9SiKxmI O3rrU+q9Jv22ybBValNn8eAl0WyYAFU= X-MC-Unique: UpWIMsYMM8uQx3s-V_Prhg-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v3 2/3] memory: add memory_region_is_mapped_shared() Date: Wed, 14 Jul 2021 10:29:45 +0100 Message-Id: <20210714092946.569516-3-stefanha@redhat.com> In-Reply-To: <20210714092946.569516-1-stefanha@redhat.com> References: <20210714092946.569516-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=170.10.133.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.7, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, MIME_BASE64_TEXT=1.741, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: Laurent Vivier , kwolf@redhat.com, Thomas Huth , "Michael S. Tsirkin" , Stefan Hajnoczi , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1626255190074100001 Content-Type: text/plain; charset="utf-8" Add a function to query whether a memory region is mmap(MAP_SHARED). This will be used to check that vhost-user memory regions can be shared with the device backend process in the next patch. An inline function in "exec/memory.h" would have been nice but RAMBlock fields are only accessible from memory.c (see "exec/ramblock.h"). Signed-off-by: Stefan Hajnoczi Reviewed-by: Pankaj Gupta --- include/exec/memory.h | 11 +++++++++++ softmmu/memory.c | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index c3d417d317..5976f05a01 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -2763,6 +2763,17 @@ static inline bool memory_access_is_direct(MemoryReg= ion *mr, bool is_write) } } =20 +/** + * memory_region_is_mapped_shared: check whether a memory region is + * mmap(MAP_SHARED) + * + * Returns %true is a memory region is mmap(MAP_SHARED). This is always fa= lse + * on memory regions that do not support memory_region_get_ram_ptr(). + * + * @mr: the memory region being queried + */ +bool memory_region_is_mapped_shared(MemoryRegion *mr); + /** * address_space_read: read from an address space. * diff --git a/softmmu/memory.c b/softmmu/memory.c index bfedaf9c4d..3c4510c809 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -1811,6 +1811,12 @@ bool memory_region_is_ram_device(MemoryRegion *mr) return mr->ram_device; } =20 +bool memory_region_is_mapped_shared(MemoryRegion *mr) +{ + return memory_access_is_direct(mr, false) && + (mr->ram_block->flags & RAM_SHARED); +} + uint8_t memory_region_get_dirty_log_mask(MemoryRegion *mr) { uint8_t mask =3D mr->dirty_log_mask; --=20 2.31.1 From nobody Fri May 17 08:24:50 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1626255254077603.6934514953631; Wed, 14 Jul 2021 02:34:14 -0700 (PDT) Received: from localhost ([::1]:42112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m3bHR-0007Cy-25 for importer@patchew.org; Wed, 14 Jul 2021 05:34:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33698) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bEA-0002b3-GF for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:42916) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m3bE8-0000NS-LT for qemu-devel@nongnu.org; Wed, 14 Jul 2021 05:30:50 -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-133-2NaE4WmrPYSfRkO0jNusiA-1; Wed, 14 Jul 2021 05:30:46 -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 7143C1B18BC0 for ; Wed, 14 Jul 2021 09:30:45 +0000 (UTC) Received: from localhost (ovpn-112-200.ams2.redhat.com [10.36.112.200]) by smtp.corp.redhat.com (Postfix) with ESMTP id B91ED60871; Wed, 14 Jul 2021 09:30:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1626255048; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=rnDWv663jkS5ErYisfrxZYRrGQTSxT0robFBkPw9a28=; b=UrThMkkUsC7cXxQ0tgjaf7nUg/UwHUqbzbSgNT6Ftdvo2hGXHCGWe9T+NjqkUG4PjpCUgB GU1gJxydG9DazpnHFJIuk+tvjLfu6wn/lLhTNBzaFr1h+D1+WhAG9cnyyAExeHOjPlcM/f gMx6/gpgn2Sf84Fqn3qducuKop/yoOY= X-MC-Unique: 2NaE4WmrPYSfRkO0jNusiA-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PATCH v3 3/3] vhost-user: warn when guest RAM is not shared Date: Wed, 14 Jul 2021 10:29:46 +0100 Message-Id: <20210714092946.569516-4-stefanha@redhat.com> In-Reply-To: <20210714092946.569516-1-stefanha@redhat.com> References: <20210714092946.569516-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable 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; Received-SPF: pass client-ip=216.205.24.124; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -34 X-Spam_score: -3.5 X-Spam_bar: --- X-Spam_report: (-3.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.7, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: Laurent Vivier , kwolf@redhat.com, Thomas Huth , "Michael S. Tsirkin" , Stefan Hajnoczi , Paolo Bonzini , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1626255255275100001 Content-Type: text/plain; charset="utf-8" Memory regions must be mmap(MAP_SHARED) so that modifications made by the vhost device backend process are visible to QEMU and vice versa. Use the new memory_region_is_mapped_shared() function to check this and print a warning if guest RAM is not shared: qemu-system-x86_64: -device vhost-user-fs-pci,chardev=3Dchar0,tag=3Dmyfs:= warning: Found vhost-user memory region without MAP_SHARED (did you forget= -object memory-*,share=3Don?) qemu-system-x86_64: Failed to read from slave. This warning makes it clear that memory needs to be configured with share=3Don. Without this patch the vhost device is initialized and the device fails with vague error messages caused by inconsistent memory views. The warning should make it easier to troubleshoot QEMU command-lines that lack share=3Don memory. I couldn't figure out how to make this a vhost_dev_init() error, because memory regions aren't necessarily final when it is called. Also, hotplug can add memory regions without MAP_SHARED in the future, so we still need to warn about that. Reported-by: Kevin Wolf Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Stefan Hajnoczi --- hw/virtio/vhost-user.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 29ea2b4fce..3978292514 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -2295,11 +2295,23 @@ vhost_user_crypto_close_session(struct vhost_dev *d= ev, uint64_t session_id) static bool vhost_user_mem_section_filter(struct vhost_dev *dev, MemoryRegionSection *section) { - bool result; + /* An fd is required so we can pass it to the device backend process */ + if (memory_region_get_fd(section->mr) < 0) { + return false; + } =20 - result =3D memory_region_get_fd(section->mr) >=3D 0; - - return result; + /* + * It must be mmap(MAP_SHARED) so memory stores from the device backend + * process are visible to us and vice versa. + */ + if (!memory_region_is_mapped_shared(section->mr)) { + static bool warned; + warn_report_once_cond(&warned, "Found vhost-user memory region " + "without MAP_SHARED (did you forget -object " + "memory-*,share=3Don?)"); + return false; + } + return true; } =20 static int vhost_user_get_inflight_fd(struct vhost_dev *dev, --=20 2.31.1