/* Enables an IPI/event combo for ev_type sent to vcoreid's default mbox. IPI * if you want one or not. This is the simplest thing applications may want, * and shows how you can put the other event functions together to get similar * things done. */ void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags) { struct event_queue *ev_q = get_event_q_vcpd(vcoreid); ev_q->ev_flags = ev_flags; ev_q->ev_vcore = vcoreid; ev_q->ev_handler = 0; register_kevent_q(ev_q, ev_type); }
/* Enables an IPI/event combo for ev_type sent to vcoreid's default mbox. IPI * if you want one or not. If you want the event to go to the vcore private * mbox (meaning no other core should ever handle it), send in * EVENT_VCORE_PRIVATE with ev_flags. * * This is the simplest thing applications may want, and shows how you can put * the other event functions together to get similar things done. */ void enable_kevent(unsigned int ev_type, uint32_t vcoreid, int ev_flags) { struct event_queue *ev_q = get_event_q_vcpd(vcoreid, ev_flags); ev_q->ev_flags = ev_flags; ev_q->ev_vcore = vcoreid; ev_q->ev_handler = 0; wmb(); /* make sure ev_q is filled out before registering */ register_kevent_q(ev_q, ev_type); }