On 13 May 2018 at 15:35, Eric Auger <eric.au...@redhat.com> wrote: > for KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION attribute, the attribute > data pointed to by kvm_device_attr.addr is a OR of the > redistributor region address and other fields such as the index > of the redistributor region and the number of redistributors the > region can contain. > > The existing machine init done notifier framework sets the address > field to the actual address of the device and does not allow to OR > this value with other fields. > > This patch extends the KVMDevice struct with a new kda_addr_fixup > member. Its value is passed at registration time and OR'ed with the > resolved address on kvm_arm_set_device_addr().
> diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h > index 1e23640..4050017 100644 > --- a/target/arm/kvm_arm.h > +++ b/target/arm/kvm_arm.h > @@ -34,6 +34,7 @@ int kvm_arm_vcpu_init(CPUState *cs); > * @group: device control API group for setting addresses > * @attr: device control API address type > * @dev_fd: device control device file descriptor (or -1 if not supported) > + * @addr_fixup: value to be OR'ed with resolved address I think addr_fixup is a bit vague; how about addr_fixed_bits ? (here and in the function argument name). Or something else if somebody has a better idea. > * > * Remember the memory region @mr, and when it is mapped by the > * machine model, tell the kernel that base address using the > @@ -45,7 +46,7 @@ int kvm_arm_vcpu_init(CPUState *cs); > * address at the point where machine init is complete. > */ > void kvm_arm_register_device(MemoryRegion *mr, uint64_t devid, uint64_t > group, > - uint64_t attr, int dev_fd); > + uint64_t attr, int dev_fd, uint64_t addr_fixup); > > /** > * kvm_arm_init_cpreg_list: > -- > 2.5.5 Otherwise Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM