All of lore.kernel.org
 help / color / mirror / Atom feed
From: oleksii.kurochko@gmail.com
To: Jan Beulich <jbeulich@suse.com>
Cc: Alistair Francis <alistair.francis@wdc.com>,
	Bob Eshleman <bobbyeshleman@gmail.com>,
	Connor Davis <connojdavis@gmail.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v6 6/9] xen/riscv: introduce functionality to work with CPU info
Date: Wed, 11 Sep 2024 14:05:19 +0200	[thread overview]
Message-ID: <de3f5c4fd5dd2a8533ea376a013f8e40b85dc6b7.camel@gmail.com> (raw)
In-Reply-To: <6c43c528-daa9-4449-a383-aade3da73160@suse.com>

On Tue, 2024-09-10 at 12:33 +0200, Jan Beulich wrote:
> On 02.09.2024 19:01, Oleksii Kurochko wrote:
> > --- a/xen/arch/riscv/include/asm/processor.h
> > +++ b/xen/arch/riscv/include/asm/processor.h
> > @@ -12,8 +12,31 @@
> >  
> >  #ifndef __ASSEMBLY__
> >  
> > -/* TODO: need to be implemeted */
> > -#define smp_processor_id() 0
> > +#include <xen/bug.h>
> > +
> > +register struct pcpu_info *tp asm ( "tp" );
> > +
> > +struct pcpu_info {
> > +    unsigned int processor_id; /* Xen CPU id */
> > +    unsigned long hart_id; /* physical CPU id */
> > +} __cacheline_aligned;
> 
> Shouldn't you include xen/cache.h for this, to be sure the header can
> be included on its own?
Agree, it would be better to include xen/cache.h header.

> 
> I'm also unconvinced of this placement: Both Arm and x86 have similar
> structures (afaict), living in current.h.
Then for consistency it would be better to move this structure to
current.h for RISC-V.

> 
> > +/* tp points to one of these */
> > +extern struct pcpu_info pcpu_info[NR_CPUS];
> > +
> > +#define get_processor_id()      (tp->processor_id)
> 
> Iirc it was in response to one of your earlier patches that we
> removed
> get_processor_id() from the other architectures, as being fully
> redundant with smp_processor_id(). Is there a particular reason you
> re-introduce that now for RISC-V?
No reason, just forgot that we agreed to use only smp_processor_id()
and made a bad rebase of my 'latest' branch on top of the current
staging which doesn't tell me about merge conflict in that place.
I will drop get_processor_id().

