Lines Matching refs:hub_nmi

288 static inline int uv_nmi_test_mmr(struct uv_hub_nmi_s *hub_nmi)  in uv_nmi_test_mmr()  argument
290 hub_nmi->nmi_value = uv_read_local_mmr(nmi_mmr); in uv_nmi_test_mmr()
291 atomic_inc(&hub_nmi->read_mmr_count); in uv_nmi_test_mmr()
292 return !!(hub_nmi->nmi_value & nmi_mmr_pending); in uv_nmi_test_mmr()
464 static int uv_nmi_test_hubless(struct uv_hub_nmi_s *hub_nmi) in uv_nmi_test_hubless() argument
469 hub_nmi->nmi_value = status; in uv_nmi_test_hubless()
470 atomic_inc(&hub_nmi->read_mmr_count); in uv_nmi_test_hubless()
481 static int uv_test_nmi(struct uv_hub_nmi_s *hub_nmi) in uv_test_nmi() argument
483 if (hub_nmi->hub_present) in uv_test_nmi()
484 return uv_nmi_test_mmr(hub_nmi); in uv_test_nmi()
486 if (hub_nmi->pch_owner) /* Only PCH owner can check status */ in uv_test_nmi()
487 return uv_nmi_test_hubless(hub_nmi); in uv_test_nmi()
496 static int uv_set_in_nmi(int cpu, struct uv_hub_nmi_s *hub_nmi) in uv_set_in_nmi() argument
498 int first = atomic_add_unless(&hub_nmi->in_nmi, 1, 1); in uv_set_in_nmi()
501 atomic_set(&hub_nmi->cpu_owner, cpu); in uv_set_in_nmi()
505 atomic_inc(&hub_nmi->nmi_count); in uv_set_in_nmi()
511 static int uv_check_nmi(struct uv_hub_nmi_s *hub_nmi) in uv_check_nmi() argument
521 nmi = atomic_read(&hub_nmi->in_nmi); in uv_check_nmi()
525 if (raw_spin_trylock(&hub_nmi->nmi_lock)) { in uv_check_nmi()
526 nmi_detected = uv_test_nmi(hub_nmi); in uv_check_nmi()
530 uv_set_in_nmi(cpu, hub_nmi); in uv_check_nmi()
540 raw_spin_unlock(&hub_nmi->nmi_lock); in uv_check_nmi()
549 nmi = atomic_read(&hub_nmi->in_nmi); in uv_check_nmi()
561 uv_set_in_nmi(cpu, hub_nmi); in uv_check_nmi()
566 raw_spin_unlock(&hub_nmi->nmi_lock); in uv_check_nmi()
579 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi; in uv_clear_nmi() local
581 if (cpu == atomic_read(&hub_nmi->cpu_owner)) { in uv_clear_nmi()
582 atomic_set(&hub_nmi->cpu_owner, -1); in uv_clear_nmi()
583 atomic_set(&hub_nmi->in_nmi, 0); in uv_clear_nmi()
584 if (hub_nmi->hub_present) in uv_clear_nmi()
588 raw_spin_unlock(&hub_nmi->nmi_lock); in uv_clear_nmi()
936 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi; in uv_handle_nmi() local
944 if (!this_cpu_read(uv_cpu_nmi.pinging) && !uv_check_nmi(hub_nmi)) { in uv_handle_nmi()