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

RE: [PATCH v6 07/11] xen/arm: implement FIXMAP_ADDR for MPU systems


  • To: Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Wei Chen <Wei.Chen@xxxxxxx>
  • Date: Wed, 9 Nov 2022 06:46:57 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org 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=armh.onmicrosoft.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=arcselector9901; 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=7x/UmCsr55BDJBfCWaiNONnWpVNM5XpYkxIp9xvm7jA=; b=TDBhK0hrN+dqV5SvgdFGbp8M/KFysfoDqPBaKn/0N8MBoesGHvZuY4tLZt2TnAR6nNNwgu7jl/XzuKe1V3N9Wb9ZF/0E2ZkBJMt3gM1Q/cWk1iLBgQUcOnC1xKQhk8QJDz8IIAzKHvIx4jXumHJ+DXJWQrMX6LmmSKsCikE7PxHhShaS8QwsI/YAoNeIp7MrEJz+u6Nor3XRSozdAu/A4tw6F25GTEnVN6H+NW6mdKDcHD3egUMxPe2HzCNqLCUr5lNsAgSuonOOnQ5KAVi1FSI/MaAnKRD/kjuP+/Zk2hj+daYrOjMyB5nX9s9/Vhf/nUO3jufWIaHDMRtcCOpqag==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=7x/UmCsr55BDJBfCWaiNONnWpVNM5XpYkxIp9xvm7jA=; b=dpMaszCxqhGqv5nZQRV2lnHxE2c2xwTA8s+RVNTFIvQ7tIj1C93cOJiWMusjvChc9jsv471JX29kz0CUMaQHWimKT8YwnWHsdJAAHB2ThgubO17Qiox2kPzxCu+O0pcJISWw2SrgW3AIj85YkkcNtD+lzDN9GA7z2BYAJkRrF/k0OYDL95NkqEWG7njE9zpq9ZsVWU5YJkFoTPhS3ukHKLG+xW9q2qq06oqzR3mHMdwEKSdXl2hygLQMGzqY03XL57+OiuFL3HDr+OLEMwOARis4j8yA04XQkvf7jF1QOA2qKu/Zs+LSHoR/iaoxknuqxH7ZpdpYV5o8PyeSlOsurg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=Yuo6Wp/dpTShKuLKPcUHaFWCglsH64b3ZFGuRWvYBUHmtoy81nBTwpGH9zivi2NBsjytUahzhYBI/1U2uigjqHeJzdiTNL/PXRZY2VXbveyIsRVJ0EN9x0QDxPnjPnDN59MOUj+CQkwPS36yH38JSPlYLnoR8l97InLTibrRoz7maMqSIQSAZnPvN7Gmg8MybB30XWTThkeVrNw6r3tHeht3a+kD+2aO4p+GeOxn0ZYFPDeq1PmHenpnyvL5ja0SZDsAitB6y5M48om20KHnaiVSlOJyaVYG/gxne0RsVV5BKy91GNklzX+96yu/z/j8x6T6Yy+ffUTnVahdQ3VU9Q==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ODITASiIU9i0ghGswYBKJfwhwZQc0S4DAzp665L57o1UhpwWLUMYErJqa7kBpbjv4rB0Zt52jpXjwlnJPXTwAPvKD1ZSL9t7FCnYIHksFFdlic7h1AtZFGnxwkKMPPCdZBn1wNFe2IcyeKalNekC7n7IZ6NUTDG3fj3R6HZmqGdPPpFaaLp2P1r2WA/n/mZT1SOSKbDzXIHGnizok2INs2R+2vxDfpBxuZokUtsNdzDoTk2BcvxfqZktClfUB+DhITC4G8FUVkMCoghqZdC1XmP6c5cZYY2ObQX6l82W4g81x21b24fXpy9uqGLyePaCw6qw5PozqIaQOA8m/Zy0ag==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: nd <nd@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 09 Nov 2022 06:47:35 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHY8DVneLUTj6n4XEmKaYaqtg988K4yT/yAgAPcKRA=
  • Thread-topic: [PATCH v6 07/11] xen/arm: implement FIXMAP_ADDR for MPU systems

Hi Julien,

> -----Original Message-----
> From: Julien Grall <julien@xxxxxxx>
> Sent: 2022年11月7日 3:45
> To: Wei Chen <Wei.Chen@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: nd <nd@xxxxxxx>; Stefano Stabellini <sstabellini@xxxxxxxxxx>; Bertrand
> Marquis <Bertrand.Marquis@xxxxxxx>; Volodymyr Babchuk
> <Volodymyr_Babchuk@xxxxxxxx>
> Subject: Re: [PATCH v6 07/11] xen/arm: implement FIXMAP_ADDR for MPU
> systems
> 
> Hi Wei,
> 
> On 04/11/2022 10:07, Wei Chen wrote:
> > FIXMAP is a special virtual address section for Xen to map some
> > physical ram or device memory temporarily in initialization for
> > MMU systems. FIXMAP_ADDR will return a virtual address by index
> > for special purpose phys-to-virt mapping usage. For example,
> > FIXMAP_ADDR(FIXMAP_CONSOLE) for early console mapping and
> > FIXMAP_ADDR(FIXMAP_MISC) for copy_from_paddr.
> 
> To me, we are bending quite a bit the definition of the fixmap. There
> are not many use of the FIXMAP within the code and I think it would
> simply be better to abstract the use (or removing it when possible) and
> avoid defining FIXMAP_ADDR() & co for MPU.
> 

