* [PATCH v6 1/5] build: Env var to enable expert config options
2016-01-15 17:01 [PATCH v6 0/5] Allow schedulers to be selectable through Kconfig Jonathan Creekmore
@ 2016-01-15 17:01 ` Jonathan Creekmore
2016-01-15 17:20 ` Jan Beulich
2016-01-15 17:01 ` [PATCH v6 2/5] build: Hook the schedulers into Kconfig Jonathan Creekmore
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:01 UTC (permalink / raw)
To: xen-devel
Cc: Keir Fraser, Ian Campbell, Jonathan Creekmore, Ian Jackson,
Tim Deegan, Jan Beulich
Add an additional environment variable, defaulting to disabled,
that enables the CONFIG_EXPERT configuration option. The purpose
of the CONFIG_EXPERT configuration option is to make non-standard
Kconfig options visible during the configuration process. The
CONFIG_EXPERT option is not, itself, visible during the Kconfig
configuration process, so typical users will never see it nor
any of the non-standard configuration options.
CC: Ian Campbell <ian.campbell@citrix.com>
CC: Ian Jackson <ian.jackson@eu.citrix.com>
CC: Jan Beulich <jbeulich@suse.com>
CC: Keir Fraser <keir@xen.org>
CC: Tim Deegan <tim@xen.org>
Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
xen/Kconfig | 4 ++++
xen/Makefile | 1 +
2 files changed, 5 insertions(+)
diff --git a/xen/Kconfig b/xen/Kconfig
index ffe3f45..fa8b27c 100644
--- a/xen/Kconfig
+++ b/xen/Kconfig
@@ -22,3 +22,7 @@ config DEFCONFIG_LIST
string
option defconfig_list
default "$ARCH_DEFCONFIG"
+
+config EXPERT
+ string
+ option env="XEN_CONFIG_EXPERT"
diff --git a/xen/Makefile b/xen/Makefile
index 3699b20..e03e79b 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -11,6 +11,7 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/dnsdomainname ] && /bin/dnsdomainname) |
export XEN_BUILD_DATE ?= $(shell LC_ALL=C date)
export XEN_BUILD_TIME ?= $(shell LC_ALL=C date +%T)
export XEN_BUILD_HOST ?= $(shell hostname)
+export XEN_CONFIG_EXPERT ?= n
export BASEDIR := $(CURDIR)
export XEN_ROOT := $(BASEDIR)/..
--
2.6.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v6 1/5] build: Env var to enable expert config options
2016-01-15 17:01 ` [PATCH v6 1/5] build: Env var to enable expert config options Jonathan Creekmore
@ 2016-01-15 17:20 ` Jan Beulich
2016-01-15 17:33 ` Jonathan Creekmore
0 siblings, 1 reply; 12+ messages in thread
From: Jan Beulich @ 2016-01-15 17:20 UTC (permalink / raw)
To: Jonathan Creekmore
Cc: xen-devel, Keir Fraser, Ian Jackson, Ian Campbell, Tim Deegan
>>> On 15.01.16 at 18:01, <jonathan.creekmore@gmail.com> wrote:
> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -11,6 +11,7 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/dnsdomainname ] && /bin/dnsdomainname) |
> export XEN_BUILD_DATE ?= $(shell LC_ALL=C date)
> export XEN_BUILD_TIME ?= $(shell LC_ALL=C date +%T)
> export XEN_BUILD_HOST ?= $(shell hostname)
> +export XEN_CONFIG_EXPERT ?= n
This, I'm afraid, invalidates what I've said in another reply on
the earlier thread a few minutes ago. What Makefile.kconfig
gets to see must be consistent for FORCE to not be added to
include/config/auto.conf's dependencies by auto.conf.cmd.
Or in other words - did you check (in conjunction with that other
patch fixing incremental rebuilds) whether incremental rebuilds
aren't again becoming full rebuilds because of this when there's
no XEN_CONFIG_EXPERT in the environment?
Jan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 1/5] build: Env var to enable expert config options
2016-01-15 17:20 ` Jan Beulich
@ 2016-01-15 17:33 ` Jonathan Creekmore
2016-01-18 7:46 ` Jan Beulich
0 siblings, 1 reply; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:33 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel, Keir Fraser, Ian Jackson, Ian Campbell, Tim Deegan
> On Jan 15, 2016, at 11:20 AM, Jan Beulich <JBeulich@suse.com> wrote:
>
>>>> On 15.01.16 at 18:01, <jonathan.creekmore@gmail.com> wrote:
>> --- a/xen/Makefile
>> +++ b/xen/Makefile
>> @@ -11,6 +11,7 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/dnsdomainname ] && /bin/dnsdomainname) |
>> export XEN_BUILD_DATE ?= $(shell LC_ALL=C date)
>> export XEN_BUILD_TIME ?= $(shell LC_ALL=C date +%T)
>> export XEN_BUILD_HOST ?= $(shell hostname)
>> +export XEN_CONFIG_EXPERT ?= n
>
> This, I'm afraid, invalidates what I've said in another reply on
> the earlier thread a few minutes ago. What Makefile.kconfig
> gets to see must be consistent for FORCE to not be added to
> include/config/auto.conf's dependencies by auto.conf.cmd.
>
> Or in other words - did you check (in conjunction with that other
> patch fixing incremental rebuilds) whether incremental rebuilds
> aren't again becoming full rebuilds because of this when there's
> no XEN_CONFIG_EXPERT in the environment?
I have applied your patch on top of my branch and I do not see incremental
rebuilds becoming full rebuilds whether XEN_CONFIG_EXPERT is not in the
environment.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 1/5] build: Env var to enable expert config options
2016-01-15 17:33 ` Jonathan Creekmore
@ 2016-01-18 7:46 ` Jan Beulich
0 siblings, 0 replies; 12+ messages in thread
From: Jan Beulich @ 2016-01-18 7:46 UTC (permalink / raw)
To: Jonathan Creekmore
Cc: xen-devel, Keir Fraser, Ian Jackson, Ian Campbell, Tim Deegan
>>> On 15.01.16 at 18:33, <jonathan.creekmore@gmail.com> wrote:
>> On Jan 15, 2016, at 11:20 AM, Jan Beulich <JBeulich@suse.com> wrote:
>>
>>>>> On 15.01.16 at 18:01, <jonathan.creekmore@gmail.com> wrote:
>>> --- a/xen/Makefile
>>> +++ b/xen/Makefile
>>> @@ -11,6 +11,7 @@ export XEN_DOMAIN ?= $(shell ([ -x /bin/dnsdomainname ] &&
> /bin/dnsdomainname) |
>>> export XEN_BUILD_DATE ?= $(shell LC_ALL=C date)
>>> export XEN_BUILD_TIME ?= $(shell LC_ALL=C date +%T)
>>> export XEN_BUILD_HOST ?= $(shell hostname)
>>> +export XEN_CONFIG_EXPERT ?= n
>>
>> This, I'm afraid, invalidates what I've said in another reply on
>> the earlier thread a few minutes ago. What Makefile.kconfig
>> gets to see must be consistent for FORCE to not be added to
>> include/config/auto.conf's dependencies by auto.conf.cmd.
>>
>> Or in other words - did you check (in conjunction with that other
>> patch fixing incremental rebuilds) whether incremental rebuilds
>> aren't again becoming full rebuilds because of this when there's
>> no XEN_CONFIG_EXPERT in the environment?
>
> I have applied your patch on top of my branch and I do not see incremental
> rebuilds becoming full rebuilds whether XEN_CONFIG_EXPERT is not in the
> environment.
Thanks; indeed I've meanwhile realized that the "export" here
should be taking care of avoiding that situation
Jan
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 2/5] build: Hook the schedulers into Kconfig
2016-01-15 17:01 [PATCH v6 0/5] Allow schedulers to be selectable through Kconfig Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 1/5] build: Env var to enable expert config options Jonathan Creekmore
@ 2016-01-15 17:01 ` Jonathan Creekmore
2016-01-19 10:55 ` Dario Faggioli
2016-01-15 17:01 ` [PATCH v6 3/5] build: Alloc space for sched list in the link file Jonathan Creekmore
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:01 UTC (permalink / raw)
To: xen-devel; +Cc: George Dunlap, Jonathan Creekmore, Dario Faggioli
Allow the schedulers to be independently enabled or disabled at
compile-time. To match existing behavior, all four schedulers are
compiled in by default, although the Credit2, RTDS, and ARINC653 are
marked EXPERIMENTAL to match their not currently supported status.
CC: George Dunlap <george.dunlap@eu.citrix.com>
CC: Dario Faggioli <dario.faggioli@citrix.com>
Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
---
Changed since v5:
* Remove extra defaults for schedulers since credit is always there
Changed since v4:
* Removed the "if unsure" language
* Removed ability to disable the "credit" scheduler
* Remove stub vcpu_migration_delay functions since credit cannot be disabled
Changed since v2:
* Hid the scheduler menu behind the EXPERT option
* Provide static inlines for credit functions that are assumed to be
always available
* Provide an absolute default of the credit scheduler if the
scheduler menu is not visible
Changed since v1:
* Marked credit2 as EXPERIMENTAL
* Removed confusing language from the commit message
* Alphabetize the schedulers
---
xen/common/Kconfig | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++
xen/common/Makefile | 8 ++++----
xen/common/schedule.c | 12 +++++++++--
3 files changed, 70 insertions(+), 6 deletions(-)
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
index eadfc3b..7cc99c7 100644
--- a/xen/common/Kconfig
+++ b/xen/common/Kconfig
@@ -97,4 +97,60 @@ config XSM
If unsure, say N.
+# Enable schedulers
+menu "Schedulers"
+ visible if EXPERT = "y"
+
+config SCHED_CREDIT
+ bool
+ default y
+ ---help---
+ The traditional credit scheduler is a general purpose scheduler.
+
+config SCHED_CREDIT2
+ bool "Credit2 scheduler support (EXPERIMENTAL)"
+ default y
+ ---help---
+ The credit2 scheduler is a general purpose scheduler that is
+ optimized for lower latency and higher VM density.
+
+config SCHED_RTDS
+ bool "RTDS scheduler support (EXPERIMENTAL)"
+ default y
+ ---help---
+ The RTDS scheduler is a soft and firm real-time scheduler for
+ multicore, targeted for embedded, automotive, graphics and gaming
+ in the cloud, and general low-latency workloads.
+
+config SCHED_ARINC653
+ bool "ARINC653 scheduler support (EXPERIMENTAL)"
+ default y
+ ---help---
+ The ARINC653 scheduler is a hard real-time scheduler for single
+ cores, targeted for avionics, drones, and medical devices.
+
+choice
+ prompt "Default Scheduler?"
+ default SCHED_CREDIT_DEFAULT
+
+ config SCHED_CREDIT_DEFAULT
+ bool "Credit Scheduler" if SCHED_CREDIT
+ config SCHED_CREDIT2_DEFAULT
+ bool "Credit2 Scheduler" if SCHED_CREDIT2
+ config SCHED_RTDS_DEFAULT
+ bool "RT Scheduler" if SCHED_RTDS
+ config SCHED_ARINC653_DEFAULT
+ bool "ARINC653 Scheduler" if SCHED_ARINC653
+endchoice
+
+config SCHED_DEFAULT
+ string
+ default "credit" if SCHED_CREDIT_DEFAULT
+ default "credit2" if SCHED_CREDIT2_DEFAULT
+ default "rtds" if SCHED_RTDS_DEFAULT
+ default "arinc653" if SCHED_ARINC653_DEFAULT
+ default "credit"
+
+endmenu
+
endmenu
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 9f8b214..4df71ee 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -30,10 +30,10 @@ obj-y += rangeset.o
obj-y += radix-tree.o
obj-y += rbtree.o
obj-y += rcupdate.o
-obj-y += sched_credit.o
-obj-y += sched_credit2.o
-obj-y += sched_arinc653.o
-obj-y += sched_rt.o
+obj-$(CONFIG_SCHED_ARINC653) += sched_arinc653.o
+obj-$(CONFIG_SCHED_CREDIT) += sched_credit.o
+obj-$(CONFIG_SCHED_CREDIT2) += sched_credit2.o
+obj-$(CONFIG_SCHED_RTDS) += sched_rt.o
obj-y += schedule.o
obj-y += shutdown.o
obj-y += softirq.o
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index d121896..2f98a48 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -38,8 +38,8 @@
#include <public/sched.h>
#include <xsm/xsm.h>
-/* opt_sched: scheduler - default to credit */
-static char __initdata opt_sched[10] = "credit";
+/* opt_sched: scheduler - default to configured value */
+static char __initdata opt_sched[10] = CONFIG_SCHED_DEFAULT;
string_param("sched", opt_sched);
/* if sched_smt_power_savings is set,
@@ -65,10 +65,18 @@ DEFINE_PER_CPU(struct schedule_data, schedule_data);
DEFINE_PER_CPU(struct scheduler *, scheduler);
static const struct scheduler *schedulers[] = {
+#ifdef CONFIG_SCHED_CREDIT
&sched_credit_def,
+#endif
+#ifdef CONFIG_SCHED_CREDIT2
&sched_credit2_def,
+#endif
+#ifdef CONFIG_SCHED_ARINC653
&sched_arinc653_def,
+#endif
+#ifdef CONFIG_SCHED_RTDS
&sched_rtds_def,
+#endif
};
static struct scheduler __read_mostly ops;
--
2.6.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v6 2/5] build: Hook the schedulers into Kconfig
2016-01-15 17:01 ` [PATCH v6 2/5] build: Hook the schedulers into Kconfig Jonathan Creekmore
@ 2016-01-19 10:55 ` Dario Faggioli
0 siblings, 0 replies; 12+ messages in thread
From: Dario Faggioli @ 2016-01-19 10:55 UTC (permalink / raw)
To: Jonathan Creekmore, xen-devel; +Cc: George Dunlap
[-- Attachment #1.1: Type: text/plain, Size: 1982 bytes --]
On Fri, 2016-01-15 at 11:01 -0600, Jonathan Creekmore wrote:
> Allow the schedulers to be independently enabled or disabled at
> compile-time. To match existing behavior, all four schedulers are
> compiled in by default, although the Credit2, RTDS, and ARINC653 are
> marked EXPERIMENTAL to match their not currently supported status.
>
> CC: George Dunlap <george.dunlap@eu.citrix.com>
> CC: Dario Faggioli <dario.faggioli@citrix.com>
> Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
> Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
>
> ---
>
> diff --git a/xen/common/Kconfig b/xen/common/Kconfig
> index eadfc3b..7cc99c7 100644
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
>
> diff --git a/xen/common/Makefile b/xen/common/Makefile
> index 9f8b214..4df71ee 100644
> --- a/xen/common/Makefile
> +++ b/xen/common/Makefile
The above changes looks fine to me, but I really speak almost no
Kconfig. :-/
On the rest of the patch, I only have one comment.
> diff --git a/xen/common/schedule.c b/xen/common/schedule.c
> index d121896..2f98a48 100644
> --- a/xen/common/schedule.c
> +++ b/xen/common/schedule.c
> @@ -65,10 +65,18 @@ DEFINE_PER_CPU(struct schedule_data,
> schedule_data);
> DEFINE_PER_CPU(struct scheduler *, scheduler);
>
> static const struct scheduler *schedulers[] = {
> +#ifdef CONFIG_SCHED_CREDIT
> &sched_credit_def,
> +#endif
>
If I understood correctly, Credit is always going to be there, so I
guess these #ifdef could go away?
However, since this is just killed later, I don't think it should block
the patch (series). So:
Acked-by: Dario Faggioli <dario.faggioli@citrix.com>
Regards,
Dario
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 3/5] build: Alloc space for sched list in the link file
2016-01-15 17:01 [PATCH v6 0/5] Allow schedulers to be selectable through Kconfig Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 1/5] build: Env var to enable expert config options Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 2/5] build: Hook the schedulers into Kconfig Jonathan Creekmore
@ 2016-01-15 17:01 ` Jonathan Creekmore
2016-01-20 14:34 ` Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 4/5] sched: Register the schedulers into the list Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 5/5] sched: Use the auto-generated list of schedulers Jonathan Creekmore
4 siblings, 1 reply; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:01 UTC (permalink / raw)
To: xen-devel
Cc: Keir Fraser, Ian Campbell, Jonathan Creekmore,
Stefano Stabellini, Jan Beulich, Andrew Cooper
Creates a section to contain scheduler entry pointers that are gathered
together into an array. This will allow, in a follow-on patch, scheduler
entries to be automatically gathered together into the array for
automatic parsing.
CC: Ian Campbell <ian.campbell@citrix.com>
CC: Stefano Stabellini <stefano.stabellini@citrix.com>
CC: Keir Fraser <keir@xen.org>
CC: Jan Beulich <jbeulich@suse.com>
CC: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
Changed since v4:
* Remove defensive check for schedulers since the credit scheduler
must always be present
Changed since v3:
* Add defensive check for schedulers in the linker
Changed since v1:
* rename the __start and __end symbols to better match
the rest of the file
---
xen/arch/arm/xen.lds.S | 4 ++++
xen/arch/x86/xen.lds.S | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
index 0488f37..f501a2f 100644
--- a/xen/arch/arm/xen.lds.S
+++ b/xen/arch/arm/xen.lds.S
@@ -57,6 +57,10 @@ SECTIONS
. = ALIGN(PAGE_SIZE);
*(.data.page_aligned)
*(.data)
+ . = ALIGN(8);
+ __start_schedulers_array = .;
+ *(.data.schedulers)
+ __end_schedulers_array = .;
*(.data.rel)
*(.data.rel.*)
CONSTRUCTORS
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index e18e08f..c1ce027 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -80,6 +80,10 @@ SECTIONS
__stop___pre_ex_table = .;
*(.data.read_mostly)
+ . = ALIGN(8);
+ __start_schedulers_array = .;
+ *(.data.schedulers)
+ __end_schedulers_array = .;
*(.data.rel.ro)
*(.data.rel.ro.*)
} :text
--
2.6.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v6 3/5] build: Alloc space for sched list in the link file
2016-01-15 17:01 ` [PATCH v6 3/5] build: Alloc space for sched list in the link file Jonathan Creekmore
@ 2016-01-20 14:34 ` Jonathan Creekmore
2016-01-20 14:45 ` Ian Campbell
0 siblings, 1 reply; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-20 14:34 UTC (permalink / raw)
To: xen-devel
Cc: Keir Fraser, Stefano Stabellini, Ian Campbell, Jan Beulich,
Andrew Cooper
> On Jan 15, 2016, at 11:01 AM, Jonathan Creekmore <jonathan.creekmore@gmail.com> wrote:
>
> Creates a section to contain scheduler entry pointers that are gathered
> together into an array. This will allow, in a follow-on patch, scheduler
> entries to be automatically gathered together into the array for
> automatic parsing.
>
> CC: Ian Campbell <ian.campbell@citrix.com>
> CC: Stefano Stabellini <stefano.stabellini@citrix.com>
> CC: Keir Fraser <keir@xen.org>
> CC: Jan Beulich <jbeulich@suse.com>
> CC: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>
> ---
> Changed since v4:
> * Remove defensive check for schedulers since the credit scheduler
> must always be present
>
> Changed since v3:
> * Add defensive check for schedulers in the linker
>
> Changed since v1:
> * rename the __start and __end symbols to better match
> the rest of the file
> ---
> xen/arch/arm/xen.lds.S | 4 ++++
> xen/arch/x86/xen.lds.S | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
> index 0488f37..f501a2f 100644
> --- a/xen/arch/arm/xen.lds.S
> +++ b/xen/arch/arm/xen.lds.S
> @@ -57,6 +57,10 @@ SECTIONS
> . = ALIGN(PAGE_SIZE);
> *(.data.page_aligned)
> *(.data)
> + . = ALIGN(8);
> + __start_schedulers_array = .;
> + *(.data.schedulers)
> + __end_schedulers_array = .;
> *(.data.rel)
> *(.data.rel.*)
> CONSTRUCTORS
> diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
> index e18e08f..c1ce027 100644
> --- a/xen/arch/x86/xen.lds.S
> +++ b/xen/arch/x86/xen.lds.S
> @@ -80,6 +80,10 @@ SECTIONS
> __stop___pre_ex_table = .;
>
> *(.data.read_mostly)
> + . = ALIGN(8);
> + __start_schedulers_array = .;
> + *(.data.schedulers)
> + __end_schedulers_array = .;
> *(.data.rel.ro)
> *(.data.rel.ro.*)
> } :text
> --
> 2.6.4
I am pretty sure, with Dario’s latest ACK on (2/5), that this patch is the only one in the series that has not been
ACKed yet. Is there anything else that I need to do to get this series in, especially since the (1/5) CONFIG_EXPERT
patch has already landed?
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 3/5] build: Alloc space for sched list in the link file
2016-01-20 14:34 ` Jonathan Creekmore
@ 2016-01-20 14:45 ` Ian Campbell
0 siblings, 0 replies; 12+ messages in thread
From: Ian Campbell @ 2016-01-20 14:45 UTC (permalink / raw)
To: Jonathan Creekmore, xen-devel
Cc: Keir Fraser, Stefano Stabellini, Jan Beulich, Andrew Cooper
On Wed, 2016-01-20 at 08:34 -0600, Jonathan Creekmore wrote:
> >
> > diff --git a/xen/arch/arm/xen.lds.S b/xen/arch/arm/xen.lds.S
> > index 0488f37..f501a2f 100644
> > --- a/xen/arch/arm/xen.lds.S
> > +++ b/xen/arch/arm/xen.lds.S
> > @@ -57,6 +57,10 @@ SECTIONS
> > . = ALIGN(PAGE_SIZE);
> > *(.data.page_aligned)
> > *(.data)
> > + . = ALIGN(8);
> > + __start_schedulers_array = .;
> > + *(.data.schedulers)
> > + __end_schedulers_array = .;
> > *(.data.rel)
> > *(.data.rel.*)
> > CONSTRUCTORS
For this ARM change:
Acked-by: Ian Campbell <ian.campbell@citrix.com>
(FWIW I'd have done #3, #4 and #5 all in one patch, but no need to rework
now).
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 4/5] sched: Register the schedulers into the list
2016-01-15 17:01 [PATCH v6 0/5] Allow schedulers to be selectable through Kconfig Jonathan Creekmore
` (2 preceding siblings ...)
2016-01-15 17:01 ` [PATCH v6 3/5] build: Alloc space for sched list in the link file Jonathan Creekmore
@ 2016-01-15 17:01 ` Jonathan Creekmore
2016-01-15 17:01 ` [PATCH v6 5/5] sched: Use the auto-generated list of schedulers Jonathan Creekmore
4 siblings, 0 replies; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:01 UTC (permalink / raw)
To: xen-devel
Cc: George Dunlap, Jonathan Creekmore, Dario Faggioli,
Josh Whitehead, Robert VanVossen
Adds a simple macro to place a pointer to a scheduler into an array
section at compile time. Also, goes ahead and generates the array
entries with each of the schedulers.
CC: George Dunlap <george.dunlap@eu.citrix.com>
CC: Dario Faggioli <dario.faggioli@citrix.com>
CC: Josh Whitehead <josh.whitehead@dornerworks.com>
CC: Robert VanVossen <robert.vanvossen@dornerworks.com>
Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
Acked-by: Dario Faggioli <dario.faggioli@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
xen/common/sched_arinc653.c | 2 ++
xen/common/sched_credit.c | 2 ++
xen/common/sched_credit2.c | 2 ++
xen/common/sched_rt.c | 2 ++
xen/include/xen/sched-if.h | 2 ++
5 files changed, 10 insertions(+)
diff --git a/xen/common/sched_arinc653.c b/xen/common/sched_arinc653.c
index dbe02ed..3b59514 100644
--- a/xen/common/sched_arinc653.c
+++ b/xen/common/sched_arinc653.c
@@ -767,6 +767,8 @@ const struct scheduler sched_arinc653_def = {
.tick_resume = NULL,
};
+REGISTER_SCHEDULER(sched_arinc653_def);
+
/*
* Local variables:
* mode: C
diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index 02afddf..1645f9c 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -2027,3 +2027,5 @@ const struct scheduler sched_credit_def = {
.tick_suspend = csched_tick_suspend,
.tick_resume = csched_tick_resume,
};
+
+REGISTER_SCHEDULER(sched_credit_def);
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 3c49ffa..38b02d0 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -2228,3 +2228,5 @@ const struct scheduler sched_credit2_def = {
.alloc_domdata = csched2_alloc_domdata,
.free_domdata = csched2_free_domdata,
};
+
+REGISTER_SCHEDULER(sched_credit2_def);
diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c
index 3f1d047..7640cd0 100644
--- a/xen/common/sched_rt.c
+++ b/xen/common/sched_rt.c
@@ -1199,3 +1199,5 @@ const struct scheduler sched_rtds_def = {
.wake = rt_vcpu_wake,
.context_saved = rt_context_saved,
};
+
+REGISTER_SCHEDULER(sched_rtds_def);
diff --git a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h
index 493d43f..9c6e0f5 100644
--- a/xen/include/xen/sched-if.h
+++ b/xen/include/xen/sched-if.h
@@ -170,6 +170,8 @@ extern const struct scheduler sched_credit2_def;
extern const struct scheduler sched_arinc653_def;
extern const struct scheduler sched_rtds_def;
+#define REGISTER_SCHEDULER(x) static const struct scheduler *x##_entry \
+ __used_section(".data.schedulers") = &x;
struct cpupool
{
--
2.6.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v6 5/5] sched: Use the auto-generated list of schedulers
2016-01-15 17:01 [PATCH v6 0/5] Allow schedulers to be selectable through Kconfig Jonathan Creekmore
` (3 preceding siblings ...)
2016-01-15 17:01 ` [PATCH v6 4/5] sched: Register the schedulers into the list Jonathan Creekmore
@ 2016-01-15 17:01 ` Jonathan Creekmore
4 siblings, 0 replies; 12+ messages in thread
From: Jonathan Creekmore @ 2016-01-15 17:01 UTC (permalink / raw)
To: xen-devel; +Cc: George Dunlap, Jonathan Creekmore, Dario Faggioli
Instead of having a manually-curated list of schedulers, use the array
that was auto-generated simply by compiling in the scheduler files as
the sole source of truth of the available schedulers.
CC: George Dunlap <george.dunlap@eu.citrix.com>
CC: Dario Faggioli <dario.faggioli@citrix.com>
Signed-off-by: Jonathan Creekmore <jonathan.creekmore@gmail.com>
Acked-by: Dario Faggioli <dario.faggioli@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Doug Goldstein <cardoe@cardoe.com>
---
Changed since v6:
* Make schedulers a #define instead of a static const **
Changed since v5:
* Remove extra size field that was accidentally left in
Changed since v1:
* Simplify the calculation of the number of schedulers
* Make the scheduler ops structures static to their files
---
xen/common/sched_arinc653.c | 2 +-
xen/common/sched_credit.c | 2 +-
xen/common/sched_credit2.c | 2 +-
xen/common/sched_rt.c | 2 +-
xen/common/schedule.c | 23 ++++++-----------------
xen/include/xen/sched-if.h | 5 -----
6 files changed, 10 insertions(+), 26 deletions(-)
diff --git a/xen/common/sched_arinc653.c b/xen/common/sched_arinc653.c
index 3b59514..0606988 100644
--- a/xen/common/sched_arinc653.c
+++ b/xen/common/sched_arinc653.c
@@ -724,7 +724,7 @@ a653sched_adjust_global(const struct scheduler *ops,
* callback functions.
* The symbol must be visible to the rest of Xen at link time.
*/
-const struct scheduler sched_arinc653_def = {
+static const struct scheduler sched_arinc653_def = {
.name = "ARINC 653 Scheduler",
.opt_name = "arinc653",
.sched_id = XEN_SCHEDULER_ARINC653,
diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c
index 1645f9c..03fb2c2 100644
--- a/xen/common/sched_credit.c
+++ b/xen/common/sched_credit.c
@@ -1991,7 +1991,7 @@ static void csched_tick_resume(const struct scheduler *ops, unsigned int cpu)
static struct csched_private _csched_priv;
-const struct scheduler sched_credit_def = {
+static const struct scheduler sched_credit_def = {
.name = "SMP Credit Scheduler",
.opt_name = "credit",
.sched_id = XEN_SCHEDULER_CREDIT,
diff --git a/xen/common/sched_credit2.c b/xen/common/sched_credit2.c
index 38b02d0..78220a7 100644
--- a/xen/common/sched_credit2.c
+++ b/xen/common/sched_credit2.c
@@ -2194,7 +2194,7 @@ csched2_deinit(const struct scheduler *ops)
static struct csched2_private _csched2_priv;
-const struct scheduler sched_credit2_def = {
+static const struct scheduler sched_credit2_def = {
.name = "SMP Credit Scheduler rev2",
.opt_name = "credit2",
.sched_id = XEN_SCHEDULER_CREDIT2,
diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c
index 7640cd0..2e5430f 100644
--- a/xen/common/sched_rt.c
+++ b/xen/common/sched_rt.c
@@ -1170,7 +1170,7 @@ rt_dom_cntl(
static struct rt_private _rt_priv;
-const struct scheduler sched_rtds_def = {
+static const struct scheduler sched_rtds_def = {
.name = "SMP RTDS Scheduler",
.opt_name = "rtds",
.sched_id = XEN_SCHEDULER_RTDS,
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 2f98a48..7306d71 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -64,20 +64,9 @@ static void poll_timer_fn(void *data);
DEFINE_PER_CPU(struct schedule_data, schedule_data);
DEFINE_PER_CPU(struct scheduler *, scheduler);
-static const struct scheduler *schedulers[] = {
-#ifdef CONFIG_SCHED_CREDIT
- &sched_credit_def,
-#endif
-#ifdef CONFIG_SCHED_CREDIT2
- &sched_credit2_def,
-#endif
-#ifdef CONFIG_SCHED_ARINC653
- &sched_arinc653_def,
-#endif
-#ifdef CONFIG_SCHED_RTDS
- &sched_rtds_def,
-#endif
-};
+extern const struct scheduler *__start_schedulers_array[], *__end_schedulers_array[];
+#define NUM_SCHEDULERS (__end_schedulers_array - __start_schedulers_array)
+#define schedulers __start_schedulers_array
static struct scheduler __read_mostly ops;
@@ -1468,7 +1457,7 @@ void __init scheduler_init(void)
open_softirq(SCHEDULE_SOFTIRQ, schedule);
- for ( i = 0; i < ARRAY_SIZE(schedulers); i++ )
+ for ( i = 0; i < NUM_SCHEDULERS; i++)
{
if ( schedulers[i]->global_init && schedulers[i]->global_init() < 0 )
schedulers[i] = NULL;
@@ -1479,7 +1468,7 @@ void __init scheduler_init(void)
if ( !ops.name )
{
printk("Could not find scheduler: %s\n", opt_sched);
- for ( i = 0; i < ARRAY_SIZE(schedulers); i++ )
+ for ( i = 0; i < NUM_SCHEDULERS; i++ )
if ( schedulers[i] )
{
ops = *schedulers[i];
@@ -1599,7 +1588,7 @@ struct scheduler *scheduler_alloc(unsigned int sched_id, int *perr)
int i;
struct scheduler *sched;
- for ( i = 0; i < ARRAY_SIZE(schedulers); i++ )
+ for ( i = 0; i < NUM_SCHEDULERS; i++ )
if ( schedulers[i] && schedulers[i]->sched_id == sched_id )
goto found;
*perr = -ENOENT;
diff --git a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h
index 9c6e0f5..66dc9c8 100644
--- a/xen/include/xen/sched-if.h
+++ b/xen/include/xen/sched-if.h
@@ -165,11 +165,6 @@ struct scheduler {
void (*tick_resume) (const struct scheduler *, unsigned int);
};
-extern const struct scheduler sched_credit_def;
-extern const struct scheduler sched_credit2_def;
-extern const struct scheduler sched_arinc653_def;
-extern const struct scheduler sched_rtds_def;
-
#define REGISTER_SCHEDULER(x) static const struct scheduler *x##_entry \
__used_section(".data.schedulers") = &x;
--
2.6.4
^ permalink raw reply related [flat|nested] 12+ messages in thread