> 
> > +#define set_processor_id(id)    do { \
> > +    tp->processor_id = (id);         \
> > +} while (0)
> > +
> > +static inline unsigned int smp_processor_id(void)
> > +{
> > +    unsigned int id = get_processor_id();
> > +
> > +    BUG_ON(id > (NR_CPUS - 1));
> 
> The more conventional way of expressing this is >= NR_CPUS.
> 
> > @@ -14,6 +16,13 @@ DECLARE_PER_CPU(cpumask_var_t, cpu_core_mask);
> >   */
> >  #define park_offline_cpus false
> >  
> > +/*
> > + * Mapping between linux logical cpu index and hartid.
> > + */
> > +#define cpuid_to_hartid(cpu) (pcpu_info[cpu].hart_id)
> 
> Does this need to be a macro (rather than an inline function)?
No, there is no such need. I will use inline function instead.

> 
> > @@ -72,6 +77,16 @@ FUNC(reset_stack)
> >          ret
> >  END(reset_stack)
> >  
> > +/* void setup_tp(unsigned int xen_cpuid); */
> > +FUNC(setup_tp)
> > +        la      tp, pcpu_info
> > +        li      t0, PCPU_INFO_SIZE
> > +        mul     t1, a0, t0
> > +        add     tp, tp, t1
> > +
> > +        ret
> > +END(setup_tp)
> 
> I take it this is going to run (i.e. also for secondary CPUs) ahead
> of
> Xen being able to handle any kind of exception (on the given CPU)?
Yes, I am using it for secondary CPUs and Xen are handling exceptions (
on the given CPU ) fine.

>  If
> so, all is fine here. If not, transiently pointing tp at CPU0's space
> is a possible problem.
I haven't had any problem with that at the moment.

Do you think that it will be better to use DECLARE_PER_CPU() with
updating of setup_tp() instead of pcpu_info[] when SMP will be
introduced?
What kind of problems should I take into account?

~ Oleksii





  reply	other threads:[~2024-09-11 12:05 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-02 17:01 [PATCH v6 0/9] RISCV device tree mapping Oleksii Kurochko
2024-09-02 17:01 ` [PATCH v6 1/9] xen/riscv: prevent recursion when ASSERT(), BUG*(), or panic() are called Oleksii Kurochko
2024-09-03 14:19   ` [PATCH] RISCV/shutdown: Implement machine_{halt,restart}() Andrew Cooper
2024-09-03 14:23     ` Andrew Cooper
2024-09-03 14:27       ` Jan Beulich
2024-09-03 14:26     ` Jan Beulich
2024-09-03 14:27       ` Andrew Cooper
2024-09-04 10:22     ` oleksii.kurochko
2024-09-10  9:42   ` [PATCH v6 1/9] xen/riscv: prevent recursion when ASSERT(), BUG*(), or panic() are called Jan Beulich
2024-09-10 13:55     ` oleksii.kurochko
2024-09-02 17:01 ` [PATCH v6 2/9] xen/riscv: use {read,write}{b,w,l,q}_cpu() to define {read,write}_atomic() Oleksii Kurochko
2024-09-03 14:21   ` Andrew Cooper
2024-09-04 10:27     ` oleksii.kurochko
2024-09-04 10:31       ` Andrew Cooper
2024-09-05 15:45         ` oleksii.kurochko
2024-09-02 17:01 ` [PATCH v6 3/9] xen/riscv: allow write_atomic() to work with non-scalar types Oleksii Kurochko
2024-09-10  9:53   ` Jan Beulich
2024-09-10 15:28     ` oleksii.kurochko
2024-09-10 16:05       ` Jan Beulich
2024-09-11 11:34         ` oleksii.kurochko
2024-09-11 11:49           ` Jan Beulich
2024-09-12 11:15             ` oleksii.kurochko
2024-09-12 11:41               ` oleksii.kurochko
2024-09-02 17:01 ` [PATCH v6 4/9] xen/riscv: set up fixmap mappings Oleksii Kurochko
2024-09-10 10:01   ` Jan Beulich
2024-09-10 15:55     ` oleksii.kurochko
2024-09-10 16:07       ` Jan Beulich
2024-09-02 17:01 ` [PATCH v6 5/9] xen/riscv: introduce asm/pmap.h header Oleksii Kurochko
2024-09-02 17:01 ` [PATCH v6 6/9] xen/riscv: introduce functionality to work with CPU info Oleksii Kurochko
2024-09-10 10:33   ` Jan Beulich
2024-09-11 12:05     ` oleksii.kurochko [this message]
2024-09-11 12:14       ` Jan Beulich
2024-09-12  9:27         ` oleksii.kurochko
2024-09-12  9:58           ` Jan Beulich
2024-09-12 16:02     ` oleksii.kurochko
2024-09-13 12:51       ` Jan Beulich
2024-09-02 17:01 ` [PATCH v6 7/9] xen/riscv: introduce and initialize SBI RFENCE extension Oleksii Kurochko
2024-09-10 11:32   ` Jan Beulich
2024-09-02 17:01 ` [PATCH v6 8/9] xen/riscv: page table handling Oleksii Kurochko
2024-09-10 12:19   ` Jan Beulich
2024-09-11 15:09     ` oleksii.kurochko
2024-09-02 17:01 ` [PATCH v6 9/9] xen/riscv: introduce early_fdt_map() Oleksii Kurochko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=de3f5c4fd5dd2a8533ea376a013f8e40b85dc6b7.camel@gmail.com \
    --to=oleksii.kurochko@gmail.com \
    --cc=alistair.francis@wdc.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bobbyeshleman@gmail.com \
    --cc=connojdavis@gmail.com \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.