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

Re: Need guidance to support reading GICR_TYPER (64 bit register) on Aarch32_v8r


  • To: Julien Grall <julien@xxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Mon, 17 Oct 2022 09:52:00 +0000
  • Accept-language: en-GB, 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=c7fIctafsmzH1UfMVRSQkdOlGHKdJJ8GrFavTfzm+GQ=; b=Kc7BmsuHOC3swIQ6zLkEMC1q8lOgNrJ0elpnarpyYsE64gLv69nXp/8Mc1MjXm03EbOBJfdyUwoOn+wnMyn/OP2Vq7h1JgpXG63FNfZcI7ufjzvzHEThE4n9iXxs8bb8SmjYM60sSWeDcsEc4x52cOKf6HT+tVOl5gdpqQgdj2sipSyiGdifIeIFejjnv4X0zHpgcZEQnZLuTt431jhSs4Al3vtjnafqd1OK+nHEOesWaH+RGPdQuNicFwPORd8mut1eFylXYEJe4UZmOJPK/VMPfFyrtaHVeX/ld6NzopWGPoehDgg3M98RROHSzn12xjZJx8lS/QleZSuW8lRt3g==
  • 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=c7fIctafsmzH1UfMVRSQkdOlGHKdJJ8GrFavTfzm+GQ=; b=Q21e55cHZwmAy4v+KB1+trt40WIUP6j5w/d8aru2Gjf56qHqMyRk6TskzvfuzJZRKzbRHpcn2a6bL3uaGr5chkvrl/qg0tEF0uZTME+yc9qAozbTW+j41pkCOtFfsaJjSnwgdZ57COcXZNhyw256XP5D3UCrXzTs55/r0Wf6PrQr0t/ewa/KUjnZzJ6GH/eIlw6tbXaNtTf5eq1O/db1UBnmy8qpTlFXC1lyTNtgpzPbI5/FG5X27Mf8Z5tPP6G/Ypn1o+2b8vZWgW0VIQFA0DAolMZFMpXAotixurG+lhmULaDYHK90uMenoMv5ehBlA2cQ2j7jLQ/X6O8VD2745g==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=hMJaHYGRtBUkovyMpfVZDFeD0/BNHYush0dxLyuE7Pews5JuJd+rh1pCV/jh01iKqGwYKHV6oFdSwQvIQ57SA+z7RtH4fmoi5Him3CiumD8dvu9nkDIKSpyLhMNNMkKwYuq3/oh8xKNPEz4o+rueI59i/bdbKmNCvub3rn2YXdfD00+1z44plVyUZ+4YqJdDTgFKAgvGMSBAFzG5yJ5M3FdZxaS3TEwKAfW+RlxFFNiL7KdY+ausTTq5AVHUQ/6YtPyfPAJm4SNIrqTNKptbbakpGAGLULA59bH40wEkKsCTiYGwWJ7V6RhFudpMKC8FdiHus6iz6GUPxI4Ocvl6Bw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cH/4c6vZ/cf5s4qI9I7h8ITl+jbpk7SOrgrQEsOktimvTDaWLjfdV6zESDdzU/6jHiFNHICRRk2zFR6mFFi6Wcm0oe+AjyIYrPyurU15wNhLKX7buX9q6CRAw8coxjKsWFBSMOs+mqiSLN0/rmSiudTDDfhaSb8oXKM1cN15StneCHYngUOoyLCGdJOHPbmtmIHLuKqJ8m8tsksQvhsdJufvk8vFIZexZmx6ZaiVnZxH0TnIrRzlLT93VahXLNYUFmRoEDovvtRpiauEZkbU35AEx3PdxT/26os+riwD1/ETjdIoPLh9WFBXOx0TXabiM1/GrtJxzqpEcBtCutTSpA==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Ayan Kumar Halder <ayankuma@xxxxxxx>, "Stabellini, Stefano" <stefano.stabellini@xxxxxxx>, "Volodymyr_Babchuk@xxxxxxxx" <Volodymyr_Babchuk@xxxxxxxx>, Henry Wang <Henry.Wang@xxxxxxx>, Penny Zheng <Penny.Zheng@xxxxxxx>, Jaxson Han <Jaxson.Han@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 17 Oct 2022 09:52:28 +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: AQHY3vmtdKYr9F2nyUuznJvSQYcvHq4OMlaAgAEAmYCAAyG8AIAAAqcAgAAG7YA=
  • Thread-topic: Need guidance to support reading GICR_TYPER (64 bit register) on Aarch32_v8r


