kprintf("xpt_init: failed to create rescan thread\n");
}
/* Install our software interrupt handlers */
- register_swi(SWI_CAMBIO, swi_cambio, NULL, "swi_cambio", NULL);
+ register_swi(SWI_CAMBIO, swi_cambio, NULL, "swi_cambio", NULL, -1);
return (0);
}
if (!sio_registered) {
callout_init_mp(&sio_timeout_handle);
- register_swi_mp(SWI_TTY, siopoll, NULL, "cy", NULL);
+ register_swi_mp(SWI_TTY, siopoll, NULL, "cy", NULL, -1);
sio_registered = TRUE;
}
minorbase = UNIT_TO_MINOR(unit);
kprintf("\n");
if (!sio_registered) {
- register_swi(SWI_TTY, siopoll, NULL ,"swi_siopoll", NULL);
+ register_swi(SWI_TTY, siopoll, NULL ,"swi_siopoll", NULL, -1);
sio_registered = TRUE;
}
minorbase = UNIT_TO_MINOR(unit);
*/
void *
register_swi(int intr, inthand2_t *handler, void *arg, const char *name,
- struct lwkt_serialize *serializer)
+ struct lwkt_serialize *serializer, int cpuid)
{
if (intr < FIRST_SOFTINT || intr >= MAX_INTS)
panic("register_swi: bad intr %d", intr);
- return(register_int(intr, handler, arg, name, serializer, 0, 0));
+
+ if (cpuid < 0)
+ cpuid = intr % ncpus;
+ return(register_int(intr, handler, arg, name, serializer, 0, cpuid));
}
void *
register_swi_mp(int intr, inthand2_t *handler, void *arg, const char *name,
- struct lwkt_serialize *serializer)
+ struct lwkt_serialize *serializer, int cpuid)
{
if (intr < FIRST_SOFTINT || intr >= MAX_INTS)
panic("register_swi: bad intr %d", intr);
- return(register_int(intr, handler, arg, name, serializer, INTR_MPSAFE, 0));
+
+ if (cpuid < 0)
+ cpuid = intr % ncpus;
+ return(register_int(intr, handler, arg, name, serializer,
+ INTR_MPSAFE, cpuid));
}
void *
}
void
-unregister_swi(void *id)
+unregister_swi(void *id, int intr, int cpuid)
{
- unregister_int(id, 0);
+ if (cpuid < 0)
+ cpuid = intr % ncpus;
+
+ unregister_int(id, cpuid);
}
void
}
TASKQUEUE_DEFINE(swi, taskqueue_swi_enqueue, 0,
- register_swi(SWI_TQ, taskqueue_swi_run, NULL, "swi_taskq", NULL));
+ register_swi(SWI_TQ, taskqueue_swi_run, NULL, "swi_taskq", NULL, -1));
/*
* XXX: possibly use a different SWI_TQ_MP or so.
* related: sys/interrupt.h
* related: platform/XXX/isa/ipl_funcs.c
*/
TASKQUEUE_DEFINE(swi_mp, taskqueue_swi_enqueue, 0,
- register_swi(SWI_TQ, taskqueue_swi_mp_run, NULL, "swi_mp_taskq", NULL));
+ register_swi(SWI_TQ, taskqueue_swi_mp_run, NULL, "swi_mp_taskq", NULL, -1));
struct taskqueue *taskqueue_thread[MAXCPU];
static void
swi_vm_setup(void *arg)
{
- register_swi(SWI_VM, swi_vm, NULL, "swi_vm", NULL);
+ register_swi(SWI_VM, swi_vm, NULL, "swi_vm", NULL, 0);
}
SYSINIT(vm_setup, SI_BOOT2_MACHDEP, SI_ORDER_ANY, swi_vm_setup, NULL);
static void
swi_vm_setup(void *arg)
{
- register_swi(SWI_VM, swi_vm, NULL, "swi_vm", NULL);
+ register_swi(SWI_VM, swi_vm, NULL, "swi_vm", NULL, 0);
}
SYSINIT(vm_setup, SI_BOOT2_MACHDEP, SI_ORDER_ANY, swi_vm_setup, NULL);
struct lwkt_serialize;
void *register_swi(int intr, inthand2_t *handler, void *arg,
const char *name,
- struct lwkt_serialize *serializer);
+ struct lwkt_serialize *serializer, int cpuid);
void *register_swi_mp(int intr, inthand2_t *handler, void *arg,
const char *name,
- struct lwkt_serialize *serializer);
+ struct lwkt_serialize *serializer, int cpuid);
void *register_int(int intr, inthand2_t *handler, void *arg,
const char *name,
struct lwkt_serialize *serializer, int flags,
const char *get_registered_name(int intr);
void swi_setpriority(int intr, int pri);
-void unregister_swi(void *id);
+void unregister_swi(void *id, int intr, int cpuid);
void unregister_int(void *id, int cpuid);
void register_randintr(int intr);
void unregister_randintr(int intr);