2007-08-08 22:15:44

by Andrew Morton

[permalink] [raw]
Subject: kvm warning


ia64 allmodconfig says

drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM' refers to undefined symbol 'PREEMPT_NOTIFIERS'

Because of

commit 8928fb48c7a7f9053a55f1d0023cbc533f2b3663
Author: Avi Kivity <[email protected]>
Date: Wed Jul 11 18:17:21 2007 +0300

KVM: Use the scheduler preemption notifiers to make kvm preemptible

Current kvm disables preemption while the new virtualization registers are
in use. This of course is not very good for latency sensitive workloads (on
use of virtualization is to offload user interface and other latency
insensitive stuff to a container, so that it is easier to analyze the
remaining workload). This patch re-enables preemption for kvm; preemption
is now only disabled when switching the registers in and out, and during
the switch to guest mode and back.

Contains fixes from Shaohua Li <[email protected]>.

Signed-off-by: Avi Kivity <[email protected]>

--- a/drivers/kvm/Kconfig
+++ b/drivers/kvm/Kconfig
@@ -11,6 +11,7 @@ if VIRTUALIZATION
config KVM
tristate "Kernel-based Virtual Machine (KVM) support"
depends on X86 && EXPERIMENTAL
+ select PREEMPT_NOTIFIERS
select ANON_INODES
---help---
Support hosting fully virtualized guest machines using hardware
...


a) is kvm supported on ia64 at all??

b) `select' is evil. Just Don't Do It.

c) `select' is especially evil when it's done on some kernel-internal
secret symbol like PREEMPT_NOTIFIERS.

d) I can't see anything else in the kernel which sets or clears
PREEMPT_NOTIFIERS so I'm rather wonderring why the config option exists
at all.

e) sched developers may not like KVM reaching over and twiddling their
knobs for them.


It all needs more thought, I think...


2007-08-08 22:21:20

by Ingo Molnar

[permalink] [raw]
Subject: Re: kvm warning


* Andrew Morton <[email protected]> wrote:

> ia64 allmodconfig says
>
> drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM'
> refers to undefined symbol 'PREEMPT_NOTIFIERS'

hm, why doesnt ia64 pick up kernel/Kconfig.preempt, like all the other
arches? Due to that ia64 also misses out on voluntary preempt and on
preempt-bkl.

Ingo

2007-08-08 22:48:18

by Avi Kivity

[permalink] [raw]
Subject: Re: kvm warning

Ingo Molnar wrote:
> * Andrew Morton <[email protected]> wrote:
>
>
>> ia64 allmodconfig says
>>
>> drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM'
>> refers to undefined symbol 'PREEMPT_NOTIFIERS'
>>
>
> hm, why doesnt ia64 pick up kernel/Kconfig.preempt, like all the other
> arches? Due to that ia64 also misses out on voluntary preempt and on
> preempt-bkl.
>
>

Even more hm, how does ia64 manage to enable kvm? It 'depends on X86'
at this moment.


2007-08-08 23:00:04

by Andrew Morton

[permalink] [raw]
Subject: Re: kvm warning

On Thu, 09 Aug 2007 01:48:07 +0300
Avi Kivity <[email protected]> wrote:

> Ingo Molnar wrote:
> > * Andrew Morton <[email protected]> wrote:
> >
> >
> >> ia64 allmodconfig says
> >>
> >> drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM'
> >> refers to undefined symbol 'PREEMPT_NOTIFIERS'
> >>
> >
> > hm, why doesnt ia64 pick up kernel/Kconfig.preempt, like all the other
> > arches? Due to that ia64 also misses out on voluntary preempt and on
> > preempt-bkl.
> >
> >
>
> Even more hm, how does ia64 manage to enable kvm? It 'depends on X86'
> at this moment.
>

beats me. CONFIG_KVM doesn't get set. But it seems that kconfig wants
to do error-checking on that item anyway.



btw, testing of Kconfig can be done for any architecture without
installation of a toolchain for that architecture. Set $ARCH and run
mrproper then use menuconfig/oldconfig/allmodconfig/allconfig as usual.

Judging by the number of Kconfig problem I see, this is a big secret ;)

2007-08-08 23:09:21

by Avi Kivity

[permalink] [raw]
Subject: Re: kvm warning

Andrew Morton wrote:
> On Thu, 09 Aug 2007 01:48:07 +0300
> Avi Kivity <[email protected]> wrote:
>
>
>> Ingo Molnar wrote:
>>
>>> * Andrew Morton <[email protected]> wrote:
>>>
>>>
>>>
>>>> ia64 allmodconfig says
>>>>
>>>> drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM'
>>>> refers to undefined symbol 'PREEMPT_NOTIFIERS'
>>>>
>>>>
>>> hm, why doesnt ia64 pick up kernel/Kconfig.preempt, like all the other
>>> arches? Due to that ia64 also misses out on voluntary preempt and on
>>> preempt-bkl.
>>>
>>>
>>>
>> Even more hm, how does ia64 manage to enable kvm? It 'depends on X86'
>> at this moment.
>>
>>
>
> beats me. CONFIG_KVM doesn't get set. But it seems that kconfig wants
> to do error-checking on that item anyway.
>
>
>

