On 6/20/22 14:54, Pierre Morel wrote: > We report a topology change to the guest for any CPU hotplug. > > The reporting to the guest is done using the Multiprocessor > Topology-Change-Report (MTCR) bit of the utility entry in the guest's > SCA which will be cleared during the interpretation of PTF. > > On every vCPU creation we set the MCTR bit to let the guest know the > next time he uses the PTF with command 2 instruction that the > topology changed and that he should use the STSI(15.1.x) instruction > to get the topology details. > > STSI(15.1.x) gives information on the CPU configuration topology. > Let's accept the interception of STSI with the function code 15 and > let the userland part of the hypervisor handle it when userland > support the CPU Topology facility. > > Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> > --- > arch/s390/include/asm/kvm_host.h | 11 ++++++++--- > arch/s390/kvm/kvm-s390.c | 27 ++++++++++++++++++++++++++- > arch/s390/kvm/priv.c | 15 +++++++++++---- > arch/s390/kvm/vsie.c | 3 +++ > 4 files changed, 48 insertions(+), 8 deletions(-) > [...] > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index 8fcb56141689..95b96019ca8e 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -1691,6 +1691,25 @@ static int kvm_s390_get_cpu_model(struct kvm *kvm, struct kvm_device_attr *attr) > return ret; > } > > +/** > + * kvm_s390_sca_set_mtcr I wonder if there is a better name, kvm_s390_report_topology_change maybe? > + * @kvm: guest KVM description > + * > + * Is only relevant if the topology facility is present, > + * the caller should check KVM facility 11 > + * > + * Updates the Multiprocessor Topology-Change-Report to signal > + * the guest with a topology change. > + */ > +static void kvm_s390_sca_set_mtcr(struct kvm *kvm) > +{ Do we need a sca_lock read_section here? If we don't why not? Did not see one up the stack, but I might have overlooked something. > + struct bsca_block *sca = kvm->arch.sca; /* SCA version doesn't matter */ > + > + ipte_lock(kvm); > + sca->utility |= SCA_UTILITY_MTCR; > + ipte_unlock(kvm); > +} > + [...]