On Wed, Oct 17, 2012 at 4:29 PM, Peter Maydell <peter.maydell@xxxxxxxxxx> wrote: > On 14 October 2012 01:04, Christoffer Dall > <c.dall@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> On ARM (and possibly other architectures) some bits are specific to the >> model being emulated for the guest and user space needs a way to tell >> the kernel about those bits. An example is mmio device base addresses, >> where KVM must know the base address for a given device to properly >> emulate mmio accesses within a certain address range or directly map a >> device with virtualiation extensions into the guest address space. >> >> We try to make this API slightly more generic than for our specific use, >> but so far only the VGIC uses this feature. >> >> Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx> >> --- >> Documentation/virtual/kvm/api.txt | 30 ++++++++++++++++++++++++++++++ >> arch/arm/include/asm/kvm.h | 13 +++++++++++++ >> arch/arm/include/asm/kvm_mmu.h | 1 + >> arch/arm/include/asm/kvm_vgic.h | 6 ++++++ >> arch/arm/kvm/arm.c | 31 ++++++++++++++++++++++++++++++- >> arch/arm/kvm/vgic.c | 34 +++++++++++++++++++++++++++++++--- >> include/linux/kvm.h | 8 ++++++++ >> 7 files changed, 119 insertions(+), 4 deletions(-) >> >> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt >> index 26e953d..30ddcac 100644 >> --- a/Documentation/virtual/kvm/api.txt >> +++ b/Documentation/virtual/kvm/api.txt >> @@ -2118,6 +2118,36 @@ for the emulated platofrm (see KVM_SET_DEVICE_ADDRESS), but before the CPU is >> initally run. >> >> >> +4.80 KVM_SET_DEVICE_ADDRESS >> + >> +Capability: KVM_CAP_SET_DEVICE_ADDRESS >> +Architectures: arm >> +Type: vm ioctl >> +Parameters: struct kvm_device_address (in) >> +Returns: 0 on success, -1 on error >> +Errors: >> + ENODEV: The device id is unknwown > > "unknown" > >> + ENXIO: Device not supported in configuration > > "in this configuration" ? (I'm guessing this is for "you tried to > map a GIC when this CPU doesn't have a GIC" and similar errors?) > >> + E2BIG: Address outside of guest physical address space > > I would say "outside" rather than "outside of" here. > >> + >> +struct kvm_device_address { >> + __u32 id; >> + __u64 addr; >> +}; >> + >> +Specify a device address in the guest's physical address space where guests >> +can access emulated or directly exposed devices, which the host kernel needs >> +to know about. The id field is an architecture specific identifier for a >> +specific device. >> + >> +ARM divides the id field into two parts, a device ID and an address type id > > We should be consistent about whether ID is capitalised or not. > indeed >> +specific to the individual device. >> + >> + bits: | 31 ... 16 | 15 ... 0 | >> + field: | device id | addr type id | > > This doesn't say whether userspace is allowed to make this ioctl > multiple times for the same device. This could be any of: > * undefined behaviour > * second call fails with some errno > * second call overrides first one > I added an error condition EEXIST, but since this is trying to not be arm-vgic specific this is really up to the individual device - maybe we can have some polymorphic device that moves around later. > It also doesn't say that you're supposed to call this after CREATE > and before INIT of the irqchip. (Nor does it say what happens if > you call it at some other time.) > same non-device specific argument as above. Thanks, -Christoffer -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html