[PATCH v8 10/11] KVM: arm64: selftests: Import automatic system register definition generation from kernel

Jing Zhang jingzhangos at google.com
Wed Aug 16 10:15:26 PDT 2023


Hi Shaoqin,

On Tue, Aug 15, 2023 at 11:54 PM Shaoqin Huang <shahuang at redhat.com> wrote:
>
> Hi Jing,
>
> On 8/8/23 00:22, Jing Zhang wrote:
> > Import automatic system register definition generation from kernel and
> > update system register usage accordingly.
> >
> > Signed-off-by: Jing Zhang <jingzhangos at google.com>
> > ---
> > diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile
> > index c692cc86e7da..a8cf0cb04db7 100644
> > --- a/tools/testing/selftests/kvm/Makefile
> > +++ b/tools/testing/selftests/kvm/Makefile
> > @@ -200,14 +200,15 @@ ifeq ($(ARCH),x86_64)
> >   LINUX_TOOL_ARCH_INCLUDE = $(top_srcdir)/tools/arch/x86/include
> >   else
> >   LINUX_TOOL_ARCH_INCLUDE = $(top_srcdir)/tools/arch/$(ARCH)/include
> > +ARCH_GENERATED_INCLUDE = $(top_srcdir)/tools/arch/$(ARCH)/include/generated
> >   endif
> >   CFLAGS += -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 \
> > -     -Wno-gnu-variable-sized-type-not-at-end -MD\
> > +     -Wno-gnu-variable-sized-type-not-at-end -MD \
> >       -fno-builtin-memcmp -fno-builtin-memcpy -fno-builtin-memset \
> >       -fno-stack-protector -fno-PIE -I$(LINUX_TOOL_INCLUDE) \
> >       -I$(LINUX_TOOL_ARCH_INCLUDE) -I$(LINUX_HDR_PATH) -Iinclude \
> >       -I$(<D) -Iinclude/$(ARCH_DIR) -I ../rseq -I.. $(EXTRA_CFLAGS) \
> > -     $(KHDR_INCLUDES)
> > +     -I$(ARCH_GENERATED_INCLUDE) $(KHDR_INCLUDES)
> >   ifeq ($(ARCH),s390)
> >       CFLAGS += -march=z10
> >   endif
> > @@ -255,8 +256,16 @@ $(LIBKVM_S_OBJ): $(OUTPUT)/%.o: %.S
> >   $(LIBKVM_STRING_OBJ): $(OUTPUT)/%.o: %.c
> >       $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -ffreestanding $< -o $@
> >
> > +ifeq ($(ARCH),arm64)
> > +GEN_SYSREGS := $(ARCH_GENERATED_INCLUDE)/asm/sysreg-defs.h
> > +ARCH_TOOLS := $(top_srcdir)/tools/arch/$(ARCH)/tools/
> > +
> > +$(GEN_SYSREGS): $(ARCH_TOOLS)/gen-sysreg.awk $(ARCH_TOOLS)/sysreg
> > +     mkdir -p $(dir $@); awk -f $(ARCH_TOOLS)/gen-sysreg.awk $(ARCH_TOOLS)/sysreg > $@
> > +endif
> > +
> >   x := $(shell mkdir -p $(sort $(dir $(TEST_GEN_PROGS))))
> > -$(TEST_GEN_PROGS): $(LIBKVM_OBJS)
> > +$(TEST_GEN_PROGS): $(LIBKVM_OBJS) $(GEN_SYSREGS)
>
> I don't this this really works. Since the $(GEN_SYSREG) is the
> prerequisites of $(TEST_GEN_PROGS). Only when $(TEST_GEN_PROGS) being
> compiled, the $(GEN_SYSREG) can be generated.
>
> But the fact is, the $(TEST_GEN_PROGS) is relies on $(TEST_GEN_OBJ),
> which means $(TEST_GEN_OBJ) will be compiled before $(TEST_GEN_PROGS),
> but $(TEST_GEN_OBJ) depends on $(GEN_SYSREG) again, at the time, the
> $(GEN_SYSREG) hasn't been generated, so it will has error:
>
> No such file or directory.
>
> #include "asm/sysreg-defs.h"
>
> I think the correct way to generate $(GEN_SYSREGS) is add a prerequisite
> for $(TEST_GEN_OBJ), like:
>
> $(TEST_GEN_OBJ): $(GEN_SYSREGS)

You're right. Fixed.

>
> Thanks,
> Shaoqin
>
> >   $(TEST_GEN_PROGS_EXTENDED): $(LIBKVM_OBJS)
> >
> >   cscope: include_paths = $(LINUX_TOOL_INCLUDE) $(LINUX_HDR_PATH) include lib ..
> --
> Shaoqin
>

Thanks,
Jing



More information about the linux-arm-kernel mailing list