|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Make bind_interdomain_evtchn_to_irq() public
On 08/13/2014 11:29 AM, David Vrabel wrote: On 12/08/14 14:43, jgross@xxxxxxxx wrote:From: Juergen Gross <jgross@xxxxxxxx> bind_interdomain_evtchn_to_irq() is currently a private function. It is used only by bind_interdomain_evtchn_to_irqhandler() to register an irq-handler for an event channel. By making it public it is possible to use e.g. threaded interrupts with interdomain event channels.Can you give an example of using this? Maybe we want a bind_interdomain_evtchn_to_threaded_irqhandler() instead? Or add a flags field to the existing function.
Instead of
static int scsiback_schedule(void *data)
{
struct vscsibk_info *info = (struct vscsibk_info *)data;
while (!kthread_should_stop()) {
wait_event_interruptible(info->wq,
info->waiting_reqs || kthread_should_stop());
info->waiting_reqs = 0;
smp_mb(); /* waiting_reqs used by other thread */
switch (scsiback_do_cmd_fn(info)) {
case 1:
info->waiting_reqs = 1;
default:
break;
}
cond_resched();
}
return 0;
}
static void scsiback_notify_work(struct vscsibk_info *info)
{
info->waiting_reqs = 1;
wake_up(&info->wq);
}
static irqreturn_t scsiback_intr(int irq, void *dev_id)
{
scsiback_notify_work((struct vscsibk_info *)dev_id);
return IRQ_HANDLED;
}
static int scsiback_init_sring(struct vscsibk_info *info, grant_ref_t
ring_ref,
evtchn_port_t evtchn)
{
...
bind_interdomain_evtchn_to_irqhandler(
info->domid, evtchn,
scsiback_intr, 0, "vscsiif-backend", info);
...
info->kthread = kthread_run(scsiback_schedule, info, name);
...
}
I only need the following:
static irqreturn_t scsiback_irq_fn(int irq, void *dev_id)
{
struct vscsibk_info *info = dev_id;
while (scsiback_do_cmd_fn(info))
cond_resched();
return IRQ_HANDLED;
}
static int scsiback_init_sring(struct vscsibk_info *info, grant_ref_t
ring_ref,
evtchn_port_t evtchn)
{
...
irq = bind_interdomain_evtchn_to_irq(info->domid, evtchn);
request_threaded_irq(irq, NULL, scsiback_irq_fn,
IRQF_ONESHOT, "vscsiif-backend", info)
...
}
So yes, it could be done via a flag, too.
Juergen
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |