{ "ld_slow",     VCPU_STAT(ld_slow) },
        { "st",          VCPU_STAT(st) },
        { "st_slow",     VCPU_STAT(st_slow) },
+       { "pthru_all",       VCPU_STAT(pthru_all) },
+       { "pthru_host",      VCPU_STAT(pthru_host) },
+       { "pthru_bad_aff",   VCPU_STAT(pthru_bad_aff) },
        { NULL }
 };
 
 
                icp->rm_eoied_irq = irq;
        }
 
-       if (state->host_irq && state->intr_cpu != -1) {
-               int pcpu = cpu_first_thread_sibling(raw_smp_processor_id());
-               if (state->intr_cpu != pcpu)
-                       xics_opal_rm_set_server(state->host_irq, pcpu);
-               state->intr_cpu = -1;
+       if (state->host_irq) {
+               ++vcpu->stat.pthru_all;
+               if (state->intr_cpu != -1) {
+                       int pcpu = raw_smp_processor_id();
+
+                       pcpu = cpu_first_thread_sibling(pcpu);
+                       ++vcpu->stat.pthru_host;
+                       if (state->intr_cpu != pcpu) {
+                               ++vcpu->stat.pthru_bad_aff;
+                               xics_opal_rm_set_server(state->host_irq, pcpu);
+                       }
+                       state->intr_cpu = -1;
+               }
        }
  bail:
        return check_too_hard(xics, icp);