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

Re: [PATCH v2] xen/riscv: add H extenstion to -march


  • To: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Tue, 25 Mar 2025 14:47:08 +0100
  • Autocrypt: addr=jbeulich@xxxxxxxx; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Alistair Francis <alistair.francis@xxxxxxx>, Bob Eshleman <bobbyeshleman@xxxxxxxxx>, Connor Davis <connojdavis@xxxxxxxxx>, Milan Djokic <milandjokic1995@xxxxxxxxx>, Slavisa Petrovic <Slavisa.Petrovic@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Tue, 25 Mar 2025 13:47:19 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 25.03.2025 14:02, Oleksii Kurochko wrote:
> 
> On 3/25/25 12:52 PM, Jan Beulich wrote:
>> On 25.03.2025 12:48, Oleksii Kurochko wrote:
>>> On 3/24/25 1:31 PM, Jan Beulich wrote:
>>>> On 21.03.2025 17:17, Oleksii Kurochko wrote:
>>>>> H provides additional instructions and CSRs that control the new stage of
>>>>> address translation and support hosting a guest OS in virtual S-mode
>>>>> (VS-mode).
>>>>>
>>>>> According to the Unprivileged Architecture (version 20240411) 
>>>>> specification:
>>>>> ```
>>>>> Table 74 summarizes the standardized extension names. The table also 
>>>>> defines
>>>>> the canonical order in which extension names must appear in the name 
>>>>> string,
>>>>> with top-to-bottom in table indicating first-to-last in the name string, 
>>>>> e.g.,
>>>>> RV32IMACV is legal, whereas RV32IMAVC is not.
>>>>> ```
>>>>> According to Table 74, the h extension is placed last in the one-letter
>>>>> extensions name part of the ISA string.
>>>>>
>>>>> `h` is a standalone extension based on the patch [1] but it wasn't so
>>>>> before.
>>>>> As the minimal supported GCC version to build Xen for RISC-V is 12.2.0,
>>>>> and for that version it will be needed to encode H extensions instructions
>>>>> explicitly by checking if __risv_h is defined.
>>>> Leaving aside the typo, what is this about? There's no use of __riscv_h in
>>>> the patch here, and ...
>>> It is going to be used in future 
>>> patches:https://gitlab.com/xen-project/people/olkur/xen/-/blob/riscv-next-upstreaming/xen/arch/riscv/p2m.c?ref_type=heads#L32
>> For this and ...
>>
>>>>> @@ -25,10 +24,13 @@ $(eval $(1) := \
>>>>>           $(call as-insn,$(CC) $(riscv-generic-flags)_$(1),$(value 
>>>>> $(1)-insn),_$(1)))
>>>>>    endef
>>>>>    
>>>>> +h-insn := "hfence.gvma"
>>>>> +$(call check-extension,h)
>>>> ... this, if it fails, will not have any effect on the build right now
>>>> afaics.
>>> No, it won't have any affect now as instruction from H extension isn't used 
>>> now.
>>> But it will be 
>>> neededforhttps://lore.kernel.org/xen-devel/dae753618491b2a6e42f7ed3f24190d0dc13fe3f.1740754166.git.Slavisa.Petrovic@xxxxxxxxx/
>>> and for p2m changes mentioned above.
>> ... this both being future work, it might help if it could be made clear
>> right here how things are going to work (with both gcc12 and up-to-date
>> gcc).
> 
> I can update the commit message with the following:
> ```
> If 'H' extension is supported by compiler then __riscv_h will be defined by
> compiler (for gcc version >= 13.1).
> For gcc12 it will be needed to:
> #ifdef __riscv_h
>   asm volatile ("h extension instruction");
> #else
>   asm volatile ("|.insn ..."); #endif ```

Okay, that's what I was concerned about. __riscv_h is a compiler indication.
It means nothing about H extension insns being supported by the assembler
(except perhaps for Clang's integrated one). The check-extension thing in
the Makefile will actually check both in one go. Yet then the hfence.* insns
have been in binutils since 2.38, i.e. pre-dating gcc12.

> Or probably it will be easier not to ifdef-ing 
> everything with __riscv_h but just return back a workaround with the 
> following changes: ``` $ git diff diff --git a/xen/arch/riscv/arch.mk 
> b/xen/arch/riscv/arch.mk index f29ad332c1..3bd64e7e51 100644 --- 
> a/xen/arch/riscv/arch.mk +++ b/xen/arch/riscv/arch.mk @@ -24,13 +24,17 
> @@ $(eval $(1) := \ $(call as-insn,$(CC) 
> $(riscv-generic-flags)_$(1),$(value $(1)-insn),_$(1))) endef -h-insn := 
> "hfence.gvma" -$(call check-extension,h) + 
> +h-extension-name-$(CONFIG_CC_IS_GCC) := $(call cc-ifversion,-lt,1301, 
> hh, h) +h-extension-name-$(CONFIG_CC_IS_CLANG) := h + 
> +$(h-extension-name-y)-insn := "hfence.gvma" +$(call 
> check-extension,$(h-extension-name-y)) zihintpause-insn := "pause" 
> $(call check-extension,zihintpause) -extensions := $(h) $(zihintpause) 
> _zicsr_zifencei_zbb +extensions := $($(h-extension-name-y)) 
> $(zihintpause) _zicsr_zifencei_zbb extensions := $(subst 
> $(space),,$(extensions)) ``` I prefer more a little bit the second 
> option with having the workaround for GCC version. ~ Oleksii |

I fear this ended up unreadable.

Jan



 


Rackspace

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