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

Re: [PATCH] arm,smmu: match start level of page table walk with P2M


  • To: Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
  • Date: Fri, 2 Oct 2020 10:55:48 +0300
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none
  • 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-SenderADCheck; bh=il+wQHf/vOJMi4/A137ryVjrMt4OuqFJ9IvT4CoF0SQ=; b=l4qWWZD+ietJLg9yn6MDerCyooUz2alyZHN570fdMkFyOLO83OMCUDBjQ6WcgUk7qUcYmeXy0TWN96JEc6Mg9ql5AbyzCX9SfJhKONuV2kPN8QaYL/FLZ11+ANfZib9qrg5g/a0pP2d+UhlAkX1z/l1s9g0NPyvltmdMUhO4PX/WKg2fdXC/nvNlc5eJ+LWGvrX9YluNm4xYhaQ8u5KHVu+eTUt2qHJcVQiiBIjzkWcfn5y5OloMEcnBQ9b8iAE/EeoBLpVri7/9IsKZhJQhhuflFFnBt8neYZL74MMX5HC3Ua8RwRvguGPaKkaEjC6F6tzqDpfmmNH81Q0XrLoVJA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VCbdYdGyjJJ6KAl/Mn4RdmoMrTAL9GMr5/DQeqwzWiuDKHPF7VlMgT6Gjw0QVF+sdwY+PtWcrwWALrZ7v8PKEeIF9zI1y9WUxm5AattcIq1POqoVEAeRAhbiQyaznqPhOWjett9Q9zrEEWvJ/zY4fUoYZR1XCKkJAB7pnyEdjqQRUtEkQrK0nPPP11qmuP4u0tVhC/ryK1BowWN0NSEWF/7MkkJNvMKeCKzcCW2KHBV+isUUkEFTFyxJ94e+VsdRPizkXPVaEtTm1pqHjzc6mUWZnL05POhdgqKYMlAgQDjlRK8fbRaYS8Vjm9ONLv1PyHnqVuahS4PWclGn1mzr9A==
  • Authentication-results: nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=nxp.com;
  • Cc: julien@xxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx, Volodymyr_Babchuk@xxxxxxxx, will@xxxxxxxxxx, diana.craciun@xxxxxxx, anda-alexandra.dorneanu@xxxxxxx
  • Delivery-date: Fri, 02 Oct 2020 07:55:56 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>


On 10/2/2020 2:52 AM, Stefano Stabellini wrote:
> On Mon, 28 Sep 2020, laurentiu.tudor@xxxxxxx wrote:
>> From: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
>>
>> Don't hardcode the lookup start level of the page table walk to 1
>> and instead match the one used in P2M. This should fix scenarios
>> involving SMMU where the start level is different than 1.
>>
>> Signed-off-by: Laurentiu Tudor <laurentiu.tudor@xxxxxxx>
> 
> Thank you for the patch, I think it is correct, except that smmu.c today
> can be enabled even on arm32 builds, where p2m_root_level would be
> uninitialized.
> 
> We need to initialize p2m_root_level at the beginning of
> setup_virt_paging under the #ifdef CONFIG_ARM_32. We can statically
> initialize it to 1 in that case. Or...
> 
> 
>> ---
>>  xen/arch/arm/p2m.c                 | 2 +-
>>  xen/drivers/passthrough/arm/smmu.c | 2 +-
>>  xen/include/asm-arm/p2m.h          | 1 +
>>  3 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
>> index ce59f2b503..0181b09dc0 100644
>> --- a/xen/arch/arm/p2m.c
>> +++ b/xen/arch/arm/p2m.c
>> @@ -18,7 +18,6 @@
>>  
>>  #ifdef CONFIG_ARM_64
>>  static unsigned int __read_mostly p2m_root_order;
>> -static unsigned int __read_mostly p2m_root_level;
>>  #define P2M_ROOT_ORDER    p2m_root_order
>>  #define P2M_ROOT_LEVEL p2m_root_level
>>  static unsigned int __read_mostly max_vmid = MAX_VMID_8_BIT;
>> @@ -39,6 +38,7 @@ static unsigned int __read_mostly max_vmid = 
>> MAX_VMID_8_BIT;
>>   * restricted by external entity (e.g. IOMMU).
>>   */
>>  unsigned int __read_mostly p2m_ipa_bits = 64;
>> +unsigned int __read_mostly p2m_root_level;
> 
> ... we could p2m_root_level = 1; here
> 

This looks straight forward and in line with what we do with
p2m_ipa_bits, I'll send a v2 right away.

Thanks for the review.

---
Best Regards, Laurentiu

>>  /* Helpers to lookup the properties of each level */
>>  static const paddr_t level_masks[] =
>> diff --git a/xen/drivers/passthrough/arm/smmu.c 
>> b/xen/drivers/passthrough/arm/smmu.c
>> index 94662a8501..85709a136f 100644
>> --- a/xen/drivers/passthrough/arm/smmu.c
>> +++ b/xen/drivers/passthrough/arm/smmu.c
>> @@ -1152,7 +1152,7 @@ static void arm_smmu_init_context_bank(struct 
>> arm_smmu_domain *smmu_domain)
>>            (TTBCR_RGN_WBWA << TTBCR_IRGN0_SHIFT);
>>  
>>      if (!stage1)
>> -            reg |= (TTBCR_SL0_LVL_1 << TTBCR_SL0_SHIFT);
>> +            reg |= (2 - p2m_root_level) << TTBCR_SL0_SHIFT;
>>  
>>      writel_relaxed(reg, cb_base + ARM_SMMU_CB_TTBCR);
>>  
>> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
>> index 5fdb6e8183..97b5eada2b 100644
>> --- a/xen/include/asm-arm/p2m.h
>> +++ b/xen/include/asm-arm/p2m.h
>> @@ -12,6 +12,7 @@
>>  
>>  /* Holds the bit size of IPAs in p2m tables.  */
>>  extern unsigned int p2m_ipa_bits;
>> +extern unsigned int p2m_root_level;
>>  
>>  struct domain;
>>  
>> -- 
>> 2.17.1
>>



 


Rackspace

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