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

Re: [PATCH v4 2/2] xen/riscv: introduce identity mapping


  • To: Oleksii <oleksii.kurochko@xxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 26 Jul 2023 17:00:22 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tKDgIRzS6g0SCT9y8ZYDmvY8ivnpVEKA0Wu3YWwRvYY=; b=hTPkDcFYQ0/30abY2SWcb1aOmin9cMkA5cvOVCFOZNX2MZdy9Ew5KmRjsK/RVzwr67ildqyaWSCh1fFgjVNlTAx4Vxs0ca0SWjqCjEtGSa/YAIBqkOMDqT+AoDnmwUIVrxBAMU+3agIT8yRPkfNm/QKSjBHRW+lfdyB5FIrquB9FH9Uc7ApTGLlWThcoz9Qy5V6JsLofo21erlmeXa3RQjAFWRRzNt0OLS+hXGxjcfq6q6vonjmoo4RiGQ8r7yOeMjg31PkzaP6fWcypLuE1EbQPJtOF3Pce+fG3FYrxjjVkoXhscxPjRGAC1tB1jk9ukNFzyQGWcC84FwQgnqr/uQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h9XM/0o0wK+J8AuqORxPAyMXCbra+qNHMSeTZhdCXKMhoIF0SEzk9SFBhZvPPXgZl3go438QyOCLrjiPVvrP52BfpLeczgZHg8pLLX15xEPj0p5DKkNaieRGaPgX5bc9azatIx+jGTI7pu/MLgOCLjB883czXMqfwTE/uBvjP+RejbDwaUGRstySoXGqXt5t8FpsDNnq1WBacj+wYqp5F4YlZGQt++ooMrYMri+laUbaX/J3I0laf1JnbfXNasEYQOPQddUt80yO+ewYWCEjl2yD8jTDvauX5tRL1xA6LvmngPZ3O4DYhsXUSUCwz4Px7qeMoo+tyY4R/FJIUBktsQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Bob Eshleman <bobbyeshleman@xxxxxxxxx>, Alistair Francis <alistair.francis@xxxxxxx>, Connor Davis <connojdavis@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Wed, 26 Jul 2023 15:00:59 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 26.07.2023 15:12, Oleksii wrote:
> On Wed, 2023-07-26 at 13:58 +0200, Jan Beulich wrote:
>> On 26.07.2023 13:23, Oleksii wrote:
>>> I would like to ask for advice on whether it would be easier, less
>>> bug-
>>> provoking ( during identity mapping to remove of whole Xen ) to
>>> have a
>>> separate identity section that won't be more than PAGE_SIZE.
>>
>> I'm afraid you can't safely do this in C, or at least not without
>> further checking on what the compiler actually did.
>>
>>> @@ -264,6 +268,19 @@ void __init enable_mmu(void)
>>>                RV_STAGE1_MODE << SATP_MODE_SHIFT);
>>>  }
>>>  
>>> +void __attribute__((naked)) __section(".ident")
>>> turn_on_mmu(unsigned
>>> long ra)
>>
>> Did you read what gcc doc says about "naked"? Extended asm() isn't
>> supported there. Since ...
>>
>>> +{
>>> +    /* Ensure page table writes precede loading the SATP */
>>> +    sfence_vma();
>>> +
>>> +    /* Enable the MMU and load the new pagetable for Xen */
>>> +    csr_write(CSR_SATP,
>>> +              PFN_DOWN((unsigned long)stage1_pgtbl_root) |
>>> +              RV_STAGE1_MODE << SATP_MODE_SHIFT);
>>> +
>>> +    asm volatile( "jr %0\n" : : "r"(ra) );
>>> +}
>>
>> ... none of this really requires C, I think we're at the point where
>> (iirc) Andrew's and my suggestion wants following, moving this to
>> assembly code (at which point it doesn't need to be a separate
>> function). You can still build page tables in C, of course. (Likely
>> you then also won't need a separate section; some minimal alignment
>> guarantees ought to suffice to make sure the critical code is
>> confined to a single page.)
> 
> Thanks. I'll move all of this to assembly code.
> Regarding alignment it is needed alignment on start and end of
> function:
>     .balign PAGE_SIZE
>     GLOBAL(turn_on_mmu)
>         ...
>     .balign PAGE_SIZE
>     ENDPROC(turn_on_mmu)
> 
> Does the better way exist?

The function is only going to be a handful of instructions. Its
alignment doesn't need to be larger than the next power of 2. I
expect you'll be good with 64-byte alignment. (In no case do you
need to align the end of the function: Putting other stuff there
is not a problem at all.) What you want in any event is a build
time check that the within-a-page constraint is met.

Jan



 


Rackspace

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