tmp_suning_uos_patched/Documentation
Paul Mackerras 371fefd6f2 KVM: PPC: Allow book3s_hv guests to use SMT processor modes
This lifts the restriction that book3s_hv guests can only run one
hardware thread per core, and allows them to use up to 4 threads
per core on POWER7.  The host still has to run single-threaded.

This capability is advertised to qemu through a new KVM_CAP_PPC_SMT
capability.  The return value of the ioctl querying this capability
is the number of vcpus per virtual CPU core (vcore), currently 4.

To use this, the host kernel should be booted with all threads
active, and then all the secondary threads should be offlined.
This will put the secondary threads into nap mode.  KVM will then
wake them from nap mode and use them for running guest code (while
they are still offline).  To wake the secondary threads, we send
them an IPI using a new xics_wake_cpu() function, implemented in
arch/powerpc/sysdev/xics/icp-native.c.  In other words, at this stage
we assume that the platform has a XICS interrupt controller and
we are using icp-native.c to drive it.  Since the woken thread will
need to acknowledge and clear the IPI, we also export the base
physical address of the XICS registers using kvmppc_set_xics_phys()
for use in the low-level KVM book3s code.

When a vcpu is created, it is assigned to a virtual CPU core.
The vcore number is obtained by dividing the vcpu number by the
number of threads per core in the host.  This number is exported
to userspace via the KVM_CAP_PPC_SMT capability.  If qemu wishes
to run the guest in single-threaded mode, it should make all vcpu
numbers be multiples of the number of threads per core.

We distinguish three states of a vcpu: runnable (i.e., ready to execute
the guest), blocked (that is, idle), and busy in host.  We currently
implement a policy that the vcore can run only when all its threads
are runnable or blocked.  This way, if a vcpu needs to execute elsewhere
in the kernel or in qemu, it can do so without being starved of CPU
by the other vcpus.

When a vcore starts to run, it executes in the context of one of the
vcpu threads.  The other vcpu threads all go to sleep and stay asleep
until something happens requiring the vcpu thread to return to qemu,
or to wake up to run the vcore (this can happen when another vcpu
thread goes from busy in host state to blocked).

It can happen that a vcpu goes from blocked to runnable state (e.g.
because of an interrupt), and the vcore it belongs to is already
running.  In that case it can start to run immediately as long as
the none of the vcpus in the vcore have started to exit the guest.
We send the next free thread in the vcore an IPI to get it to start
to execute the guest.  It synchronizes with the other threads via
the vcore->entry_exit_count field to make sure that it doesn't go
into the guest if the other vcpus are exiting by the time that it
is ready to actually enter the guest.

