.. | .. |
---|
2061 | 2061 | return -ENODEV; |
---|
2062 | 2062 | } |
---|
2063 | 2063 | |
---|
| 2064 | + if (kvm_get_mode() == KVM_MODE_NONE) { |
---|
| 2065 | + kvm_info("KVM disabled from command line\n"); |
---|
| 2066 | + return -ENODEV; |
---|
| 2067 | + } |
---|
| 2068 | + |
---|
2064 | 2069 | in_hyp_mode = is_kernel_in_hyp_mode(); |
---|
2065 | 2070 | |
---|
2066 | 2071 | if (cpus_have_final_cap(ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE) || |
---|
.. | .. |
---|
2093 | 2098 | err = kvm_init_vector_slots(); |
---|
2094 | 2099 | if (err) { |
---|
2095 | 2100 | kvm_err("Cannot initialise vector slots\n"); |
---|
2096 | | - goto out_err; |
---|
| 2101 | + goto out_hyp; |
---|
2097 | 2102 | } |
---|
2098 | 2103 | |
---|
2099 | 2104 | err = init_subsystems(); |
---|
2100 | 2105 | if (err) |
---|
2101 | | - goto out_hyp; |
---|
| 2106 | + goto out_subs; |
---|
2102 | 2107 | |
---|
2103 | 2108 | if (!in_hyp_mode) { |
---|
2104 | 2109 | err = finalize_hyp_mode(); |
---|
2105 | 2110 | if (err) { |
---|
2106 | 2111 | kvm_err("Failed to finalize Hyp protection\n"); |
---|
2107 | | - goto out_hyp; |
---|
| 2112 | + goto out_subs; |
---|
2108 | 2113 | } |
---|
2109 | 2114 | } |
---|
2110 | 2115 | |
---|
.. | .. |
---|
2118 | 2123 | |
---|
2119 | 2124 | return 0; |
---|
2120 | 2125 | |
---|
2121 | | -out_hyp: |
---|
| 2126 | +out_subs: |
---|
2122 | 2127 | hyp_cpu_pm_exit(); |
---|
| 2128 | +out_hyp: |
---|
2123 | 2129 | if (!in_hyp_mode) |
---|
2124 | 2130 | teardown_hyp_mode(); |
---|
2125 | 2131 | out_err: |
---|
.. | .. |
---|
2137 | 2143 | if (!arg) |
---|
2138 | 2144 | return -EINVAL; |
---|
2139 | 2145 | |
---|
| 2146 | + if (strcmp(arg, "none") == 0) { |
---|
| 2147 | + kvm_mode = KVM_MODE_NONE; |
---|
| 2148 | + return 0; |
---|
| 2149 | + } |
---|
| 2150 | + |
---|
| 2151 | + if (!is_hyp_mode_available()) { |
---|
| 2152 | + pr_warn_once("KVM is not available. Ignoring kvm-arm.mode\n"); |
---|
| 2153 | + return 0; |
---|
| 2154 | + } |
---|
| 2155 | + |
---|
2140 | 2156 | if (strcmp(arg, "protected") == 0) { |
---|
2141 | 2157 | kvm_mode = KVM_MODE_PROTECTED; |
---|
2142 | 2158 | return 0; |
---|
2143 | 2159 | } |
---|
2144 | 2160 | |
---|
2145 | | - if (strcmp(arg, "nvhe") == 0 && !WARN_ON(is_kernel_in_hyp_mode())) |
---|
| 2161 | + if (strcmp(arg, "nvhe") == 0 && !WARN_ON(is_kernel_in_hyp_mode())) { |
---|
| 2162 | + kvm_mode = KVM_MODE_DEFAULT; |
---|
2146 | 2163 | return 0; |
---|
| 2164 | + } |
---|
2147 | 2165 | |
---|
2148 | 2166 | return -EINVAL; |
---|
2149 | 2167 | } |
---|