From nobody Mon Apr 29 05:12:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1608741326; cv=none; d=zohomail.com; s=zohoarc; b=F5N9fa/CLEV4XdF+QgR4fGHCcNBoW06u3948mdEJUsJViZWzPdzvDCgN6V9yeuAKTYPjzlCk8pUBRsoQDKbnIq+4DxNpmOhHaqj+Ohn7cmkIgiPvg9eqbfN8La/TJgRMV8Fdp2c1B17nR73lFwtT1zgFEzOR3+OUis+LjzMqKbA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608741326; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rVXWjq/OVjO3XExDO+KN4ecBuNUKkRk7UjIEDCUx8Y8=; b=RqXRwr3xnu6/76Gqr9ntVSDCQG7njY6WfSE/RqKZsDnpgjmJF/nlwl62uT53nKoFn0u8e5e9E++mdmpdD6RDV2xXEVmanvZjwUjSrunYDIgsI9ugdrcS1e3rWfghSzVy/GFDykK9+k3jUG1WVld1/D0wJp8ekRWAJxyY8kys4ik= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1608741326941367.4647818446233; Wed, 23 Dec 2020 08:35:26 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.58498.102938 (Exim 4.92) (envelope-from ) id 1ks76V-0000Xt-1d; Wed, 23 Dec 2020 16:35:11 +0000 Received: by outflank-mailman (output) from mailman id 58498.102938; Wed, 23 Dec 2020 16:35:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76U-0000Xm-UI; Wed, 23 Dec 2020 16:35:10 +0000 Received: by outflank-mailman (input) for mailman id 58498; Wed, 23 Dec 2020 16:35:09 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76T-0000XT-JQ for xen-devel@lists.xenproject.org; Wed, 23 Dec 2020 16:35:09 +0000 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 7a4fefce-e134-48d8-8e6e-ee2771c0087a; Wed, 23 Dec 2020 16:35:08 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7a4fefce-e134-48d8-8e6e-ee2771c0087a DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1608741308; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mIHqFXZKILQ2PSe2CqBuCc+ylOQGqiB+Dim1E7v3fY8=; b=WkE9fwTVcyLFjX/EI973IXox2c9pLJdNO57vvGgTJARIhW5hgFuzQG5V XkrHo7Vms8wGKB+KJIoLM0J5uav9q3HwCfKdAtRudpekuDK/AXmyJAEMj x6tzRvDGUVzPNROoFk2+cUrhZ7YjJ50D8wCyTriz9I4o5llrCNdDa1zRz A=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: UwZgj87PZM7v3t9dGeOvfWHE/mUNZGCeT53o7uemvG8vc3yvXqwO3G70+qQ+Wu0OGDHrhLXkWF QvlgSamH7GIOFgWyzWn4r9ssVvDjxuJj8fm9XPeoO7FAPZvpf6eZM1Q0v/1Z3Skxj2iMJyzuHL YboTG/z/gC3qnsjxNrhzGk7AVLtZ25XvMxupuqpWjapIRWkholW9km0W78ANwapUMM0pA9dh6i /9WFsUEPiuQCukHkLigjmtCC1Qz8i0UOpOIwosrJ8LpRSl9nZX3eQjljGZHLdt7JWZScElnI5I 35M= X-SBRS: 5.2 X-MesageID: 34085172 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.78,441,1599537600"; d="scan'208";a="34085172" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu , Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Tamas K Lengyel Subject: [PATCH 1/4] xen/dmalloc: Introduce dmalloc() APIs Date: Wed, 23 Dec 2020 16:34:39 +0000 Message-ID: <20201223163442.8840-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20201223163442.8840-1-andrew.cooper3@citrix.com> References: <20201223163442.8840-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) Wrappers for xmalloc() and friends, which track allocations tied to a speci= fic domain. Check for any leaked memory at domain destruction time. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu CC: Stefano Stabellini CC: Julien Grall CC: Volodymyr Babchuk CC: Tamas K Lengyel RFC: * This probably wants to be less fatal in release builds * In an ideal world, we'd also want to count the total number of bytes allocated from the xmalloc heap, which would be interesting to print in = the 'q' debugkey. However, that data is fairly invasive to obtain. * More complicated logic could track the origins of each allocation, and be able to identify which one(s) leaked. --- xen/common/Makefile | 1 + xen/common/dmalloc.c | 19 +++++++++++++++++++ xen/common/domain.c | 6 ++++++ xen/include/xen/dmalloc.h | 29 +++++++++++++++++++++++++++++ xen/include/xen/sched.h | 2 ++ 5 files changed, 57 insertions(+) create mode 100644 xen/common/dmalloc.c create mode 100644 xen/include/xen/dmalloc.h diff --git a/xen/common/Makefile b/xen/common/Makefile index 7a4e652b57..c5d9c23fd1 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -5,6 +5,7 @@ obj-$(CONFIG_CORE_PARKING) +=3D core_parking.o obj-y +=3D cpu.o obj-$(CONFIG_DEBUG_TRACE) +=3D debugtrace.o obj-$(CONFIG_HAS_DEVICE_TREE) +=3D device_tree.o +obj-y +=3D dmalloc.o obj-y +=3D domain.o obj-y +=3D event_2l.o obj-y +=3D event_channel.o diff --git a/xen/common/dmalloc.c b/xen/common/dmalloc.c new file mode 100644 index 0000000000..e3a0e546c2 --- /dev/null +++ b/xen/common/dmalloc.c @@ -0,0 +1,19 @@ +#include +#include +#include + +void dfree(struct domain *d, void *ptr) +{ + atomic_dec(&d->dalloc_heap); + xfree(ptr); +} + +void *_dzalloc(struct domain *d, size_t size, size_t align) +{ + void *ptr =3D _xmalloc(size, align); + + if ( ptr ) + atomic_inc(&d->dalloc_heap); + + return ptr; +} diff --git a/xen/common/domain.c b/xen/common/domain.c index d151be3f36..1db1c0e70a 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -332,6 +332,8 @@ static int domain_teardown(struct domain *d) */ static void _domain_destroy(struct domain *d) { + int outstanding; + BUG_ON(!d->is_dying); BUG_ON(atomic_read(&d->refcnt) !=3D DOMAIN_DESTROYED); =20 @@ -347,6 +349,10 @@ static void _domain_destroy(struct domain *d) =20 lock_profile_deregister_struct(LOCKPROF_TYPE_PERDOM, d); =20 + outstanding =3D atomic_read(&d->dalloc_heap); + if ( outstanding ) + panic("%pd has %d outstanding heap allocations\n", d, outstanding); + free_domain_struct(d); } =20 diff --git a/xen/include/xen/dmalloc.h b/xen/include/xen/dmalloc.h new file mode 100644 index 0000000000..a90cf0259c --- /dev/null +++ b/xen/include/xen/dmalloc.h @@ -0,0 +1,29 @@ +#ifndef XEN_DMALLOC_H +#define XEN_DMALLOC_H + +#include + +struct domain; + +#define dzalloc_array(d, _type, _num) \ + ((_type *)_dzalloc_array(d, sizeof(_type), __alignof__(_type), _num)) + + +void dfree(struct domain *d, void *ptr); + +#define DFREE(d, p) \ + do { \ + dfree(d, p); \ + (p) =3D NULL; \ + } while ( 0 ) + + +void *_dzalloc(struct domain *d, size_t size, size_t align); + +static inline void *_dzalloc_array(struct domain *d, size_t size, + size_t align, size_t num) +{ + return _dzalloc(d, size * num, align); +} + +#endif /* XEN_DMALLOC_H */ diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 3e46384a3c..8ed8b55a1e 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -349,6 +349,8 @@ struct domain atomic_t shr_pages; /* shared pages */ atomic_t paged_pages; /* paged-out pages */ =20 + atomic_t dalloc_heap; /* Number of xmalloc-like allocati= ons. */ + /* Scheduling. */ void *sched_priv; /* scheduler-specific data */ struct sched_unit *sched_unit_list; --=20 2.11.0 From nobody Mon Apr 29 05:12:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1608741330; cv=none; d=zohomail.com; s=zohoarc; b=mLdMKpETwoY4Lvz1JfNtEcRQHpANXknlgQgrqpjmlzDLDm0otGNOS/aSGH33NP+410WhYvwnbUzsvk4OzvHbUSfaVyClmf+/I7fr1ih5rurvJEFTLvnntrtX9QlKgaKVT9E7UFtHP7iZfxMAFRWpZbE4zZdyw5D1OELEEzYECfc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608741330; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=p+q+/t4j2DvLAXvJ5Xsyzn6znDVlUSm6Bz9cVm7FNR0=; b=WdhG1Lzls8gj4V1TfcF7gpBKdg9ZadwSqy84lmpdefMV8WppkBJq5t6M3K3WPf47Y+3F/V1HIE+Z6C92QiA6E4YhykfzxL6ENwiIwUu6lbZMPP3NS1Bhm/89Xs9c0bXvMJPewr3UfkhZAGOcJYS0Z+VuoA/dv73l+xvA8Brhq0g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1608741330643263.1699318925955; Wed, 23 Dec 2020 08:35:30 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.58500.102962 (Exim 4.92) (envelope-from ) id 1ks76Z-0000dH-RD; Wed, 23 Dec 2020 16:35:15 +0000 Received: by outflank-mailman (output) from mailman id 58500.102962; Wed, 23 Dec 2020 16:35:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76Z-0000d8-MF; Wed, 23 Dec 2020 16:35:15 +0000 Received: by outflank-mailman (input) for mailman id 58500; Wed, 23 Dec 2020 16:35:14 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76Y-0000XT-GZ for xen-devel@lists.xenproject.org; Wed, 23 Dec 2020 16:35:14 +0000 Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id a3ad9b30-209e-4365-9cc7-725099a7b43b; Wed, 23 Dec 2020 16:35:09 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: a3ad9b30-209e-4365-9cc7-725099a7b43b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1608741309; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CMpXZjooSuf3izRShMQsyPS9IRnkTZlUjBWpT0DP1So=; b=hyMzwOKMxhA7UCo9DlwYJC2DFqp9rSHIDpxPc11vpwMf84PtzBXTncYf XpCP3S7c+Mut+3AKwVu9IGne4AughogITLj/yvfIDSaYa5V+GgisqNzJQ ygLAfEcKNBiwgOq5u6zO8+Cjk/QjEmeZSPI4f39XIWjiGAlpgsGPi2ZiE E=; Authentication-Results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: 4KLhY6pCuhQiyyEWtLF4uW9Mh8tQVFNJ9+5WzDNSLa9nzav2Dps4WOqWJigTKdRvXNSRos3a4s UxB1L2Te3Mp2B6BzUBPZ7/g/KZLzKBDpPOIewPyGCwOG908PeIxFr/IUc84xTZKAvOeuSaXQmt n5yQl8v2A33a+/FRVCgTgQ1REP2EcWbbn9aQCbzgxsQOhPp0YvQquKNycOSipMqgdkwDOT0jdI TIvmyvKIt5B1Mpsp7XdZKd/C6iV/CIB4swA5d4I29r0M5grsAzkRk8C/YwcqY5W71+JJJDviGK mGI= X-SBRS: 5.2 X-MesageID: 34085173 X-Ironport-Server: esa6.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.78,441,1599537600"; d="scan'208";a="34085173" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu , Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Tamas K Lengyel Subject: [PATCH 2/4] xen/evtchn: Switch to dmalloc Date: Wed, 23 Dec 2020 16:34:40 +0000 Message-ID: <20201223163442.8840-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20201223163442.8840-1-andrew.cooper3@citrix.com> References: <20201223163442.8840-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) This causes memory allocations to be tied to domain in question. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu CC: Stefano Stabellini CC: Julien Grall CC: Volodymyr Babchuk CC: Tamas K Lengyel RFC: Likely more to convert. This is just a minimal attempt. --- xen/common/event_channel.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index 4a48094356..f0ca0933e3 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -16,6 +16,7 @@ =20 #include "event_channel.h" =20 +#include #include #include #include @@ -153,7 +154,7 @@ static struct evtchn *alloc_evtchn_bucket(struct domain= *d, unsigned int port) struct evtchn *chn; unsigned int i; =20 - chn =3D xzalloc_array(struct evtchn, EVTCHNS_PER_BUCKET); + chn =3D dzalloc_array(d, struct evtchn, EVTCHNS_PER_BUCKET); if ( !chn ) return NULL; =20 @@ -182,7 +183,7 @@ static void free_evtchn_bucket(struct domain *d, struct= evtchn *bucket) for ( i =3D 0; i < EVTCHNS_PER_BUCKET; i++ ) xsm_free_security_evtchn(bucket + i); =20 - xfree(bucket); + dfree(d, bucket); } =20 int evtchn_allocate_port(struct domain *d, evtchn_port_t port) @@ -204,7 +205,7 @@ int evtchn_allocate_port(struct domain *d, evtchn_port_= t port) =20 if ( !group_from_port(d, port) ) { - grp =3D xzalloc_array(struct evtchn *, BUCKETS_PER_GROUP); + grp =3D dzalloc_array(d, struct evtchn *, BUCKETS_PER_GROUP); if ( !grp ) return -ENOMEM; group_from_port(d, port) =3D grp; @@ -1488,7 +1489,7 @@ int evtchn_init(struct domain *d, unsigned int max_po= rt) write_atomic(&d->active_evtchns, 0); =20 #if MAX_VIRT_CPUS > BITS_PER_LONG - d->poll_mask =3D xzalloc_array(unsigned long, BITS_TO_LONGS(d->max_vcp= us)); + d->poll_mask =3D dzalloc_array(d, unsigned long, BITS_TO_LONGS(d->max_= vcpus)); if ( !d->poll_mask ) { free_evtchn_bucket(d, d->evtchn); @@ -1545,13 +1546,12 @@ void evtchn_destroy_final(struct domain *d) continue; for ( j =3D 0; j < BUCKETS_PER_GROUP; j++ ) free_evtchn_bucket(d, d->evtchn_group[i][j]); - xfree(d->evtchn_group[i]); + dfree(d, d->evtchn_group[i]); } free_evtchn_bucket(d, d->evtchn); =20 #if MAX_VIRT_CPUS > BITS_PER_LONG - xfree(d->poll_mask); - d->poll_mask =3D NULL; + DFREE(d, d->poll_mask); #endif } =20 --=20 2.11.0 From nobody Mon Apr 29 05:12:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1608741330; cv=none; d=zohomail.com; s=zohoarc; b=PlZX6y4igU52YYYe+3SvQ+Zg6hxYK2JGgi9YIfwswTkFl9/hR3I1ymkdiM+UMrjA1usHmJMYn7MoUEwyj4LURfVWcxp6smBT85YZhEGfPj8g8IpiNcxi6gT7BxcENuwShlVUVlKboOoSvqclyf8lzXADsVlz5AuGqCnbiZd0Vq4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608741330; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fi+IAI8cb6nRs9SgtUiEXhJBjeTi7g2n2sTM9sCYTF4=; b=T+5B/5ns4LGM26jlWRJr4FK2JQ1IrrU/tYITlMnAxLEQO5RM5E4fxK/LK4wNBJxwBNHxfqV+4doaSXocjntEe+ldzGyy6K3F+EY23Q+52cYH+PSXNQQO7oUw81u2lyN6qaLXeg8nF+XjMd+/GIeSgfHSqm+Gq4kOiuatELMZBIw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1608741330050613.385250136456; Wed, 23 Dec 2020 08:35:30 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.58499.102949 (Exim 4.92) (envelope-from ) id 1ks76Y-0000ap-9M; Wed, 23 Dec 2020 16:35:14 +0000 Received: by outflank-mailman (output) from mailman id 58499.102949; Wed, 23 Dec 2020 16:35:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76Y-0000ah-6F; Wed, 23 Dec 2020 16:35:14 +0000 Received: by outflank-mailman (input) for mailman id 58499; Wed, 23 Dec 2020 16:35:13 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76X-0000XE-4c for xen-devel@lists.xenproject.org; Wed, 23 Dec 2020 16:35:13 +0000 Received: from esa2.hc3370-68.iphmx.com (unknown [216.71.145.153]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 82065b73-4d16-402a-9a87-7c23b59efd32; Wed, 23 Dec 2020 16:35:08 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 82065b73-4d16-402a-9a87-7c23b59efd32 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1608741308; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=42LWWIePVgGkbX3Yus9uh6xAtV4+wGHkGPht/iiTXv4=; b=d3IJCzKpSYRBh/EBrlOTi0sysJTLn9hALLtbC6AVLQti0Bo31RIoqoIq P6xVbB/6nyPCBD+yCqh2a0y8gXoet8h09sjICAN8agpjMurQBMNjBKCBs nfxsl2mIhsajLTJymLm6QvsTn9uAvKfrYc0mE6PNhysnQkflI6x+KADRM 4=; Authentication-Results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: 3aDH0fJboDmcJbf6DmZfaG4XpFr1I5ipdPzKHgk9P9ywXPB3915v9EjoBreoYaYuz4HLmkPV6h q1GBABUPhd9XylP9+OhOcMqkoIy3T71dOs826xG0Iy3nPEhjyRPJYgRNWrpDd98erssun9eGP3 XES3Fr3R4v9ZjTXaeSMBCwM8XtMtAV8q+cVkeku0Hh33H9DP68hsedrpwhIcsXmalQFSx6Yovv J9UMdJEJ5GT6N0E9NwYBb5dMAbTsQAkM2LG5lqv4MjJLs28rUNq6rkt/QrnIfS2baIY4TPWgSZ des= X-SBRS: 5.2 X-MesageID: 33881652 X-Ironport-Server: esa2.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.78,441,1599537600"; d="scan'208";a="33881652" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu , Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Tamas K Lengyel Subject: [PATCH 3/4] xen/domctl: Introduce fault_ttl Date: Wed, 23 Dec 2020 16:34:41 +0000 Message-ID: <20201223163442.8840-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20201223163442.8840-1-andrew.cooper3@citrix.com> References: <20201223163442.8840-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) To inject a simulated resource failure, for testing purposes. Given a specific set of hypercall parameters, the failure is in a repeatable position, for the currently booted Xen. The exact position of failures is highly dependent on the build of Xen, and hardware support. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu CC: Stefano Stabellini CC: Julien Grall CC: Volodymyr Babchuk CC: Tamas K Lengyel RFC: * Probably wants to be Kconfig'd * I'm thinking of dropping handle from xen_domctl_createdomain because it'= s a waste of valuable space. --- xen/common/dmalloc.c | 8 +++++++- xen/common/domain.c | 8 ++++++-- xen/include/public/domctl.h | 1 + xen/include/xen/sched.h | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/common/dmalloc.c b/xen/common/dmalloc.c index e3a0e546c2..1f5d0f5627 100644 --- a/xen/common/dmalloc.c +++ b/xen/common/dmalloc.c @@ -10,7 +10,13 @@ void dfree(struct domain *d, void *ptr) =20 void *_dzalloc(struct domain *d, size_t size, size_t align) { - void *ptr =3D _xmalloc(size, align); + void *ptr; + + if ( atomic_read(&d->fault_ttl) && + atomic_dec_and_test(&d->fault_ttl) ) + return NULL; + + ptr =3D _xmalloc(size, align); =20 if ( ptr ) atomic_inc(&d->dalloc_heap); diff --git a/xen/common/domain.c b/xen/common/domain.c index 1db1c0e70a..cd73321980 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -427,14 +427,18 @@ struct domain *domain_create(domid_t domid, if ( (d =3D alloc_domain_struct()) =3D=3D NULL ) return ERR_PTR(-ENOMEM); =20 - d->options =3D config ? config->flags : 0; - /* Sort out our idea of is_system_domain(). */ d->domain_id =3D domid; =20 /* Debug sanity. */ ASSERT(is_system_domain(d) ? config =3D=3D NULL : config !=3D NULL); =20 + if ( config ) + { + d->options =3D config->flags; + atomic_set(&d->fault_ttl, config->fault_ttl); + } + /* Sort out our idea of is_control_domain(). */ d->is_privileged =3D is_priv; =20 diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h index 666aeb71bf..aaa3d66616 100644 --- a/xen/include/public/domctl.h +++ b/xen/include/public/domctl.h @@ -48,6 +48,7 @@ /* XEN_DOMCTL_createdomain */ struct xen_domctl_createdomain { /* IN parameters */ + uint32_t fault_ttl; uint32_t ssidref; xen_domain_handle_t handle; /* Is this an HVM guest (as opposed to a PV guest)? */ diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 8ed8b55a1e..620a9f20e5 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -349,6 +349,7 @@ struct domain atomic_t shr_pages; /* shared pages */ atomic_t paged_pages; /* paged-out pages */ =20 + atomic_t fault_ttl; /* Time until a simulated resource= failure. */ atomic_t dalloc_heap; /* Number of xmalloc-like allocati= ons. */ =20 /* Scheduling. */ --=20 2.11.0 From nobody Mon Apr 29 05:12:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1608741324; cv=none; d=zohomail.com; s=zohoarc; b=EtB7jIl0gLUfzOfgy9Sm+DLUYhQf9Pumsb942T/pdlC/vVp5X/HzOJRvD00BtjvW0urKrXGfnhnrUkmSNikmxJA62oKp8rLNqEPBkbjcYZxE6stQoOwzTgsMdqLRNy82VaQEvzuZpN+TsbTgIEcy1JaJ9TdBl8/NtmkRHqIh++8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1608741324; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HfnJjYrWvcnxz6FElszlBhdfXt3ljkQHBjM9qWGK85Y=; b=ZZwmkRgpfqZ3BOlq6zr8TwUr0yglWi7owoSIenK22i26PBvMvFbF09ti0JG7HEDKDnu6vpC3XnJQ3XMazd8h35NO2o6V63UXrTGgSULsR3IFYi+rZxmr67SPmwX+F+GI7bEgUPbmTBPPvBkEjYu6YIonjFBJ/y+ahC1M7AzOkNQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1608741324979738.1984467599681; Wed, 23 Dec 2020 08:35:24 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.58496.102926 (Exim 4.92) (envelope-from ) id 1ks76O-0000Vd-PO; Wed, 23 Dec 2020 16:35:04 +0000 Received: by outflank-mailman (output) from mailman id 58496.102926; Wed, 23 Dec 2020 16:35:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76O-0000VW-M7; Wed, 23 Dec 2020 16:35:04 +0000 Received: by outflank-mailman (input) for mailman id 58496; Wed, 23 Dec 2020 16:35:03 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ks76N-0000VR-Ae for xen-devel@lists.xenproject.org; Wed, 23 Dec 2020 16:35:03 +0000 Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id b8a901d4-b239-4ab3-821f-884361ec54fa; Wed, 23 Dec 2020 16:35:02 +0000 (UTC) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: b8a901d4-b239-4ab3-821f-884361ec54fa DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1608741302; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=J12nue8zO9s1xfEu2GlpYvaW7r0FVfxhrRgoIRus5is=; b=bgpdTXCMu22X0z5pC7SfxjK8QGXdHEGp+de9mgmK5s3oC5Eo17hkqZYN B6XUc2coSGTcrDbE2SCsCrOnwQOXplKtzsNT+gyvRCHX09ep4aXDUIIzH kICIUV15djP+NvQgOdlBJDrRAHHN+2FqvYT0oqnvRg/bH7EBE2SdqB+Ga U=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none IronPort-SDR: 8BUBcM15IGcJTsBlq3qedEFKzHxVzA/I0oq5XV2y2cYzzzjUoH94d8wFpBECH75fjznpvFE9ez i707r9ToS/uy3f0vPpQ7eIfb27+vVWeXAujFWYH1fBbR5O/dWkNZsCFb9YWhZSMnlkX21lY6xb +y4FK9R+6CZ8Rknb+4erqcHbIW3ch0uHrByrJC++bQiKvsOfxQFeVQsysgAHlemBUTy/aEfdUp oQZ8E490HoiFDsI1wzkX6nD283Dl+E4riMQ0YW2gIb8Mh8iQqbUGuD5ic8aEAwVLefSH9f4zJJ Nvk= X-SBRS: 5.2 X-MesageID: 33844236 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.78,441,1599537600"; d="scan'208";a="33844236" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu , Stefano Stabellini , Julien Grall , Volodymyr Babchuk , Tamas K Lengyel Subject: [PATCH 4/4] tools/misc: Test for fault injection Date: Wed, 23 Dec 2020 16:34:42 +0000 Message-ID: <20201223163442.8840-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20201223163442.8840-1-andrew.cooper3@citrix.com> References: <20201223163442.8840-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu CC: Stefano Stabellini CC: Julien Grall CC: Volodymyr Babchuk CC: Tamas K Lengyel RFC: This wants expanding to a few more "default" configurations, and then some thought needs putting torwards automating it. --- tools/misc/.gitignore | 1 + tools/misc/Makefile | 5 +++++ tools/misc/xen-fault-ttl.c | 56 ++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 62 insertions(+) create mode 100644 tools/misc/xen-fault-ttl.c diff --git a/tools/misc/.gitignore b/tools/misc/.gitignore index c5fe2cfccd..8d117c3b7d 100644 --- a/tools/misc/.gitignore +++ b/tools/misc/.gitignore @@ -1 +1,2 @@ +xen-fault-ttl xen-ucode diff --git a/tools/misc/Makefile b/tools/misc/Makefile index 7d37f297a9..5c1ed9a284 100644 --- a/tools/misc/Makefile +++ b/tools/misc/Makefile @@ -9,6 +9,7 @@ CFLAGS +=3D $(CFLAGS_libxenctrl) CFLAGS +=3D $(CFLAGS_libxenguest) CFLAGS +=3D $(CFLAGS_xeninclude) CFLAGS +=3D $(CFLAGS_libxenstore) +CFLAGS +=3D -Wno-declaration-after-statement =20 # Everything to be installed in regular bin/ INSTALL_BIN-$(CONFIG_X86) +=3D xen-cpuid @@ -25,6 +26,7 @@ INSTALL_SBIN-$(CONFIG_X86) +=3D xen-lowmemd INSTALL_SBIN-$(CONFIG_X86) +=3D xen-mfndump INSTALL_SBIN-$(CONFIG_X86) +=3D xen-ucode INSTALL_SBIN +=3D xencov +INSTALL_SBIN +=3D xen-fault-ttl INSTALL_SBIN +=3D xenhypfs INSTALL_SBIN +=3D xenlockprof INSTALL_SBIN +=3D xenperf @@ -76,6 +78,9 @@ distclean: clean xen-cpuid: xen-cpuid.o $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(AP= PEND_LDFLAGS) =20 +xen-fault-ttl: xen-fault-ttl.o + $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(AP= PEND_LDFLAGS) + xen-hvmctx: xen-hvmctx.o $(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) =20 diff --git a/tools/misc/xen-fault-ttl.c b/tools/misc/xen-fault-ttl.c new file mode 100644 index 0000000000..e7953443da --- /dev/null +++ b/tools/misc/xen-fault-ttl.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include + +#include + +int main(int argc, char **argv) +{ + int rc; + xc_interface *xch =3D xc_interface_open(NULL, NULL, 0); + + if ( !xch ) + err(1, "xc_interface_open"); + + struct xen_domctl_createdomain create =3D { + .fault_ttl =3D 1, + .flags =3D (XEN_DOMCTL_CDF_hvm | + XEN_DOMCTL_CDF_hap), + .max_vcpus =3D 1, + .max_evtchn_port =3D -1, + .max_grant_frames =3D 64, + .max_maptrack_frames =3D 1024, + .arch =3D { + .emulation_flags =3D XEN_X86_EMU_LAPIC, + }, + }; + uint32_t domid =3D 0; + + for ( rc =3D 1; rc && errno =3D=3D ENOMEM; create.fault_ttl++ ) + rc =3D xc_domain_create(xch, &domid, &create); + + if ( rc =3D=3D 0 ) + { + printf("Created d%u with fault_ttl of %u\n", domid, create.fault_t= tl); + + xc_domain_destroy(xch, domid); + } + else + printf("Domain creation failed: %d: %s\n", + -errno, strerror(errno)); + + xc_interface_close(xch); + + return 0; +} + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ --=20 2.11.0