[PATCH v2 1/2] x86/cpu-policy: move CPU policy library code

Jan Beulich posted 2 patches 5 months, 1 week ago
[PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Jan Beulich 5 months, 1 week ago
... to a dedicated subdir of x86's private lib/ sub-tree.

For the CPU policy harnesses and libxenguest use $(lib-y) as set by the
new Makefile.common, whereas for the emulator harnesses stick to building
just cpuid.o for the time being.

Requested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: New.
---
 tools/fuzz/cpu-policy/Makefile                     | 7 +++++--
 tools/fuzz/x86_instruction_emulator/Makefile       | 2 +-
 tools/libs/guest/Makefile.common                   | 7 +++++--
 tools/tests/cpu-policy/Makefile                    | 7 +++++--
 tools/tests/x86_emulator/Makefile                  | 2 +-
 xen/arch/x86/arch.mk                               | 1 +
 xen/arch/x86/lib/Makefile                          | 2 ++
 xen/arch/x86/lib/cpu-policy/Makefile               | 1 +
 xen/arch/x86/lib/cpu-policy/Makefile.common        | 3 +++
 xen/{lib/x86 => arch/x86/lib/cpu-policy}/cpuid.c   | 0
 xen/{lib/x86 => arch/x86/lib/cpu-policy}/msr.c     | 0
 xen/{lib/x86 => arch/x86/lib/cpu-policy}/policy.c  | 0
 xen/{lib/x86 => arch/x86/lib/cpu-policy}/private.h | 0
 xen/lib/Makefile                                   | 2 --
 xen/lib/x86/Makefile                               | 3 ---
 15 files changed, 24 insertions(+), 13 deletions(-)
 create mode 100644 xen/arch/x86/lib/cpu-policy/Makefile
 create mode 100644 xen/arch/x86/lib/cpu-policy/Makefile.common
 rename xen/{lib/x86 => arch/x86/lib/cpu-policy}/cpuid.c (100%)
 rename xen/{lib/x86 => arch/x86/lib/cpu-policy}/msr.c (100%)
 rename xen/{lib/x86 => arch/x86/lib/cpu-policy}/policy.c (100%)
 rename xen/{lib/x86 => arch/x86/lib/cpu-policy}/private.h (100%)
 delete mode 100644 xen/lib/x86/Makefile

diff --git a/tools/fuzz/cpu-policy/Makefile b/tools/fuzz/cpu-policy/Makefile
index 6e7743e0aa12..76ecf20e8dbd 100644
--- a/tools/fuzz/cpu-policy/Makefile
+++ b/tools/fuzz/cpu-policy/Makefile
@@ -20,9 +20,12 @@ install: all
 CFLAGS += $(CFLAGS_xeninclude) -D__XEN_TOOLS__
 CFLAGS += $(APPEND_CFLAGS) -Og
 
-vpath %.c ../../../xen/lib/x86
+vpath %.c $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy
 
-afl-policy-fuzzer: afl-policy-fuzzer.o msr.o cpuid.o
+lib-y :=
+include $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy/Makefile.common
+
+afl-policy-fuzzer: afl-policy-fuzzer.o $(lib-y)
 	$(CC) $(CFLAGS) $^ -o $@
 
 -include $(DEPS_INCLUDE)
diff --git a/tools/fuzz/x86_instruction_emulator/Makefile b/tools/fuzz/x86_instruction_emulator/Makefile
index d104b15f4fbf..4e4877a20322 100644
--- a/tools/fuzz/x86_instruction_emulator/Makefile
+++ b/tools/fuzz/x86_instruction_emulator/Makefile
@@ -21,7 +21,7 @@ vpath %.h ../../tests/x86_emulator
 CFLAGS += -iquote ../../tests/x86_emulator
 
 # Add libx86 to the build
-vpath %.c $(XEN_ROOT)/xen/lib/x86
+vpath %.c $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy
 
 x86_emulate:
 	mkdir -p $@
diff --git a/tools/libs/guest/Makefile.common b/tools/libs/guest/Makefile.common
index a026a2f662b0..b928a4a246a9 100644
--- a/tools/libs/guest/Makefile.common
+++ b/tools/libs/guest/Makefile.common
@@ -33,9 +33,12 @@ LIBELF_OBJS += libelf-dominfo.o
 OBJS-y += $(LIBELF_OBJS)
 
 ifeq ($(CONFIG_X86),y) # Add libx86 to the build
-vpath %.c ../../../xen/lib/x86
+vpath %.c $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy
 
-OBJS-y                 += cpuid.o msr.o policy.o
+lib-y :=
+include $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy/Makefile.common
+
+OBJS-y                 += $(lib-y)
 endif
 
 # new domain builder
diff --git a/tools/tests/cpu-policy/Makefile b/tools/tests/cpu-policy/Makefile
index 24f87e2eca2a..d8e4d222f4e4 100644
--- a/tools/tests/cpu-policy/Makefile
+++ b/tools/tests/cpu-policy/Makefile
@@ -42,11 +42,14 @@ CFLAGS += $(APPEND_CFLAGS)
 
 LDFLAGS += $(APPEND_LDFLAGS)
 
-vpath %.c ../../../xen/lib/x86
+vpath %.c $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy
+
+lib-y :=
+include $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy/Makefile.common
 
 %.o: Makefile
 
-test-cpu-policy: test-cpu-policy.o msr.o cpuid.o policy.o
+test-cpu-policy: test-cpu-policy.o $(lib-y)
 	$(CC) $^ -o $@ $(LDFLAGS)
 
 -include $(DEPS_INCLUDE)
diff --git a/tools/tests/x86_emulator/Makefile b/tools/tests/x86_emulator/Makefile
index 376cfe244d1c..e18725d0c303 100644
--- a/tools/tests/x86_emulator/Makefile
+++ b/tools/tests/x86_emulator/Makefile
@@ -17,7 +17,7 @@ vpath x86_emulate/%.h $(XEN_ROOT)/xen/arch/x86
 HOSTCFLAGS += -iquote $(XEN_ROOT)/xen/arch/x86
 
 # Add libx86 to the build
-vpath %.c $(XEN_ROOT)/xen/lib/x86
+vpath %.c $(XEN_ROOT)/xen/arch/x86/lib/cpu-policy
 
 CFLAGS += $(CFLAGS_xeninclude)
 
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 0203138a819a..be6c76d2934b 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -4,6 +4,7 @@
 export XEN_IMG_OFFSET := 0x200000
 
 ARCH_LIBS-y += arch/x86/lib/lib.a
+ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
 
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
 
diff --git a/xen/arch/x86/lib/Makefile b/xen/arch/x86/lib/Makefile
index b9a65c662a56..fe9a27187992 100644
--- a/xen/arch/x86/lib/Makefile
+++ b/xen/arch/x86/lib/Makefile
@@ -6,3 +6,5 @@ lib-y += generic-hweightl.o
 lib-y += memcpy.o
 lib-y += memset.o
 lib-y += scrub-page.o
+
+obj-y += cpu-policy/
diff --git a/xen/arch/x86/lib/cpu-policy/Makefile b/xen/arch/x86/lib/cpu-policy/Makefile
new file mode 100644
index 000000000000..b12cf7836d4c
--- /dev/null
+++ b/xen/arch/x86/lib/cpu-policy/Makefile
@@ -0,0 +1 @@
+include $(srcdir)/Makefile.common
diff --git a/xen/arch/x86/lib/cpu-policy/Makefile.common b/xen/arch/x86/lib/cpu-policy/Makefile.common
new file mode 100644
index 000000000000..35475af78048
--- /dev/null
+++ b/xen/arch/x86/lib/cpu-policy/Makefile.common
@@ -0,0 +1,3 @@
+lib-y += cpuid.o
+lib-y += msr.o
+lib-y += policy.o
diff --git a/xen/lib/x86/cpuid.c b/xen/arch/x86/lib/cpu-policy/cpuid.c
similarity index 100%
rename from xen/lib/x86/cpuid.c
rename to xen/arch/x86/lib/cpu-policy/cpuid.c
diff --git a/xen/lib/x86/msr.c b/xen/arch/x86/lib/cpu-policy/msr.c
similarity index 100%
rename from xen/lib/x86/msr.c
rename to xen/arch/x86/lib/cpu-policy/msr.c
diff --git a/xen/lib/x86/policy.c b/xen/arch/x86/lib/cpu-policy/policy.c
similarity index 100%
rename from xen/lib/x86/policy.c
rename to xen/arch/x86/lib/cpu-policy/policy.c
diff --git a/xen/lib/x86/private.h b/xen/arch/x86/lib/cpu-policy/private.h
similarity index 100%
rename from xen/lib/x86/private.h
rename to xen/arch/x86/lib/cpu-policy/private.h
diff --git a/xen/lib/Makefile b/xen/lib/Makefile
index efca830d924c..850efeb4c570 100644
--- a/xen/lib/Makefile
+++ b/xen/lib/Makefile
@@ -1,5 +1,3 @@
-obj-$(CONFIG_X86) += x86/
-
 lib-y += bsearch.o
 lib-y += ctors.o
 lib-y += ctype.o
diff --git a/xen/lib/x86/Makefile b/xen/lib/x86/Makefile
deleted file mode 100644
index 780ea05db158..000000000000
--- a/xen/lib/x86/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-obj-y += cpuid.o
-obj-y += msr.o
-obj-y += policy.o
Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Andrew Cooper 4 months, 1 week ago
On 07/01/2026 2:17 pm, Jan Beulich wrote:
> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
> index 0203138a819a..be6c76d2934b 100644
> --- a/xen/arch/x86/arch.mk
> +++ b/xen/arch/x86/arch.mk
> @@ -4,6 +4,7 @@
>  export XEN_IMG_OFFSET := 0x200000
>  
>  ARCH_LIBS-y += arch/x86/lib/lib.a
> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a

This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?

~Andrew

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Jan Beulich 4 months, 1 week ago
On 02.02.2026 16:47, Andrew Cooper wrote:
> On 07/01/2026 2:17 pm, Jan Beulich wrote:
>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
>> index 0203138a819a..be6c76d2934b 100644
>> --- a/xen/arch/x86/arch.mk
>> +++ b/xen/arch/x86/arch.mk
>> @@ -4,6 +4,7 @@
>>  export XEN_IMG_OFFSET := 0x200000
>>  
>>  ARCH_LIBS-y += arch/x86/lib/lib.a
>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
> 
> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?

No, this was deliberate. The functions here are different from those in
arch/x86/lib/lib.a. We don't need to fear collision with "common code"
ones. Hence I preferred to use the more "normal" placement into what's
passed to the linker.

Jan

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Andrew Cooper 3 months, 2 weeks ago
On 02/02/2026 4:26 pm, Jan Beulich wrote:
> On 02.02.2026 16:47, Andrew Cooper wrote:
>> On 07/01/2026 2:17 pm, Jan Beulich wrote:
>>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
>>> index 0203138a819a..be6c76d2934b 100644
>>> --- a/xen/arch/x86/arch.mk
>>> +++ b/xen/arch/x86/arch.mk
>>> @@ -4,6 +4,7 @@
>>>  export XEN_IMG_OFFSET := 0x200000
>>>  
>>>  ARCH_LIBS-y += arch/x86/lib/lib.a
>>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
>> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?
> No, this was deliberate. The functions here are different from those in
> arch/x86/lib/lib.a. We don't need to fear collision with "common code"
> ones. Hence I preferred to use the more "normal" placement into what's
> passed to the linker.

I agree that we don't have the explicit ordering requirement that we
have with arch/x86/lib/lib.a.

But, it still reads as bogus to be putting arch/x86/lib/cpu-policy/lib.a
in the non-ARCH list.

What difference is there having this a little earlier in the linker
arguments?  Nothing AFAICT.

~Andrew

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Jan Beulich 3 months, 2 weeks ago
On 23.02.2026 20:00, Andrew Cooper wrote:
> On 02/02/2026 4:26 pm, Jan Beulich wrote:
>> On 02.02.2026 16:47, Andrew Cooper wrote:
>>> On 07/01/2026 2:17 pm, Jan Beulich wrote:
>>>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
>>>> index 0203138a819a..be6c76d2934b 100644
>>>> --- a/xen/arch/x86/arch.mk
>>>> +++ b/xen/arch/x86/arch.mk
>>>> @@ -4,6 +4,7 @@
>>>>  export XEN_IMG_OFFSET := 0x200000
>>>>  
>>>>  ARCH_LIBS-y += arch/x86/lib/lib.a
>>>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
>>> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?
>> No, this was deliberate. The functions here are different from those in
>> arch/x86/lib/lib.a. We don't need to fear collision with "common code"
>> ones. Hence I preferred to use the more "normal" placement into what's
>> passed to the linker.
> 
> I agree that we don't have the explicit ordering requirement that we
> have with arch/x86/lib/lib.a.
> 
> But, it still reads as bogus to be putting arch/x86/lib/cpu-policy/lib.a
> in the non-ARCH list.
> 
> What difference is there having this a little earlier in the linker
> arguments?  Nothing AFAICT.

Indeed. The sole reason why I'd prefer things as presented is that putting
stuff in ARCH_LIBS should imo be the special case (i.e. requiring a special
reason), while putting things in ALL_LIBS should be the default.

Jan

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Roger Pau Monné 3 months, 2 weeks ago
On Tue, Feb 24, 2026 at 07:54:29AM +0100, Jan Beulich wrote:
> On 23.02.2026 20:00, Andrew Cooper wrote:
> > On 02/02/2026 4:26 pm, Jan Beulich wrote:
> >> On 02.02.2026 16:47, Andrew Cooper wrote:
> >>> On 07/01/2026 2:17 pm, Jan Beulich wrote:
> >>>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
> >>>> index 0203138a819a..be6c76d2934b 100644
> >>>> --- a/xen/arch/x86/arch.mk
> >>>> +++ b/xen/arch/x86/arch.mk
> >>>> @@ -4,6 +4,7 @@
> >>>>  export XEN_IMG_OFFSET := 0x200000
> >>>>  
> >>>>  ARCH_LIBS-y += arch/x86/lib/lib.a
> >>>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
> >>> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?
> >> No, this was deliberate. The functions here are different from those in
> >> arch/x86/lib/lib.a. We don't need to fear collision with "common code"
> >> ones. Hence I preferred to use the more "normal" placement into what's
> >> passed to the linker.
> > 
> > I agree that we don't have the explicit ordering requirement that we
> > have with arch/x86/lib/lib.a.
> > 
> > But, it still reads as bogus to be putting arch/x86/lib/cpu-policy/lib.a
> > in the non-ARCH list.
> > 
> > What difference is there having this a little earlier in the linker
> > arguments?  Nothing AFAICT.
> 
> Indeed. The sole reason why I'd prefer things as presented is that putting
> stuff in ARCH_LIBS should imo be the special case (i.e. requiring a special
> reason), while putting things in ALL_LIBS should be the default.

I agree with Andrew that it feels weird that arch/x86/lib/lib.a is
placed in ARCH_LIBS-y and arch/x86/lib/cpu-policy/lib.a is placed in
ALL_LIBS-y.  If we want to do it that way it needs a comment
explaining why they are placed in different list, otherwise it seems
like a typo on first sight, and it's likely to confuse people in the
future.

Thanks, Roger.

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Jan Beulich 3 months, 2 weeks ago
On 24.02.2026 09:53, Roger Pau Monné wrote:
> On Tue, Feb 24, 2026 at 07:54:29AM +0100, Jan Beulich wrote:
>> On 23.02.2026 20:00, Andrew Cooper wrote:
>>> On 02/02/2026 4:26 pm, Jan Beulich wrote:
>>>> On 02.02.2026 16:47, Andrew Cooper wrote:
>>>>> On 07/01/2026 2:17 pm, Jan Beulich wrote:
>>>>>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
>>>>>> index 0203138a819a..be6c76d2934b 100644
>>>>>> --- a/xen/arch/x86/arch.mk
>>>>>> +++ b/xen/arch/x86/arch.mk
>>>>>> @@ -4,6 +4,7 @@
>>>>>>  export XEN_IMG_OFFSET := 0x200000
>>>>>>  
>>>>>>  ARCH_LIBS-y += arch/x86/lib/lib.a
>>>>>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
>>>>> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?
>>>> No, this was deliberate. The functions here are different from those in
>>>> arch/x86/lib/lib.a. We don't need to fear collision with "common code"
>>>> ones. Hence I preferred to use the more "normal" placement into what's
>>>> passed to the linker.
>>>
>>> I agree that we don't have the explicit ordering requirement that we
>>> have with arch/x86/lib/lib.a.
>>>
>>> But, it still reads as bogus to be putting arch/x86/lib/cpu-policy/lib.a
>>> in the non-ARCH list.
>>>
>>> What difference is there having this a little earlier in the linker
>>> arguments?  Nothing AFAICT.
>>
>> Indeed. The sole reason why I'd prefer things as presented is that putting
>> stuff in ARCH_LIBS should imo be the special case (i.e. requiring a special
>> reason), while putting things in ALL_LIBS should be the default.
> 
> I agree with Andrew that it feels weird that arch/x86/lib/lib.a is
> placed in ARCH_LIBS-y and arch/x86/lib/cpu-policy/lib.a is placed in
> ALL_LIBS-y.  If we want to do it that way it needs a comment
> explaining why they are placed in different list, otherwise it seems
> like a typo on first sight, and it's likely to confuse people in the
> future.

Well, I'll (reluctantly) change then.

Jan

Re: [PATCH v2 1/2] x86/cpu-policy: move CPU policy library code
Posted by Andrew Cooper 3 months, 2 weeks ago
On 24/02/2026 8:58 am, Jan Beulich wrote:
> On 24.02.2026 09:53, Roger Pau Monné wrote:
>> On Tue, Feb 24, 2026 at 07:54:29AM +0100, Jan Beulich wrote:
>>> On 23.02.2026 20:00, Andrew Cooper wrote:
>>>> On 02/02/2026 4:26 pm, Jan Beulich wrote:
>>>>> On 02.02.2026 16:47, Andrew Cooper wrote:
>>>>>> On 07/01/2026 2:17 pm, Jan Beulich wrote:
>>>>>>> diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
>>>>>>> index 0203138a819a..be6c76d2934b 100644
>>>>>>> --- a/xen/arch/x86/arch.mk
>>>>>>> +++ b/xen/arch/x86/arch.mk
>>>>>>> @@ -4,6 +4,7 @@
>>>>>>>  export XEN_IMG_OFFSET := 0x200000
>>>>>>>  
>>>>>>>  ARCH_LIBS-y += arch/x86/lib/lib.a
>>>>>>> +ALL_LIBS-y += arch/x86/lib/cpu-policy/lib.a
>>>>>> This wants to extend ARCH_LIBS-y surely?  Is this a rebasing oversight?
>>>>> No, this was deliberate. The functions here are different from those in
>>>>> arch/x86/lib/lib.a. We don't need to fear collision with "common code"
>>>>> ones. Hence I preferred to use the more "normal" placement into what's
>>>>> passed to the linker.
>>>> I agree that we don't have the explicit ordering requirement that we
>>>> have with arch/x86/lib/lib.a.
>>>>
>>>> But, it still reads as bogus to be putting arch/x86/lib/cpu-policy/lib.a
>>>> in the non-ARCH list.
>>>>
>>>> What difference is there having this a little earlier in the linker
>>>> arguments?  Nothing AFAICT.
>>> Indeed. The sole reason why I'd prefer things as presented is that putting
>>> stuff in ARCH_LIBS should imo be the special case (i.e. requiring a special
>>> reason), while putting things in ALL_LIBS should be the default.
>> I agree with Andrew that it feels weird that arch/x86/lib/lib.a is
>> placed in ARCH_LIBS-y and arch/x86/lib/cpu-policy/lib.a is placed in
>> ALL_LIBS-y.  If we want to do it that way it needs a comment
>> explaining why they are placed in different list, otherwise it seems
>> like a typo on first sight, and it's likely to confuse people in the
>> future.
> Well, I'll (reluctantly) change then.

Thanks.  With that done, Reviewed-by: Andrew Cooper
<andrew.cooper3@citrix.com>