I could do a 'select PREEMPT_NOTIFIERS if X86' but it seems silly. I'd
call it a Kconfig bug.



2007-08-13 17:35:40

by Satyam Sharma

[permalink] [raw]
Subject: Re: kvm warning

On 8/9/07, Avi Kivity <[email protected]> wrote:
> Andrew Morton wrote:
> > On Thu, 09 Aug 2007 01:48:07 +0300
> > Avi Kivity <[email protected]> wrote:
> >
> >> Ingo Molnar wrote:
> >>
> >>> * Andrew Morton <[email protected]> wrote:
> >>>
> >>>> ia64 allmodconfig says
> >>>>
> >>>> drivers/kvm/Kconfig:14:warning: 'select' used by config symbol 'KVM'
> >>>> refers to undefined symbol 'PREEMPT_NOTIFIERS'
> >>>>
> >>> hm, why doesnt ia64 pick up kernel/Kconfig.preempt, like all the other
> >>> arches? Due to that ia64 also misses out on voluntary preempt and on
> >>> preempt-bkl.
> >>>
> >> Even more hm, how does ia64 manage to enable kvm? It 'depends on X86'
> >> at this moment.
> >
> > beats me. CONFIG_KVM doesn't get set. But it seems that kconfig wants
> > to do error-checking on that item anyway.
>
> I could do a 'select PREEMPT_NOTIFIERS if X86' but it seems silly. I'd
> call it a Kconfig bug.

I remember this issue well [1] ... it's a Kconfig deficiency indeed. Basically
kconfig options for generic stuff cannot use "select" for symbols that are
defined only for specific archs (here ia64 synthetically created this situation
by failing to source "kernel/Kconfig.preempt" in its arch/ia64/Kconfig).
Leads to no real build problems, but causes these bogus warnings to
be printed on other archs (that don't have that symbol visible to them).

Possible solutions could be to (1) source "kernel/Kconfig.preempt" from
arch/ia64/Kconfig, or (2) Use "default y if KVM" for PREEMPT_NOTIFIERS
(but this would be kludgy, horrible and tasteless). I'm not sure if
"select PREEMPT_NOTIFIERS if X86" would cut it to get rid of the bogus
warnings,
though.

Solution (1) above sounds preferable, unless there are mysterious reasons
why ia64 wants to avoid Kconfig.preempt (adding Tony Luck to Cc:).


Satyam

[1] Last time this happened was with something called ATARI_KBD_CORE.
I submitted a patch that unfortunately degenerated into a flamewar :-) The
bogus warnings remained (causing more traffic) for a month or so, before
an alternate solution got finally merged.

2007-08-13 17:39:50

by Luck, Tony

[permalink] [raw]
Subject: RE: kvm warning

> Solution (1) above sounds preferable, unless there are mysterious reasons
> why ia64 wants to avoid Kconfig.preempt (adding Tony Luck to Cc:).

Send me a patch and unless it causes more problems than it solves, I'll
put it in.

-Tony

2007-08-13 18:15:32

by Satyam Sharma

[permalink] [raw]
Subject: RE: kvm warning



On Mon, 13 Aug 2007, Luck, Tony wrote:

> > Solution (1) above sounds preferable, unless there are mysterious reasons
> > why ia64 wants to avoid Kconfig.preempt (adding Tony Luck to Cc:).
>
> Send me a patch and unless it causes more problems than it solves, I'll
> put it in.


[PATCH] ia64: Include Kconfig.preempt

arch/ia64/Kconfig failed to include kernel/Kconfig.preempt that meant it
did not support PREEMPT_VOLUNTARY and PREEMPT_BKL (inadvertently).
This was recently noticed when the newly-added PREEMPT_NOTIFIERS in
Kconfig.preempt that was "select"ed from drivers/kvm/Kconfig (therefore)
started giving bogus warnings ('select' used by config symbol 'KVM' refers
to undefined symbol 'PREEMPT_NOTIFIERS') on ia64 builds.

So let's remove the open-coded definition of CONFIG_PREEMPT in
arch/ia64/Kconfig and replace it with just including Kconfig.preempt
instead, like the other archs do.

Signed-off-by: Satyam Sharma <[email protected]>

---

arch/ia64/Kconfig | 12 +-----------
1 files changed, 1 insertions(+), 11 deletions(-)

diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 21aa4fc..8c39913 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -327,17 +327,7 @@ config FORCE_CPEI_RETARGET
This option it useful to enable this feature on older BIOS's as well.
You can also enable this by using boot command line option force_cpei=1.

-config PREEMPT
- bool "Preemptible Kernel"
- help
- This option reduces the latency of the kernel when reacting to
- real-time or interactive events by allowing a low priority process to
- be preempted even if it is in kernel mode executing a system call.
- This allows applications to run more reliably even when the system is
- under load.
-
- Say Y here if you are building a kernel for a desktop, embedded
- or real-time system. Say N if you are unsure.
+source "kernel/Kconfig.preempt"

source "mm/Kconfig"