KVM: s390: get rid of gmap_translate()
Add gpa_to_hva(), which uses memslots, and use it to replace all uses of gmap_translate(). Reviewed-by: Janosch Frank <frankja@linux.ibm.com> Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com> Link: https://lore.kernel.org/r/20250123144627.312456-9-imbrenda@linux.ibm.com Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> Message-ID: <20250123144627.312456-9-imbrenda@linux.ibm.com>
This commit is contained in:
parent
6eb84e1300
commit
d41993f713
4 changed files with 20 additions and 29 deletions
|
@ -111,7 +111,6 @@ int gmap_map_segment(struct gmap *gmap, unsigned long from,
|
|||
unsigned long to, unsigned long len);
|
||||
int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len);
|
||||
unsigned long __gmap_translate(struct gmap *, unsigned long gaddr);
|
||||
unsigned long gmap_translate(struct gmap *, unsigned long gaddr);
|
||||
int __gmap_link(struct gmap *gmap, unsigned long gaddr, unsigned long vmaddr);
|
||||
void gmap_discard(struct gmap *, unsigned long from, unsigned long to);
|
||||
void __gmap_zap(struct gmap *, unsigned long gaddr);
|
||||
|
|
|
@ -2893,7 +2893,8 @@ int kvm_set_routing_entry(struct kvm *kvm,
|
|||
struct kvm_kernel_irq_routing_entry *e,
|
||||
const struct kvm_irq_routing_entry *ue)
|
||||
{
|
||||
u64 uaddr;
|
||||
u64 uaddr_s, uaddr_i;
|
||||
int idx;
|
||||
|
||||
switch (ue->type) {
|
||||
/* we store the userspace addresses instead of the guest addresses */
|
||||
|
@ -2901,14 +2902,16 @@ int kvm_set_routing_entry(struct kvm *kvm,
|
|||
if (kvm_is_ucontrol(kvm))
|
||||
return -EINVAL;
|
||||
e->set = set_adapter_int;
|
||||
uaddr = gmap_translate(kvm->arch.gmap, ue->u.adapter.summary_addr);
|
||||
if (uaddr == -EFAULT)
|
||||
|
||||
idx = srcu_read_lock(&kvm->srcu);
|
||||
uaddr_s = gpa_to_hva(kvm, ue->u.adapter.summary_addr);
|
||||
uaddr_i = gpa_to_hva(kvm, ue->u.adapter.ind_addr);
|
||||
srcu_read_unlock(&kvm->srcu, idx);
|
||||
|
||||
if (kvm_is_error_hva(uaddr_s) || kvm_is_error_hva(uaddr_i))
|
||||
return -EFAULT;
|
||||
e->adapter.summary_addr = uaddr;
|
||||
uaddr = gmap_translate(kvm->arch.gmap, ue->u.adapter.ind_addr);
|
||||
if (uaddr == -EFAULT)
|
||||
return -EFAULT;
|
||||
e->adapter.ind_addr = uaddr;
|
||||
e->adapter.summary_addr = uaddr_s;
|
||||
e->adapter.ind_addr = uaddr_i;
|
||||
e->adapter.summary_offset = ue->u.adapter.summary_offset;
|
||||
e->adapter.ind_offset = ue->u.adapter.ind_offset;
|
||||
e->adapter.adapter_id = ue->u.adapter.adapter_id;
|
||||
|
|
|
@ -281,6 +281,15 @@ static inline u32 kvm_s390_get_gisa_desc(struct kvm *kvm)
|
|||
return gd;
|
||||
}
|
||||
|
||||
static inline hva_t gpa_to_hva(struct kvm *kvm, gpa_t gpa)
|
||||
{
|
||||
hva_t hva = gfn_to_hva(kvm, gpa_to_gfn(gpa));
|
||||
|
||||
if (!kvm_is_error_hva(hva))
|
||||
hva |= offset_in_page(gpa);
|
||||
return hva;
|
||||
}
|
||||
|
||||
/* implemented in pv.c */
|
||||
int kvm_s390_pv_destroy_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc);
|
||||
int kvm_s390_pv_create_cpu(struct kvm_vcpu *vcpu, u16 *rc, u16 *rrc);
|
||||
|
|
|
@ -463,26 +463,6 @@ unsigned long __gmap_translate(struct gmap *gmap, unsigned long gaddr)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(__gmap_translate);
|
||||
|
||||
/**
|
||||
* gmap_translate - translate a guest address to a user space address
|
||||
* @gmap: pointer to guest mapping meta data structure
|
||||
* @gaddr: guest address
|
||||
*
|
||||
* Returns user space address which corresponds to the guest address or
|
||||
* -EFAULT if no such mapping exists.
|
||||
* This function does not establish potentially missing page table entries.
|
||||
*/
|
||||
unsigned long gmap_translate(struct gmap *gmap, unsigned long gaddr)
|
||||
{
|
||||
unsigned long rc;
|
||||
|
||||
mmap_read_lock(gmap->mm);
|
||||
rc = __gmap_translate(gmap, gaddr);
|
||||
mmap_read_unlock(gmap->mm);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gmap_translate);
|
||||
|
||||
/**
|
||||
* gmap_unlink - disconnect a page table from the gmap shadow tables
|
||||
* @mm: pointer to the parent mm_struct
|
||||
|
|
Loading…
Add table
Reference in a new issue