Lines Matching refs:hub_nmi
181 static inline int uv_nmi_test_mmr(struct uv_hub_nmi_s *hub_nmi) in uv_nmi_test_mmr() argument
183 hub_nmi->nmi_value = uv_read_local_mmr(nmi_mmr); in uv_nmi_test_mmr()
184 atomic_inc(&hub_nmi->read_mmr_count); in uv_nmi_test_mmr()
185 return !!(hub_nmi->nmi_value & nmi_mmr_pending); in uv_nmi_test_mmr()
197 static int uv_set_in_nmi(int cpu, struct uv_hub_nmi_s *hub_nmi) in uv_set_in_nmi() argument
199 int first = atomic_add_unless(&hub_nmi->in_nmi, 1, 1); in uv_set_in_nmi()
202 atomic_set(&hub_nmi->cpu_owner, cpu); in uv_set_in_nmi()
206 atomic_inc(&hub_nmi->nmi_count); in uv_set_in_nmi()
212 static int uv_check_nmi(struct uv_hub_nmi_s *hub_nmi) in uv_check_nmi() argument
221 nmi = atomic_read(&hub_nmi->in_nmi); in uv_check_nmi()
225 if (raw_spin_trylock(&hub_nmi->nmi_lock)) { in uv_check_nmi()
228 if (uv_nmi_test_mmr(hub_nmi)) { in uv_check_nmi()
229 uv_set_in_nmi(cpu, hub_nmi); in uv_check_nmi()
235 raw_spin_unlock(&hub_nmi->nmi_lock); in uv_check_nmi()
243 nmi = atomic_read(&hub_nmi->in_nmi); in uv_check_nmi()
252 uv_set_in_nmi(cpu, hub_nmi); in uv_check_nmi()
266 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi; in uv_clear_nmi() local
268 if (cpu == atomic_read(&hub_nmi->cpu_owner)) { in uv_clear_nmi()
269 atomic_set(&hub_nmi->cpu_owner, -1); in uv_clear_nmi()
270 atomic_set(&hub_nmi->in_nmi, 0); in uv_clear_nmi()
272 raw_spin_unlock(&hub_nmi->nmi_lock); in uv_clear_nmi()
599 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi; in uv_handle_nmi() local
607 if (!this_cpu_read(uv_cpu_nmi.pinging) && !uv_check_nmi(hub_nmi)) { in uv_handle_nmi()