Note that there is no fixed relationship between the hardware thread
number and the vcpu number.  Hardware threads are assigned to vcpus
as they become runnable, so we will always use the lower-numbered
hardware threads in preference to higher-numbered threads if not all
the vcpus in the vcore are runnable, regardless of which vcpus are
runnable.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2011-07-12 13:16:57 +03:00
..
ABI backlight: new driver for the ADP8870 backlight devices 2011-06-15 20:03:59 -07:00
accounting Documentation: update cgroupfs mount point 2011-06-15 21:52:50 -07:00
acpi ACPI: Split out custom_method functionality into an own driver 2011-05-29 01:50:40 -04:00
aoe
arm Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into devel-stable 2011-05-25 21:47:48 +01:00
auxdisplay
blackfin
block Fix common misspellings 2011-03-31 11:26:23 -03:00
blockdev cciss: add cciss_tape_cmds module paramter 2011-05-06 08:23:59 -06:00
cdrom
cgroups Documentation: fix cgroup blkio throttle filenames 2011-07-06 13:17:51 -07:00
connector
console
cpu-freq
cpuidle
cris
crypto
development-process docs: update the development process document 2011-03-25 14:30:31 -06:00
device-mapper Fix common misspellings 2011-03-31 11:26:23 -03:00
devicetree Merge branches 'devel', 'devel-stable' and 'fixes' into for-linus 2011-05-27 22:59:57 +01:00
DocBook Merge git://git.infradead.org/mtd-2.6 2011-05-27 20:06:53 -07:00
driver-model driver core: remove the driver-model structures from the documentation 2011-05-06 18:01:05 -07:00
dvb Merge branch 'for-linus2' of git://git.profusion.mobi/users/lucas/linux-2.6 2011-04-07 11:14:49 -07:00
early-userspace
fault-injection
fb Fix common misspellings 2011-03-31 11:26:23 -03:00
filesystems rcu: Use softirq to address performance regression 2011-06-14 15:25:39 -07:00
firmware_class
frv
hid HID: Move hiddev.txt to the new Documentation/hid directory 2011-03-22 11:43:51 +01:00
hwmon hwmon: (k10temp) Update documentation for Fam12h 2011-07-03 13:32:54 +02:00
i2c i2c-i801: SMBus patch for Intel Panther Point DeviceIDs 2011-05-24 20:58:49 +02:00
i2o Fix common misspellings 2011-03-31 11:26:23 -03:00
ia64 Fix common misspellings 2011-03-31 11:26:23 -03:00
ide
infiniband
input Input: elantech - describe further the protocol 2011-05-16 22:48:24 -07:00
ioctl Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc 2011-05-25 16:55:55 -07:00
isdn Fix common misspellings 2011-03-31 11:26:23 -03:00
ja_JP HOWTO: sync up Documentaion/ja_JP/HOWTO 2011-04-19 16:53:45 -07:00
kbuild Merge branch 'kconfig-for-40' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 2011-05-25 16:54:01 -07:00
kdump
ko_KR
laptops acer-wmi: Delete out-of-date documentation 2011-05-27 12:36:46 -04:00
leds Documentation: consolidate leds files to leds/ subdir 2011-04-04 17:51:47 -07:00
m68k
make
mips Fix common misspellings 2011-03-31 11:26:23 -03:00
misc-devices Fix common misspellings 2011-03-31 11:26:23 -03:00
mmc mmc: MMC boot partitions support. 2011-05-24 21:01:21 -04:00
mn10300
mtd
namespaces
netlabel
networking Merge branch 'docs-move' of git://git.kernel.org/pub/scm/linux/kernel/git/rdunlap/linux-docs 2011-05-27 10:25:02 -07:00
nfc
parisc
PCI Fix common misspellings 2011-03-31 11:26:23 -03:00
pcmcia
power PM / Runtime: Update documentation regarding driver removal 2011-07-02 14:27:11 +02:00
powerpc Fix common misspellings 2011-03-31 11:26:23 -03:00
pps
prctl
pti Kernel documentation for the PTI feature. 2011-05-13 16:31:00 -07:00
ptp ptp: Added a brand new class driver for ptp clocks. 2011-05-23 13:01:00 -07:00
rapidio rapidio: add RapidIO documentation 2011-03-23 19:46:41 -07:00
RCU rcu: Decrease memory-barrier usage based on semi-formal proof 2011-05-26 09:42:23 -07:00
s390 Documentation: fix minor typos/spelling 2011-04-04 17:51:47 -07:00
scheduler Documentation: update cgroupfs mount point 2011-06-15 21:52:50 -07:00
scsi [SCSI] megaraid_sas: Version and Changelog update 2011-05-24 12:36:06 -04:00
security Create Documentation/security/, 2011-05-19 15:59:38 -07:00
serial Fix common misspellings 2011-03-31 11:26:23 -03:00
sh
sound Merge branch 'topic/hda' into for-linus 2011-05-22 10:01:35 +02:00
sparc
spi Fix common misspellings 2011-03-31 11:26:23 -03:00
sysctl coredump: add support for exe_file in core name 2011-05-26 17:12:36 -07:00
target [SCSI] tcm_mod_builder.py: Fix generated *_drop_nodeacl() handler 2011-03-23 11:36:45 -05:00
telephony Fix common misspellings 2011-03-31 11:26:23 -03:00
thermal
timers doc: timers-howto: fix a typo ("unsgined") 2011-05-17 10:52:02 +02:00
trace sched: Get rid of lock_depth 2011-04-24 13:18:38 +02:00
usb USB: Fix up URB error codes to reflect implementation. 2011-06-17 11:28:21 -07:00
video4linux [media] uvcvideo: Add driver documentation 2011-05-20 09:30:36 -03:00
virtual KVM: PPC: Allow book3s_hv guests to use SMT processor modes 2011-07-12 13:16:57 +03:00
vm Documentation: update cgroupfs mount point 2011-06-15 21:52:50 -07:00
w1 Fix common misspellings 2011-03-31 11:26:23 -03:00
watchdog Fix common misspellings 2011-03-31 11:26:23 -03:00
wimax
x86 x86, gart: Rename pci-gart_64.c to amd_gart_64.c 2011-05-10 17:22:06 +02:00
zh_CN Translated Documentation/email-clients.txt 2011-05-06 17:59:20 -07:00
.gitignore
00-INDEX Merge branch 'docs-security' into docs-move 2011-05-20 09:10:04 -07:00
applying-patches.txt
atomic_ops.txt Documentation/atomic_ops.txt: avoid volatile in sample code 2011-05-26 17:12:34 -07:00
bad_memory.txt
basic_profiling.txt
binfmt_misc.txt
braille-console.txt
bt8xxgpio.txt
btmrvl.txt
BUG-HUNTING
bus-virt-phys-mapping.txt
cachetlb.txt mm: convert mm->cpu_vm_cpumask into cpumask_var_t 2011-05-25 08:39:21 -07:00
Changes Documentation/Changes: minor corrections 2011-03-22 17:44:17 -07:00
circular-buffers.txt
coccinelle.txt
CodingStyle Documentation: update CodingStyle memory allocators 2011-07-06 13:17:51 -07:00
cpu-hotplug.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
cpu-load.txt
cputopology.txt
dcdbas.txt
debugging-modules.txt
debugging-via-ohci1394.txt
dell_rbu.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
devices.txt
DMA-API-HOWTO.txt
DMA-API.txt
DMA-attributes.txt
DMA-ISA-LPC.txt
dmaengine.txt dmaengine: Add API documentation for slave dma usage 2011-05-25 14:49:20 -07:00
dontdiff Documentation: update dontdiff file 2011-05-23 15:14:11 -07:00
dynamic-debug-howto.txt Merge branch 'docs-next' of git://git.lwn.net/linux-2.6 2011-03-27 19:46:59 -07:00
edac.txt Merge branch 'for-linus2' of git://git.profusion.mobi/users/lucas/linux-2.6 2011-04-07 11:14:49 -07:00
eisa.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
email-clients.txt
feature-removal-schedule.txt Documentation/feature-removal-schedule.txt: remove ns_cgroup from feature-removal-schedule.txt 2011-06-15 20:04:02 -07:00
flexible-arrays.txt flex_array: flex_array_prealloc takes a number of elements, not an end 2011-04-28 16:12:47 -04:00
futex-requeue-pi.txt
gcov.txt
gpio.txt
highuid.txt
HOWTO Documentation: update LXR web link 2011-05-23 15:14:11 -07:00
hw_random.txt
hwspinlock.txt
init.txt
initrd.txt
intel_txt.txt
Intel-IOMMU.txt
io_ordering.txt
io-mapping.txt
iostats.txt Documentation/iostats.txt: bit-size reference etc. 2011-03-23 20:44:18 +01:00
IPMI.txt
IRQ-affinity.txt bitmap, irq: add smp_affinity_list interface to /proc/irq 2011-05-25 08:39:45 -07:00
IRQ.txt
irqflags-tracing.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
isapnp.txt
java.txt
kernel-doc-nano-HOWTO.txt
kernel-docs.txt
kernel-parameters.txt usb-storage: redo incorrect reads 2011-06-07 09:05:42 -07:00
kmemcheck.txt
kmemleak.txt Documentation: update kmemleak supported archs 2011-06-15 21:52:50 -07:00
kobject.txt
kprobes.txt
kref.txt
ldm.txt
local_ops.txt
lockdep-design.txt
lockstat.txt Documentation: Add statistics about nested locks 2011-05-28 17:03:29 +02:00
logo.gif
logo.txt
magic-number.txt
Makefile
ManagementStyle
mca.txt
md.txt md:Documentation/md.txt - fix typo 2011-06-09 11:43:04 +10:00
media-framework.txt Fix common misspellings 2011-03-31 11:26:23 -03:00
memory-barriers.txt
memory-hotplug.txt
memory.txt
mono.txt
mutex-design.txt
nmi_watchdog.txt
nommu-mmap.txt
numastat.txt
oops-tracing.txt
padata.txt
parport-lowlevel.txt
parport.txt
pi-futex.txt
pnp.txt
preempt-locking.txt
printk-formats.txt Documentation: update printk-formats.txt 2011-06-15 21:52:50 -07:00
prio_tree.txt
rbtree.txt
rfkill.txt
robust-futex-ABI.txt
robust-futexes.txt
rt-mutex-design.txt
rt-mutex.txt
rtc.txt
SAK.txt
SecurityBugs Fix common misspellings 2011-03-31 11:26:23 -03:00
serial-console.txt
sgi-ioc4.txt
sgi-visws.txt
SM501.txt
sparse.txt
spinlocks.txt
stable_api_nonsense.txt doc: stable_api_nonsense.txt: fix paragraph to make more sense. 2011-03-30 12:02:05 +02:00
stable_kernel_rules.txt
SubmitChecklist
SubmittingDrivers Fix common misspellings 2011-03-31 11:26:23 -03:00
SubmittingPatches Documentation: update GregKH links 2011-05-23 15:14:11 -07:00
svga.txt
sysfs-rules.txt
sysrq.txt
unaligned-memory-access.txt
unicode.txt
unshare.txt
VGA-softcursor.txt
vgaarbiter.txt Documentation: fix vgaarbiter.txt typos etc. 2011-05-23 15:14:11 -07:00
video-output.txt
volatile-considered-harmful.txt
workqueue.txt workqueue: Document debugging tricks 2011-03-31 13:40:42 +02:00
xz.txt
zorro.txt