|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XEN PATCH v1 1/4] arch/riscv: initial RISC-V support to build/run minimal Xen
On Wed, 2022-12-28 at 22:22 +0000, Julien Grall wrote:
>
>
> On Mon, 26 Dec 2022 at 12:14, Oleksii <oleksii.kurochko@xxxxxxxxx>
> wrote:
> > >
> > > > +/*
> > > > + * PAGE_SIZE is defined in <{asm,xen}/page-*.h> but to
> > > > + * remove unnecessary headers for minimal
> > > > + * build headers it will be better to set PAGE_SIZE
> > > > + * explicitly.
> > >
> > > TBH, I think this is a shortcut that is unnecessary and will only
> > > introduce extra churn in the future (for instance, you will need
> > > to
> > > modify the include in xen.lds.S).
> > >
> > > But I am not the maintainer, so I will leave that decision to
> > > them
> > > whether this is acceptable.
> >
> > I didn't get what you mean by a shortcut here.
> >
>
>
> config.h is automatically included everywhere. So anything defined in
> the header will also be available everywhere. Once you move the
> definition in a separate header, then you will have have to chase
> where the definition is used.
>
> An alternative would be to include the new header in config.h.
> However, this is not always wanted (we are trying to limit the scope
> of some definitions).
>
> So maybe you are saving a few minutes now. But you will spend a lot
> more to chase the places where the new header needs to be included.
>
Thanks for clarification.
> >
> > >
> > > > + *
> > > > + * TODO: remove it when <asm/page-*.h> will be needed
> > > > + * defintion of PAGE_SIZE should be remove from
> > >
> > > s/defintion/definition/
> >
> > Thanks for finding the typo. Will update it in the next version of
> > the patch.
> >
> > >
> > > > + * this header.
> > > > + */
> > > > +#define PAGE_SIZE 4096 > +
> > > > #endif /* __RISCV_CONFIG_H__ */
> > > > /*
> > > > * Local variables:
> > > > diff --git a/xen/arch/riscv/include/asm/types.h
> > > > b/xen/arch/riscv/include/asm/types.h
> > > > new file mode 100644
> > > > index 0000000000..afbca6b15c
> > > > --- /dev/null
> > > > +++ b/xen/arch/riscv/include/asm/types.h
> > > > @@ -0,0 +1,11 @@
> > > > +#ifndef __TYPES_H__
> > > > +#define __TYPES_H__
> > > > +
> > > > +/*
> > > > + *
> > > > + * asm/types.h is required for xen-syms.S file which
> > > > + * is produced by tools/symbols.
> > > > + *
> > > > + */
> > > > +
> > > > +#endif
> > > > diff --git a/xen/arch/riscv/riscv64/Makefile
> > > > b/xen/arch/riscv/riscv64/Makefile
> > > > index 15a4a65f66..3340058c08 100644
> > > > --- a/xen/arch/riscv/riscv64/Makefile
> > > > +++ b/xen/arch/riscv/riscv64/Makefile
> > > > @@ -1 +1 @@
> > > > -extra-y += head.o
> > > > +obj-y += head.o
> > >
> > > This changes want to be explained. So does...
> >
> > RISC-V 64 would be supported now and minimal build is built
> > now only obj-y stuff.
> >
>
>
> I am a bit confused. It thought what was checked in was meant to
> work. Did I misremembered?
The current mainline Xen can only build head.o directly using the
following command:
make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu-
KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o
Comments can be found in the commit: 2a04f396a34c5a43b9a09d72e8c4f
> >
> >
> > >
> > > > diff --git a/xen/arch/riscv/riscv64/head.S
> > > > b/xen/arch/riscv/riscv64/head.S
> > > > index 0dbc27ba75..0330b29c01 100644
> > > > --- a/xen/arch/riscv/riscv64/head.S
> > > > +++ b/xen/arch/riscv/riscv64/head.S
> > > > @@ -1,6 +1,6 @@
> > > > #include <asm/config.h>
> > > >
> > > > - .text
> > > > + .section .text.header, "ax", %progbits
> > >
> > > ... AFAICT this is to match the recent change in the build
> > > system.
> >
> > I am not sure that I get you here but it was done to make 'start'
> > instructions to be the first instructions that will be executed and
> > to make 'start' symbol to be the first in xen-syms.map file
> > otherwise
> > gdb shows that Xen starts from the wrong instructions, fails to
> > find
> > correct source file and goes crazy.
> >
>
>
> When the file head.S was originally created, there was no section
> .text.header. Instead head.S was included at the top with some
> different runes.
> >
> > >
> > > > + } :text
> > > > +
> > >
> > > I am assuming you are going to add .init.* afterwards?
> > >
> > > > + . = ALIGN(PAGE_SIZE);
> > > > + .bss : {
> > > > + __bss_start = .;
> > > > + *(.bss .bss.*)
> > > > + . = ALIGN(POINTER_ALIGN);
> > > > + __bss_end = .;
> > >
> > > Same as .data, I would recommend to properly populate it.
> >
> > Do you mean to add .bss.stack_aligned, .bss.page_aligned,
> > .bss.percpu*?
> > One of the reasons they were skipped is they aren't used now and
> > one
> > more reason if to believe xen.lds.S file from ARM
> > .bss.percpu.read_mostly should be aligned by SMP_CACHE_BYTES which
> > requires dummy <asm/cache.h> (or not ?) which will increase the
> > patch
> > with unneeded stuff for now.
> >
>
>
> I will answer your reply to Alistair here at the same time.
>
> The problem is .bss.* will include any section start with .bss.. IOW
> section like .bss.page_aligned will also be covered and therefore you
> will not get a linker failure.
>
> Instead , the linker will fold the section wherever it wants.
> Therefore, there is no guarantee, the content will be page aligned.
> When using the binary, you could end up with weird behavior that will
> be hard to debug.
>
> I understand you are trying to get a basic build. But, I feel the
> linker is not something you want to quickly rush. 1h may turn into
> hours lost in a few months because not everyone may remember that you
> didn’t special case .bss.page_aligned.
>
> Short of suggesting to have a common linker script, you could simply
> not use * (IOW explictly list the section). With that, you should
> get a linking warning/error if the section is not listed.
>
Totally agree then.
I missed that there is .bss.*.
Actually I reworked a little bit xen.lds.S. As a basis I took xen.lds.S
from ARM and removed all arch specific sections. So xen.lds.S contains
stuff which isn't used for now (for example, *(.data.schedulers)) but
will be used in future.
Would it be better to go with the reworked linker script or remove
unneeded sections for now and make it get a linking warning/error when
sections will be used?
> Cheers,
BR,
Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |