[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v5 3/3] arm/mpu: Implement p2m tables


  • To: "Orzel, Michal" <Michal.Orzel@xxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Mon, 11 May 2026 10:39:37 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=amd.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JgJDG/5mgcxmN6oUqi5VaSKghnPgVzUskTU5CM0QXBY=; b=OHj2pzH0PiYxul5lrUJbEDPRARzmwXnrFnkAN/dkVcx3kg2pdZOx/hCfoGsHQ/ZrTg+04sfklPbrQrkVFK+On5iIto3XGbbsI0xo1K9b9JBZonfQN3ieFde+6OEHyHyIf1tvSi4UVPo8mu9U+mpMPnQ1JQN1uQyCUs9xVff+R/88DzQPu2DnTTa/coBh4emp+tRppwqtIawF4G7zUJiIL+Rq40Wh1HzThoGFQjk4pb8mWlpJJpM632R7aIM95GEWX64DFOMtJ1N5wxpPl2iNnrC1UjZr9ZpwYzQriykZVu09EUIGiY8e9RclDMDM/wwW2/7R/ASjZweEbe8o2lzcMA==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JgJDG/5mgcxmN6oUqi5VaSKghnPgVzUskTU5CM0QXBY=; b=nenKPSvEYwUalweBnXPkBgy0rCAGDQ1/7Q48LR+uJlLmsGlM5xZ0nQJQ3P9/3FSdMaFdDKDQGs7upIzd0JpCqEIcm903V68oC3ovzd8Q6kXytKvwwIaYLaN6GeOStCMqROqkY3BuWcBeWjWovlJHZ7DAU3BaDygFzhFElKAuMTYa5rRLLxs9kqM1rgTP7n7MLYhWoK9zFHf2TRCj4tn83uBDSpKK82txgmU8YcqWwonwVQeDnMpC7BNM9iRR4lZu4VWcLxHbf96hrFLjwr8/aCTA5bRwxDuWZ9b3EddpoUt4j5l+cTvDzHe5AsCBMpsfzqrwG/DGnDwhbji0/1RTfg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=SEEMIO0ytTT9Lp6NuFQzrkaQ+B9Ntk4KhvfFApZokBOJMkwBeMGHfQhfJD6mQR7x1MNjm/tchEZ45SSfWLLd8NUMM040MnFfWrzeei70Rr6rhQaJiqJ4cqYRSu7Xy2xCa9SqWq/eD64Kqe+F8ELozRGiEEKfS+LBWUL0TSgNguLxgW0l0yyPLe//PJu+D4c7U+dWgLGjfLn8C1b/NADhpNhSMQtbatr9/xCXutJ6uTmLEK0ohs6wanzIAAdCZwt1TqbswRDC+anTqLyvIfKejTE1v8yBuQN/D8+bthRFg2hlE6rMZcfS57KYr+sfpIiBKH+pZ50voyWQy9DK73egJw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ls1VG1c/t7wbh7+f4aUZl++LmtLPz2r/rSk6CgvMiBCosRc8vhgDl2ZRtSNcoO0Gmr6rR6uV6VyEbQFwdQL/IfpjUuA+9OfIYxAiG2GOw6uBjxIEwUw6mWcm2/SLbRYZNsYP/qrE55zMAFgmn+Wuqp5bfopt2aiXWRJZenihqdZbX340JwpFuBSU9M0uu8GG/3kjKTe/X+cV0L3Zd8jxwfoDoDgR1fOYmhySNK1bVRsQoWa2bIUzx4R24i8ZuGE8uhqIQXuuGoKIm/eJNhspjtzwuFH2fw//4rMOPWDAE4SpZ3z++CoJLF89NQpN4b2ALwQUdZxpXQX5Z5HTd9m3pg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Harry Ramsey <Harry.Ramsey@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Mon, 11 May 2026 10:40:54 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHc3vfIzyH7Owu7tEuG8ufNQ6r2lLYIphwAgAAAvoA=
  • Thread-topic: [PATCH v5 3/3] arm/mpu: Implement p2m tables

Hi Michal,


