tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

attaching cpu via lapic



Hello,

I'm trying to improve the semantics around x86 lapic vs. cpu, with a
view to wedging in the concept of "vcpu"s.

TLDR: please review this patch:
http://ftp.netbsd.org/pub/NetBSD/misc/cherry/tmp/attach-cpu-with-lapic.diff

Essentially, the idea is that when the kernel runs under a hypervisor
which it can detect, and this hypervisory exports a "virtual cpu" to the
guest OS, this can be understood in the context of NetBSD's cpu device.

The current attachment is as follows:

'attach cpu at cpubus'

which is then constrained via:

'cpu* at mainbus'

similarly in the virtualised case:
'attach vcpu at xendevbus'

and,

'vcpu* at hypervisor'

I've thought of a couple of schemes, but my current thought is as
follows:

attach cpu at cpubus with lapic
attach cpu at xendevbus with xvcpu

cpu* at mainbus #(via x86/(mpacpi.c|mpbios.c) as usual)
cpu* at hypervisor #(via xen/hypervisor.c as usual)

The idea is that the attachment is mediated by the lapic/xvcpu
respectively which can then decide how to go forward (vcpus on xen pvhvm
don't need to fully initialise the underlying cpu, for eg: whereas
physical cpus on xen dom0 cannot fully initialise, since xen disallows
full access to the corresponding lapic).

The situation for XEN is as follows:

PV domU - only vcpu
HVM domU - only cpu
PVHVM domU - cpu:vcpu -> 1:1
PVH dom0 - cpu:vcpu -> 1:1 (IIUC)
PV dom0 - cpu:vcpu -> vcpu can be fewer than cpu

Thus I'm trying to dissect the attach path of x86 cpu in such a way that
it makes the least amount of 'platform' assumptions. The above patch is
a first cut at taking out 'lapic' related assumptions in the native cpu
attach path.

Comments ?
-- 
~cherry


Home | Main Index | Thread Index | Old Index