Lines Matching refs:hub_nmi

291 static inline int uv_nmi_test_mmr(struct uv_hub_nmi_s *hub_nmi)
293 hub_nmi->nmi_value = uv_read_local_mmr(nmi_mmr);
294 atomic_inc(&hub_nmi->read_mmr_count);
295 return !!(hub_nmi->nmi_value & nmi_mmr_pending);
467 static int uv_nmi_test_hubless(struct uv_hub_nmi_s *hub_nmi)
472 hub_nmi->nmi_value = status;
473 atomic_inc(&hub_nmi->read_mmr_count);
484 static int uv_test_nmi(struct uv_hub_nmi_s *hub_nmi)
486 if (hub_nmi->hub_present)
487 return uv_nmi_test_mmr(hub_nmi);
489 if (hub_nmi->pch_owner) /* Only PCH owner can check status */
490 return uv_nmi_test_hubless(hub_nmi);
496 * If first CPU in on this hub, set hub_nmi "in_nmi" and "owner" values and
499 static int uv_set_in_nmi(int cpu, struct uv_hub_nmi_s *hub_nmi)
501 int first = atomic_add_unless(&hub_nmi->in_nmi, 1, 1);
504 atomic_set(&hub_nmi->cpu_owner, cpu);
508 atomic_inc(&hub_nmi->nmi_count);
514 static int uv_check_nmi(struct uv_hub_nmi_s *hub_nmi)
524 nmi = atomic_read(&hub_nmi->in_nmi);
528 if (raw_spin_trylock(&hub_nmi->nmi_lock)) {
529 nmi_detected = uv_test_nmi(hub_nmi);
533 uv_set_in_nmi(cpu, hub_nmi);
543 raw_spin_unlock(&hub_nmi->nmi_lock);
552 nmi = atomic_read(&hub_nmi->in_nmi);
564 uv_set_in_nmi(cpu, hub_nmi);
569 raw_spin_unlock(&hub_nmi->nmi_lock);
582 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi;
584 if (cpu == atomic_read(&hub_nmi->cpu_owner)) {
585 atomic_set(&hub_nmi->cpu_owner, -1);
586 atomic_set(&hub_nmi->in_nmi, 0);
587 if (hub_nmi->hub_present)
591 raw_spin_unlock(&hub_nmi->nmi_lock);
939 struct uv_hub_nmi_s *hub_nmi = uv_hub_nmi;
947 if (!this_cpu_read(uv_cpu_nmi.pinging) && !uv_check_nmi(hub_nmi)) {