>> diff --git a/xen/arch/arm/include/asm/mpu/p2m.h 
>> b/xen/arch/arm/include/asm/mpu/p2m.h
>> index e46d9e757a1d..0d4149c71987 100644
>> --- a/xen/arch/arm/include/asm/mpu/p2m.h
>> +++ b/xen/arch/arm/include/asm/mpu/p2m.h
>> @@ -3,8 +3,15 @@
>> #ifndef __ARM_MPU_P2M_H__
>> #define __ARM_MPU_P2M_H__
>> 
>> +#include <xen/bitops.h>
>> +#include <xen/macros.h>
>> +#include <xen/page-size.h>
>> +
>> struct p2m_domain;
>> 
>> +#define P2M_ROOT_PAGES DIV_ROUND_UP(MAX_MPU_REGION_NR * sizeof(pr_t), 
>> PAGE_SIZE)
> You should include mpu.h for MAX_MPU_REGION_NR definition

right, I’ll include

> 
>> +#define P2M_ROOT_ORDER get_count_order(P2M_ROOT_PAGES)
>> +
>> static inline void p2m_clear_root_pages(struct p2m_domain *p2m) {}
>> 
>> static inline void p2m_tlb_flush_sync(struct p2m_domain *p2m) {}
>> diff --git a/xen/arch/arm/include/asm/p2m.h b/xen/arch/arm/include/asm/p2m.h
>> index 010ce8c9ebbd..ed1b6dd40f40 100644
>> --- a/xen/arch/arm/include/asm/p2m.h
>> +++ b/xen/arch/arm/include/asm/p2m.h
>> @@ -48,8 +48,13 @@ struct p2m_domain {
>>     /* Current VMID in use */
>>     uint16_t vmid;
>> 
>> +#ifdef CONFIG_MMU
>>     /* Current Translation Table Base Register for the p2m */
>>     uint64_t vttbr;
>> +#else
>> +    /* Current Virtualization System Control Register for the p2m */
>> +    register_t vsctlr;
>> +#endif
>> 
>>     /* Highest guest frame that's ever been mapped in the p2m */
>>     gfn_t max_mapped_gfn;
>> diff --git a/xen/arch/arm/mpu/p2m.c b/xen/arch/arm/mpu/p2m.c
>> index f7fb58ab6aa8..8d5c65b1003f 100644
>> --- a/xen/arch/arm/mpu/p2m.c
>> +++ b/xen/arch/arm/mpu/p2m.c
>> @@ -28,10 +28,63 @@ void p2m_dump_info(struct domain *d)
>>     BUG_ON("unimplemented");
>> }
>> 
>> +static int p2m_alloc_table(struct domain *d)
>> +{
>> +    struct p2m_domain *p2m = p2m_get_hostp2m(d);
>> +    char *table = alloc_xenheap_pages(P2M_ROOT_ORDER, 0);
> Why char and not void? We use void and pointer arithmetic is done by treating
> the size of a void as 1.

I did it on purpose since it’s a compiler extension, but if you say it’s ok 
I’ll change it to void.

>> +    unsigned int i;
>> +
>> +    if ( !table )
>> +    {
>> +        printk(XENLOG_G_ERR "%pd: p2m: unable to allocate P2M MPU mapping 
>> table\n",
>> +               d);
>> +        return -ENOMEM;
>> +    }
>> +
>> +    p2m->root = virt_to_page(table);
>> +
>> +    for ( i = 0; i < P2M_ROOT_PAGES; i++ )
>> +        clear_page(table + (i * PAGE_SIZE));
>> +
>> +    return 0;
>> +}
>> +
>> int p2m_init(struct domain *d)
>> {
>> -    BUG_ON("unimplemented");
>> -    return -EINVAL;
>> +    struct p2m_domain *p2m = p2m_get_hostp2m(d);
>> +    int rc = 0;
>> +    unsigned int cpu;
>> +
>> +    rwlock_init(&p2m->lock);
>> +
>> +    p2m->vmid = INVALID_VMID;
>> +    p2m->max_mapped_gfn = _gfn(0);
>> +    p2m->lowest_mapped_gfn = _gfn(ULONG_MAX);
>> +
>> +    p2m->default_access = p2m_access_rwx;
>> +    /* mem_access is NOT supported in MPU system. */
> s/in/on

will fix

> 
> With the above fixed:
> Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>

Thanks!

Cheers,
Luca


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.