I agree, if we don't mind to add some CONFIG_HAS_MPU in some generic code. 
I also prefer this way. Frankly, I really think FIXMAP is awkward in MPU
System.

> >
> > But in MPU systems, we can't map physical address to any virtual
> > address. So we want the code that is using FIXMAP_ADDR to return
> > the input physical address in MPU systems. So in MPU version,
> > FIXMAP_ADDR will trim physical address to PAGE alignment. This
> > will return an offset which is similar to MMU version FIXMAP_ADDR.
> > But it's a physical offset got from input physical address, plus
> > to an offset inside page (which is also got from physical address
> > mask with PAGE_MASK). The caller can return the input physical
> > address directly.
> >
> > As pmap depends on FIXAMP, so we disable pmap for Arm with MPU
> > enabled systems.
> >
> > Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
> > ---
> >   xen/arch/arm/Kconfig                  |  2 +-
> >   xen/arch/arm/include/asm/config_mpu.h |  2 ++
> >   xen/arch/arm/include/asm/fixmap.h     | 25 +++++++++++++++++++++++++
> >   3 files changed, 28 insertions(+), 1 deletion(-)
> >
> > diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
> > index ac276307d6..1458ffa777 100644
> > --- a/xen/arch/arm/Kconfig
> > +++ b/xen/arch/arm/Kconfig
> > @@ -16,7 +16,7 @@ config ARM
> >     select HAS_DEVICE_TREE
> >     select HAS_PASSTHROUGH
> >     select HAS_PDX
> > -   select HAS_PMAP
> > +   select HAS_PMAP if !HAS_MPU
> 
> I can't find any change of mm.c in this series. So surely this will
> break the build?

Yes, in our internal testing, open PMAP for MPU will cause building
failed, except we add some new stubs for MPU system.

> 
> >     select IOMMU_FORCE_PT_SHARE
> >
> >   config ARCH_DEFCONFIG
> > diff --git a/xen/arch/arm/include/asm/config_mpu.h
> b/xen/arch/arm/include/asm/config_mpu.h
> > index 530abb8302..eee60dcffc 100644
> > --- a/xen/arch/arm/include/asm/config_mpu.h
> > +++ b/xen/arch/arm/include/asm/config_mpu.h
> > @@ -24,4 +24,6 @@
> >
> >   #define HYPERVISOR_VIRT_START  XEN_VIRT_START
> >
> > +#define FIXMAP_ADDR(n)         (_AT(paddr_t, n) & (PAGE_MASK))
> > +
> >   #endif /* __ARM_CONFIG_MPU_H__ */
> > diff --git a/xen/arch/arm/include/asm/fixmap.h
> b/xen/arch/arm/include/asm/fixmap.h
> > index d0c9a52c8c..1e338759e9 100644
> > --- a/xen/arch/arm/include/asm/fixmap.h
> > +++ b/xen/arch/arm/include/asm/fixmap.h
> > @@ -7,6 +7,8 @@
> >   #include <xen/acpi.h>
> >   #include <xen/pmap.h>
> >
> > +#ifndef CONFIG_HAS_MPU
> > +
> >   /* Fixmap slots */
> >   #define FIXMAP_CONSOLE  0  /* The primary UART */
> >   #define FIXMAP_MISC     1  /* Ephemeral mappings of hardware */
> > @@ -45,4 +47,27 @@ static inline unsigned int virt_to_fix(vaddr_t vaddr)
> >
> >   #endif /* __ASSEMBLY__ */
> >
> > +#else
> > +
> > +/*
> > + * FIXMAP_ADDR will trim physical address to PAGE alignment.
> > + * This will return an offset which is similar to MMU version
> > + * FIXMAP_ADDR.
> > + * For example:
> > + * EARLY_UART_VIRTUAL_ADDRESS is defined by:
> > + *     (FIXMAP_ADDR(FIXMAP_CONSOLE) + \
> > + *     (CONFIG_EARLY_UART_BASE_ADDRESS & ~PAGE_MASK))
> > + * With MPU version FIXMAP_CONSOLE and FIXMAP_ADDR definitions,
> > + * EARLY_UART_VIRTUAL_ADDRESS can be restore to
> > + * CONFIG_EARLY_UART_BASE_ADDRESS.
> > + * In this case, we don't need to use #ifdef MPU in the code
> > + * where are using FIXMAP_ADDR to make them to use physical
> > + * address explicitily.
> > + */
> > +#ifdef CONFIG_EARLY_UART_BASE_ADDRESS
> > +#define FIXMAP_CONSOLE         CONFIG_EARLY_UART_BASE_ADDRESS
> > +#endif
> > +
> > +#endif /* CONFIG_HAS_MPU */
> > +
> >   #endif /* __ASM_FIXMAP_H */
> 
> Cheers,
> 
> --
> Julien Grall

 


Rackspace

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