static int psmx2_cntr_set(struct fid_cntr *cntr, uint64_t value) { struct psmx2_fid_cntr *cntr_priv; cntr_priv = container_of(cntr, struct psmx2_fid_cntr, cntr); atomic_set(&cntr_priv->counter, value); psmx2_cntr_check_trigger(cntr_priv); if (cntr_priv->wait) cntr_priv->wait->signal(cntr_priv->wait); return 0; }
static int psmx2_cntr_set(struct fid_cntr *cntr, uint64_t value) { struct psmx2_fid_cntr *cntr_priv; cntr_priv = container_of(cntr, struct psmx2_fid_cntr, cntr); cntr_priv->counter = value; psmx2_cntr_check_trigger(cntr_priv); if (cntr_priv->wait) psmx2_wait_signal((struct fid_wait *)cntr_priv->wait); return 0; }
void psmx2_cntr_add_trigger(struct psmx2_fid_cntr *cntr, struct psmx2_trigger *trigger) { struct psmx2_trigger *p, *q; pthread_mutex_lock(&cntr->trigger_lock); q = NULL; p = cntr->trigger; while (p && p->threshold <= trigger->threshold) { q = p; p = p->next; } if (q) q->next = trigger; else cntr->trigger = trigger; trigger->next = p; pthread_mutex_unlock(&cntr->trigger_lock); psmx2_cntr_check_trigger(cntr); }