> On 17 Oct 2022, at 10:27, Julien Grall <julien@xxxxxxx> wrote:
> 
> 
> 
> On 17/10/2022 10:17, Bertrand Marquis wrote:
>> Hi,
> 
> Hi,
> 
>>> On 15 Oct 2022, at 10:28, Julien Grall <julien@xxxxxxx> wrote:
>>> 
>>> Hi Stefano,
>>> 
>>> On 14/10/2022 19:09, Stefano Stabellini wrote:
>>>> On Thu, 13 Oct 2022, Ayan Kumar Halder wrote:
>>>>> Hi Arm mantainers/Folks,
>>>>> 
>>>>> Please refer to the discussion
>>>>> https://github.com/zephyrproject-rtos/zephyr/pull/51163 .
>>>>> 
>>>>> We intend to run Zephyr as a domU guest on Xen on Aarch32_v8R fixed 
>>>>> virtual
>>>>> platform.
>>>>> 
>>>>> Zephyr is trying to read GICR_TYPER which is a 64 bit register using ldrd
>>>>> instruction.
>>>>> 
>>>>> As GICR is emulated by Xen, so this instruction gets trapped with HSR =
>>>>> 0x9200000c.
>>>>> 
>>>>> As ISV is 0, so Xen cannot emulate this instruction.
>>>>> 
>>>>> The proposed solution is to use two sys_read32() on GICR_TYPER to return 
>>>>> the
>>>>> lower and upper 32 bits.
>>>>> 
>>>>> With this, HSR = 0x9383 000c, ISV=1 so ISS is valid.
>>>> Hi all,
>>>> I wanted to take a step back on this issue before we jump into the
>>>> details.
>>>> Differently from other instructions we discussed in the past, strd and ldrd
>>>> are not deprecated and are not "unusual corner cases". There is no
>>>> statements such as "please don't use this" on the ARM ARM. If I were to
>>>> write an register read/write function in assembly for an RTOS, it would
>>>> be reasonable to use them.
>>> 
>>> Just to be clear it is fine to use the ldrd/strd for accessing non MMIO 
>>> area. The problem comes with MMIO access because they can be emulated by 
>>> the hypervisor and we don't have the syndrome. At the moment, this is only 
>>> a problem when accessing some of the GICv3 (including ITS) registers.
>>> 
>>>> So, I struggle to see how we'll be able to deal with all the possible
>>>> RTOSes out there that might have them in the code. We can fix Zephyr,
>>>> but what about FreeRTOS, ThreadX and the proprietary ones (VxWorks,
>>>> etc.)?
>>> 
>>> This is not an Xen issue but architecture issue. The RTOSes will face the 
>>> exact same issue on any hypervisors unless they decided to decode the 
>>> instruction.
>>> 
>>> As we discussed before decoding an instruction correctly is quite difficult 
>>> to do (what we have in Xen for pos-increment store/load is just a 
>>> band-aid). So I would expect the other hypervisors to have made the 
>>> decision to not implement it. AFAIK KVM doesn't suppor them,
>>> Note that looking at ID_ISAR2, it seems that ldrd/strd is technically 
>>> optional. Therefore, the RTOS would have to assume it is targeting a 
>>> processor that supports them.
>>> 
>>>> Unless we can get ARM to issue a clear guidance that strd and ldrd are
>>>> deprecated,
>>> 
>>> Arm Arm cannot say that because ldrd/strd are necessary to modify the LPAE 
>>> page-tables atomically. What we need to know is which instructions can be 
>>> allowed on MMIO accesses.
>> Definitely this is something that arm arm cannot fully answer as it is also 
>> down to the full platform. MMIO accesses are going out of the CPU and hence 
>> wether or not 64bit MMIO accesses can be properly done might also depend on 
>> the bus or the IP on the other side (some peripherals might just refuse 
>> 64bit accesses or some bus might only be 32bit so the operations would need 
>> to be divided).
>>> 
>>> I think I already raised that when Ayan added decoding for post-increment 
>>> instructions. There are plenty of instructions (or combinations) that 
>>> doesn't provide a syndrome and yet the processor doesn't prevent anyone to 
>>> use them on MMIO.
>>> 
>>> I was worry we are going to have to continue to decode instructions in a 
>>> non-compliant way in Xen just to please a few RTOs that may not even run 
>>> anywhere else.
>>> 
>>> This would also reduce our leverage to request a change in the RTOes or the 
>>> Arm Arm (maybe there is already a statement I haven't spotted) because Xen 
>>> will already (badly) support the instruction.
>> Going back on the ID_ISAR2, if Xen is properly setting the value seen by the 
>> guests, there is not reason for us to actually emulate those instructions.
>> The emulation code inside Xen cost a lot in matter of lines of code and 
>> would need a lot of testing (which is missing at the moment).
>> So as we have a standard way to inform the guest that this is not supported, 
>> we should stick to that.
> 
> Thanks for the feedback. AFAIU, the bit in ID_ISAR2 indicates whether 
> ldrd/strd is present. If we decide to clear the bit, then it would mean the 
> guest should not use them even when modifying LPAE page-tables.
> 
> This could be a problem because AFAIK those instructions are necessary to 
> modify the page-tables atomically. Therefore, I don't Xen should clear the 
> bit.

Agree

> 
> Cheers,
> 
> -- 
> Julien Grall




 


Rackspace

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