On Mon, Jul 13, 2026 at 03:30:31PM +1000, Gavin Shan wrote:
> On 7/8/26 8:42 AM, Mathieu Poirier wrote:
> > From: Jean-Philippe Brucker <[email protected]>
> > 
> > When a Realm is requested, create a scratch Realm VM by setting bit 8
> > of the argument given to the KVM_CREATE_VM ioctl().  Bit 7-0 are reserved
> > for the guest PA size.
> > 
> > Signed-off-by: Jean-Philippe Brucker <[email protected]>
> > Signed-off-by: Mathieu Poirier <[email protected]>
> > ---
> >   target/arm/kvm-rme.c  | 8 ++++++++
> >   target/arm/kvm-stub.c | 5 +++++
> >   target/arm/kvm.c      | 4 +++-
> >   target/arm/kvm_arm.h  | 8 ++++++++
> >   4 files changed, 24 insertions(+), 1 deletion(-)
> > 
> > diff --git a/target/arm/kvm-rme.c b/target/arm/kvm-rme.c
> > index 90c1d30ba24c..f763d5ed6199 100644
> > --- a/target/arm/kvm-rme.c
> > +++ b/target/arm/kvm-rme.c
> > @@ -99,3 +99,11 @@ void kvm_arm_rme_vcpu_init(ARMCPU *cpu)
> >       cpu->kvm_rme = true;
> >   }
> > +
> > +int kvm_arm_rme_vm_type(void)
> > +{
> > +    if (rme_guest) {
> > +        return KVM_VM_TYPE_ARM_REALM;
> > +    }
> > +    return 0;
> > +}
> 
> We had official name for 0, which is KVM_VM_TYPE_ARM_NORMAL. Another question 
> if
> it's worthwhile to have this helper since it's equivalent to something as 
> below,
> which can be directly applied to the caller.
> 
> 
>     int vm_type = (current_machine && current_machine->cgs) ? 
> KVM_VM_TYPE_ARM_REALM :
>                                                               
> KVM_VM_TYPE_ARM_NORMAL;
>

Addressed.
 
> 
> > diff --git a/target/arm/kvm-stub.c b/target/arm/kvm-stub.c
> > index 4ab6f08637d1..6d52f172c5df 100644
> > --- a/target/arm/kvm-stub.c
> > +++ b/target/arm/kvm-stub.c
> > @@ -129,3 +129,8 @@ void kvm_arm_rme_vcpu_init(ARMCPU *cpu)
> >   {
> >       g_assert_not_reached();
> >   }
> > +
> > +int kvm_arm_rme_vm_type(void)
> > +{
> > +    g_assert_not_reached();
> > +}
> > diff --git a/target/arm/kvm.c b/target/arm/kvm.c
> > index 4c212ed0c337..6aa1cd04e484 100644
> > --- a/target/arm/kvm.c
> > +++ b/target/arm/kvm.c
> > @@ -108,6 +108,7 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray,
> >   {
> >       int ret = 0, kvmfd = -1, vmfd = -1, cpufd = -1;
> >       int max_vm_pa_size;
> > +    int vm_type;
> >       kvmfd = qemu_open_old("/dev/kvm", O_RDWR);
> >       if (kvmfd < 0) {
> > @@ -117,8 +118,9 @@ bool kvm_arm_create_scratch_host_vcpu(int *fdarray,
> >       if (max_vm_pa_size < 0) {
> >           max_vm_pa_size = 0;
> >       }
> > +    vm_type = kvm_arm_rme_vm_type();
> >       do {
> > -        vmfd = ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size);
> > +        vmfd = ioctl(kvmfd, KVM_CREATE_VM, max_vm_pa_size | vm_type);
> >       } while (vmfd == -1 && errno == EINTR);
> >       if (vmfd < 0) {
> >           goto err;
> > diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h
> > index 12ed1eee18b4..65ec1b970606 100644
> > --- a/target/arm/kvm_arm.h
> > +++ b/target/arm/kvm_arm.h
> > @@ -259,4 +259,12 @@ int kvm_arm_rme_init(MachineState *ms, KVMState *s);
> >    */
> >   void kvm_arm_rme_vcpu_init(ARMCPU *cpu);
> > +/**
> > + * kvm_arm_rme_vm_type
> > + * @ms: the machine state
> > + *
> > + * Returns the Realm KVM VM type if the user requested a Realm, 0 
> > otherwise.
> > + */
> > +int kvm_arm_rme_vm_type(void);
> > +
> >   #endif
> 
> Thanks,
> Gavin
> 

Reply via email to