@@ -607,26 +607,26 @@ int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
607
607
if (!IS_ENABLED (CONFIG_64BIT ) && data -> u .long_mode ) {
608
608
r = - EINVAL ;
609
609
} else {
610
- mutex_lock (& kvm -> lock );
610
+ mutex_lock (& kvm -> arch . xen . xen_lock );
611
611
kvm -> arch .xen .long_mode = !!data -> u .long_mode ;
612
- mutex_unlock (& kvm -> lock );
612
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
613
613
r = 0 ;
614
614
}
615
615
break ;
616
616
617
617
case KVM_XEN_ATTR_TYPE_SHARED_INFO :
618
- mutex_lock (& kvm -> lock );
618
+ mutex_lock (& kvm -> arch . xen . xen_lock );
619
619
r = kvm_xen_shared_info_init (kvm , data -> u .shared_info .gfn );
620
- mutex_unlock (& kvm -> lock );
620
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
621
621
break ;
622
622
623
623
case KVM_XEN_ATTR_TYPE_UPCALL_VECTOR :
624
624
if (data -> u .vector && data -> u .vector < 0x10 )
625
625
r = - EINVAL ;
626
626
else {
627
- mutex_lock (& kvm -> lock );
627
+ mutex_lock (& kvm -> arch . xen . xen_lock );
628
628
kvm -> arch .xen .upcall_vector = data -> u .vector ;
629
- mutex_unlock (& kvm -> lock );
629
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
630
630
r = 0 ;
631
631
}
632
632
break ;
@@ -636,9 +636,9 @@ int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
636
636
break ;
637
637
638
638
case KVM_XEN_ATTR_TYPE_XEN_VERSION :
639
- mutex_lock (& kvm -> lock );
639
+ mutex_lock (& kvm -> arch . xen . xen_lock );
640
640
kvm -> arch .xen .xen_version = data -> u .xen_version ;
641
- mutex_unlock (& kvm -> lock );
641
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
642
642
r = 0 ;
643
643
break ;
644
644
@@ -647,9 +647,9 @@ int kvm_xen_hvm_set_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
647
647
r = - EOPNOTSUPP ;
648
648
break ;
649
649
}
650
- mutex_lock (& kvm -> lock );
650
+ mutex_lock (& kvm -> arch . xen . xen_lock );
651
651
kvm -> arch .xen .runstate_update_flag = !!data -> u .runstate_update_flag ;
652
- mutex_unlock (& kvm -> lock );
652
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
653
653
r = 0 ;
654
654
break ;
655
655
@@ -664,7 +664,7 @@ int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
664
664
{
665
665
int r = - ENOENT ;
666
666
667
- mutex_lock (& kvm -> lock );
667
+ mutex_lock (& kvm -> arch . xen . xen_lock );
668
668
669
669
switch (data -> type ) {
670
670
case KVM_XEN_ATTR_TYPE_LONG_MODE :
@@ -703,15 +703,15 @@ int kvm_xen_hvm_get_attr(struct kvm *kvm, struct kvm_xen_hvm_attr *data)
703
703
break ;
704
704
}
705
705
706
- mutex_unlock (& kvm -> lock );
706
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
707
707
return r ;
708
708
}
709
709
710
710
int kvm_xen_vcpu_set_attr (struct kvm_vcpu * vcpu , struct kvm_xen_vcpu_attr * data )
711
711
{
712
712
int idx , r = - ENOENT ;
713
713
714
- mutex_lock (& vcpu -> kvm -> lock );
714
+ mutex_lock (& vcpu -> kvm -> arch . xen . xen_lock );
715
715
idx = srcu_read_lock (& vcpu -> kvm -> srcu );
716
716
717
717
switch (data -> type ) {
@@ -939,15 +939,15 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
939
939
}
940
940
941
941
srcu_read_unlock (& vcpu -> kvm -> srcu , idx );
942
- mutex_unlock (& vcpu -> kvm -> lock );
942
+ mutex_unlock (& vcpu -> kvm -> arch . xen . xen_lock );
943
943
return r ;
944
944
}
945
945
946
946
int kvm_xen_vcpu_get_attr (struct kvm_vcpu * vcpu , struct kvm_xen_vcpu_attr * data )
947
947
{
948
948
int r = - ENOENT ;
949
949
950
- mutex_lock (& vcpu -> kvm -> lock );
950
+ mutex_lock (& vcpu -> kvm -> arch . xen . xen_lock );
951
951
952
952
switch (data -> type ) {
953
953
case KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO :
@@ -1030,7 +1030,7 @@ int kvm_xen_vcpu_get_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
1030
1030
break ;
1031
1031
}
1032
1032
1033
- mutex_unlock (& vcpu -> kvm -> lock );
1033
+ mutex_unlock (& vcpu -> kvm -> arch . xen . xen_lock );
1034
1034
return r ;
1035
1035
}
1036
1036
@@ -1123,7 +1123,7 @@ int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc)
1123
1123
xhc -> blob_size_32 || xhc -> blob_size_64 ))
1124
1124
return - EINVAL ;
1125
1125
1126
- mutex_lock (& kvm -> lock );
1126
+ mutex_lock (& kvm -> arch . xen . xen_lock );
1127
1127
1128
1128
if (xhc -> msr && !kvm -> arch .xen_hvm_config .msr )
1129
1129
static_branch_inc (& kvm_xen_enabled .key );
@@ -1132,7 +1132,7 @@ int kvm_xen_hvm_config(struct kvm *kvm, struct kvm_xen_hvm_config *xhc)
1132
1132
1133
1133
memcpy (& kvm -> arch .xen_hvm_config , xhc , sizeof (* xhc ));
1134
1134
1135
- mutex_unlock (& kvm -> lock );
1135
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1136
1136
return 0 ;
1137
1137
}
1138
1138
@@ -1675,15 +1675,7 @@ static int kvm_xen_set_evtchn(struct kvm_xen_evtchn *xe, struct kvm *kvm)
1675
1675
mm_borrowed = true;
1676
1676
}
1677
1677
1678
- /*
1679
- * For the irqfd workqueue, using the main kvm->lock mutex is
1680
- * fine since this function is invoked from kvm_set_irq() with
1681
- * no other lock held, no srcu. In future if it will be called
1682
- * directly from a vCPU thread (e.g. on hypercall for an IPI)
1683
- * then it may need to switch to using a leaf-node mutex for
1684
- * serializing the shared_info mapping.
1685
- */
1686
- mutex_lock (& kvm -> lock );
1678
+ mutex_lock (& kvm -> arch .xen .xen_lock );
1687
1679
1688
1680
/*
1689
1681
* It is theoretically possible for the page to be unmapped
@@ -1712,7 +1704,7 @@ static int kvm_xen_set_evtchn(struct kvm_xen_evtchn *xe, struct kvm *kvm)
1712
1704
srcu_read_unlock (& kvm -> srcu , idx );
1713
1705
} while (!rc );
1714
1706
1715
- mutex_unlock (& kvm -> lock );
1707
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1716
1708
1717
1709
if (mm_borrowed )
1718
1710
kthread_unuse_mm (kvm -> mm );
@@ -1828,7 +1820,7 @@ static int kvm_xen_eventfd_update(struct kvm *kvm,
1828
1820
int ret ;
1829
1821
1830
1822
/* Protect writes to evtchnfd as well as the idr lookup. */
1831
- mutex_lock (& kvm -> lock );
1823
+ mutex_lock (& kvm -> arch . xen . xen_lock );
1832
1824
evtchnfd = idr_find (& kvm -> arch .xen .evtchn_ports , port );
1833
1825
1834
1826
ret = - ENOENT ;
@@ -1859,7 +1851,7 @@ static int kvm_xen_eventfd_update(struct kvm *kvm,
1859
1851
}
1860
1852
ret = 0 ;
1861
1853
out_unlock :
1862
- mutex_unlock (& kvm -> lock );
1854
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1863
1855
return ret ;
1864
1856
}
1865
1857
@@ -1922,10 +1914,10 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm,
1922
1914
evtchnfd -> deliver .port .priority = data -> u .evtchn .deliver .port .priority ;
1923
1915
}
1924
1916
1925
- mutex_lock (& kvm -> lock );
1917
+ mutex_lock (& kvm -> arch . xen . xen_lock );
1926
1918
ret = idr_alloc (& kvm -> arch .xen .evtchn_ports , evtchnfd , port , port + 1 ,
1927
1919
GFP_KERNEL );
1928
- mutex_unlock (& kvm -> lock );
1920
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1929
1921
if (ret >= 0 )
1930
1922
return 0 ;
1931
1923
@@ -1943,9 +1935,9 @@ static int kvm_xen_eventfd_deassign(struct kvm *kvm, u32 port)
1943
1935
{
1944
1936
struct evtchnfd * evtchnfd ;
1945
1937
1946
- mutex_lock (& kvm -> lock );
1938
+ mutex_lock (& kvm -> arch . xen . xen_lock );
1947
1939
evtchnfd = idr_remove (& kvm -> arch .xen .evtchn_ports , port );
1948
- mutex_unlock (& kvm -> lock );
1940
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1949
1941
1950
1942
if (!evtchnfd )
1951
1943
return - ENOENT ;
@@ -1963,7 +1955,7 @@ static int kvm_xen_eventfd_reset(struct kvm *kvm)
1963
1955
int i ;
1964
1956
int n = 0 ;
1965
1957
1966
- mutex_lock (& kvm -> lock );
1958
+ mutex_lock (& kvm -> arch . xen . xen_lock );
1967
1959
1968
1960
/*
1969
1961
* Because synchronize_srcu() cannot be called inside the
@@ -1975,7 +1967,7 @@ static int kvm_xen_eventfd_reset(struct kvm *kvm)
1975
1967
1976
1968
all_evtchnfds = kmalloc_array (n , sizeof (struct evtchnfd * ), GFP_KERNEL );
1977
1969
if (!all_evtchnfds ) {
1978
- mutex_unlock (& kvm -> lock );
1970
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1979
1971
return - ENOMEM ;
1980
1972
}
1981
1973
@@ -1984,7 +1976,7 @@ static int kvm_xen_eventfd_reset(struct kvm *kvm)
1984
1976
all_evtchnfds [n ++ ] = evtchnfd ;
1985
1977
idr_remove (& kvm -> arch .xen .evtchn_ports , evtchnfd -> send_port );
1986
1978
}
1987
- mutex_unlock (& kvm -> lock );
1979
+ mutex_unlock (& kvm -> arch . xen . xen_lock );
1988
1980
1989
1981
synchronize_srcu (& kvm -> srcu );
1990
1982
@@ -2086,6 +2078,7 @@ void kvm_xen_destroy_vcpu(struct kvm_vcpu *vcpu)
2086
2078
2087
2079
void kvm_xen_init_vm (struct kvm * kvm )
2088
2080
{
2081
+ mutex_init (& kvm -> arch .xen .xen_lock );
2089
2082
idr_init (& kvm -> arch .xen .evtchn_ports );
2090
2083
kvm_gpc_init (& kvm -> arch .xen .shinfo_cache , kvm , NULL , KVM_HOST_USES_PFN );
2091
2084
}
0 commit comments