Module Name: src Committed By: bouyer Date: Sun Apr 19 19:39:11 UTC 2020
Modified Files: src/sys/arch/x86/include [bouyer-xenpvh]: intr.h pic.h src/sys/arch/x86/pci [bouyer-xenpvh]: msipic.c src/sys/arch/x86/x86 [bouyer-xenpvh]: i8259.c intr.c ioapic.c lapic.c src/sys/arch/xen/include [bouyer-xenpvh]: intr.h src/sys/arch/xen/x86 [bouyer-xenpvh]: xen_intr.c src/sys/arch/xen/xen [bouyer-xenpvh]: evtchn.c xen_clock.c Log Message: Add per-PIC callbacks for interrupt_get_devname(), interrupt_get_assigned() and interrupt_get_count(). Implement Xen-specific callbacks for PIC_XEN and use the x86 one for others. In event_set_handler(), call intr_allocate_io_intrsource() so that events appears in interrupt list (intrctl list). To generate a diff of this commit: cvs rdiff -u -r1.61.6.4 -r1.61.6.5 src/sys/arch/x86/include/intr.h cvs rdiff -u -r1.9 -r1.9.14.1 src/sys/arch/x86/include/pic.h cvs rdiff -u -r1.20 -r1.20.6.1 src/sys/arch/x86/pci/msipic.c cvs rdiff -u -r1.23.10.1 -r1.23.10.2 src/sys/arch/x86/x86/i8259.c cvs rdiff -u -r1.150.6.4 -r1.150.6.5 src/sys/arch/x86/x86/intr.c cvs rdiff -u -r1.63 -r1.63.8.1 src/sys/arch/x86/x86/ioapic.c cvs rdiff -u -r1.76.6.3 -r1.76.6.4 src/sys/arch/x86/x86/lapic.c cvs rdiff -u -r1.53.6.2 -r1.53.6.3 src/sys/arch/xen/include/intr.h cvs rdiff -u -r1.21.2.6 -r1.21.2.7 src/sys/arch/xen/x86/xen_intr.c cvs rdiff -u -r1.88.2.7 -r1.88.2.8 src/sys/arch/xen/xen/evtchn.c cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/arch/xen/xen/xen_clock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/include/intr.h diff -u src/sys/arch/x86/include/intr.h:1.61.6.4 src/sys/arch/x86/include/intr.h:1.61.6.5 --- src/sys/arch/x86/include/intr.h:1.61.6.4 Sun Apr 19 11:40:30 2020 +++ src/sys/arch/x86/include/intr.h Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.61.6.4 2020/04/19 11:40:30 bouyer Exp $ */ +/* $NetBSD: intr.h,v 1.61.6.5 2020/04/19 19:39:10 bouyer Exp $ */ /*- * Copyright (c) 1998, 2001, 2006, 2007, 2008, 2019 The NetBSD Foundation, Inc. @@ -39,6 +39,7 @@ #ifdef _KERNEL #include <sys/types.h> +#include <sys/kcpuset.h> #else #include <stdbool.h> #endif @@ -237,6 +238,10 @@ int x86_send_ipi(struct cpu_info *, int) void x86_broadcast_ipi(int); void x86_ipi_handler(void); +void x86_intr_get_devname(const char *, char *, size_t); +void x86_intr_get_assigned(const char *, kcpuset_t *); +uint64_t x86_intr_get_count(const char *, u_int); + #ifndef XENPV extern void (* const ipifunc[X86_NIPI])(struct cpu_info *); #endif Index: src/sys/arch/x86/include/pic.h diff -u src/sys/arch/x86/include/pic.h:1.9 src/sys/arch/x86/include/pic.h:1.9.14.1 --- src/sys/arch/x86/include/pic.h:1.9 Sat Nov 4 10:26:14 2017 +++ src/sys/arch/x86/include/pic.h Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pic.h,v 1.9 2017/11/04 10:26:14 cherry Exp $ */ +/* $NetBSD: pic.h,v 1.9.14.1 2020/04/19 19:39:10 bouyer Exp $ */ #ifndef _X86_PIC_H #define _X86_PIC_H @@ -23,6 +23,10 @@ struct pic { struct intrstub *pic_edge_stubs; struct ioapic_softc *pic_ioapic; /* if pic_type == PIC_IOAPIC */ struct msipic *pic_msipic; /* if (pic_type == PIC_MSI) || (pic_type == PIC_MSIX) */ + /* interface for subr_interrupt.c */ + void (*pic_intr_get_devname)(const char *, char *, size_t); + void (*pic_intr_get_assigned)(const char *, kcpuset_t *); + uint64_t (*pic_intr_get_count)(const char *, u_int); }; /* Index: src/sys/arch/x86/pci/msipic.c diff -u src/sys/arch/x86/pci/msipic.c:1.20 src/sys/arch/x86/pci/msipic.c:1.20.6.1 --- src/sys/arch/x86/pci/msipic.c:1.20 Mon Dec 2 03:06:51 2019 +++ src/sys/arch/x86/pci/msipic.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: msipic.c,v 1.20 2019/12/02 03:06:51 msaitoh Exp $ */ +/* $NetBSD: msipic.c,v 1.20.6.1 2020/04/19 19:39:10 bouyer Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: msipic.c,v 1.20 2019/12/02 03:06:51 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: msipic.c,v 1.20.6.1 2020/04/19 19:39:10 bouyer Exp $"); #include "opt_intrdebug.h" @@ -436,6 +436,9 @@ static struct pic msi_pic_tmpl = { .pic_hwunmask = msi_hwunmask, .pic_addroute = msi_addroute, .pic_delroute = msi_delroute, + .pic_intr_get_devname = x86_intr_get_devname, + .pic_intr_get_assigned = x86_intr_get_assigned, + .pic_intr_get_count = x86_intr_get_count, }; /* @@ -611,6 +614,9 @@ static struct pic msix_pic_tmpl = { .pic_hwunmask = msix_hwunmask, .pic_addroute = msix_addroute, .pic_delroute = msix_delroute, + .pic_intr_get_devname = x86_intr_get_devname, + .pic_intr_get_assigned = x86_intr_get_assigned, + .pic_intr_get_count = x86_intr_get_count, }; struct pic * Index: src/sys/arch/x86/x86/i8259.c diff -u src/sys/arch/x86/x86/i8259.c:1.23.10.1 src/sys/arch/x86/x86/i8259.c:1.23.10.2 --- src/sys/arch/x86/x86/i8259.c:1.23.10.1 Sun Apr 12 17:25:52 2020 +++ src/sys/arch/x86/x86/i8259.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: i8259.c,v 1.23.10.1 2020/04/12 17:25:52 bouyer Exp $ */ +/* $NetBSD: i8259.c,v 1.23.10.2 2020/04/19 19:39:10 bouyer Exp $ */ /* * Copyright 2002 (c) Wasabi Systems, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i8259.c,v 1.23.10.1 2020/04/12 17:25:52 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i8259.c,v 1.23.10.2 2020/04/19 19:39:10 bouyer Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -118,6 +118,9 @@ struct pic i8259_pic = { .pic_delroute = i8259_setup, .pic_level_stubs = legacy_stubs, .pic_edge_stubs = legacy_stubs, + .pic_intr_get_devname = x86_intr_get_devname, + .pic_intr_get_assigned = x86_intr_get_assigned, + .pic_intr_get_count = x86_intr_get_count, }; void Index: src/sys/arch/x86/x86/intr.c diff -u src/sys/arch/x86/x86/intr.c:1.150.6.4 src/sys/arch/x86/x86/intr.c:1.150.6.5 --- src/sys/arch/x86/x86/intr.c:1.150.6.4 Sun Apr 19 11:40:30 2020 +++ src/sys/arch/x86/x86/intr.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.c,v 1.150.6.4 2020/04/19 11:40:30 bouyer Exp $ */ +/* $NetBSD: intr.c,v 1.150.6.5 2020/04/19 19:39:10 bouyer Exp $ */ /* * Copyright (c) 2007, 2008, 2009, 2019 The NetBSD Foundation, Inc. @@ -133,7 +133,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.150.6.4 2020/04/19 11:40:30 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intr.c,v 1.150.6.5 2020/04/19 19:39:10 bouyer Exp $"); #include "opt_intrdebug.h" #include "opt_multiprocessor.h" @@ -1962,11 +1962,8 @@ intr_get_handler(const char *intrid) return isp->is_handlers; } -/* - * MI interface for subr_interrupt.c - */ uint64_t -interrupt_get_count(const char *intrid, u_int cpu_idx) +x86_intr_get_count(const char *intrid, u_int cpu_idx) { struct cpu_info *ci; struct intrsource *isp; @@ -1976,11 +1973,10 @@ interrupt_get_count(const char *intrid, int i, slot; uint64_t count = 0; + KASSERT(mutex_owned(&cpu_lock)); ci = cpu_lookup(cpu_idx); cpuid = ci->ci_cpuid; - mutex_enter(&cpu_lock); - ih = intr_get_handler(intrid); if (ih == NULL) { count = 0; @@ -2003,31 +1999,75 @@ interrupt_get_count(const char *intrid, } out: - mutex_exit(&cpu_lock); return count; } -/* - * MI interface for subr_interrupt.c - */ void -interrupt_get_assigned(const char *intrid, kcpuset_t *cpuset) +x86_intr_get_assigned(const char *intrid, kcpuset_t *cpuset) { struct cpu_info *ci; struct intrhand *ih; + KASSERT(mutex_owned(&cpu_lock)); kcpuset_zero(cpuset); - mutex_enter(&cpu_lock); - ih = intr_get_handler(intrid); if (ih == NULL) - goto out; + return; ci = ih->ih_cpu; kcpuset_set(cpuset, cpu_index(ci)); +} - out: +void +x86_intr_get_devname(const char *intrid, char *buf, size_t len) +{ + struct intrsource *isp; + struct intrhand *ih; + int slot; + + KASSERT(mutex_owned(&cpu_lock)); + + ih = intr_get_handler(intrid); + if (ih == NULL) { + buf[0] = '\0'; + return; + } + slot = ih->ih_slot; + isp = ih->ih_cpu->ci_isources[slot]; + strlcpy(buf, isp->is_xname, len); + +} + +/* + * MI interface for subr_interrupt.c + */ +uint64_t +interrupt_get_count(const char *intrid, u_int cpu_idx) +{ + struct intrsource *isp; + uint64_t count = 0; + + mutex_enter(&cpu_lock); + isp = intr_get_io_intrsource(intrid); + if (isp != NULL) + count = isp->is_pic->pic_intr_get_count(intrid, cpu_idx); + mutex_exit(&cpu_lock); + return count; +} + +/* + * MI interface for subr_interrupt.c + */ +void +interrupt_get_assigned(const char *intrid, kcpuset_t *cpuset) +{ + struct intrsource *isp; + + mutex_enter(&cpu_lock); + isp = intr_get_io_intrsource(intrid); + if (isp != NULL) + isp->is_pic->pic_intr_get_assigned(intrid, cpuset); mutex_exit(&cpu_lock); } @@ -2058,21 +2098,17 @@ void interrupt_get_devname(const char *intrid, char *buf, size_t len) { struct intrsource *isp; - struct intrhand *ih; - int slot; mutex_enter(&cpu_lock); - - ih = intr_get_handler(intrid); - if (ih == NULL) { - buf[0] = '\0'; - goto out; + isp = intr_get_io_intrsource(intrid); + if (isp != NULL) { + if (isp->is_pic->pic_intr_get_devname == NULL) { + printf("NULL get_devname intrid %s pic %s\n", + intrid, isp->is_pic->pic_name); + } else { + isp->is_pic->pic_intr_get_devname(intrid, buf, len); + } } - slot = ih->ih_slot; - isp = ih->ih_cpu->ci_isources[slot]; - strlcpy(buf, isp->is_xname, len); - - out: mutex_exit(&cpu_lock); } Index: src/sys/arch/x86/x86/ioapic.c diff -u src/sys/arch/x86/x86/ioapic.c:1.63 src/sys/arch/x86/x86/ioapic.c:1.63.8.1 --- src/sys/arch/x86/x86/ioapic.c:1.63 Wed Jun 19 06:32:46 2019 +++ src/sys/arch/x86/x86/ioapic.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: ioapic.c,v 1.63 2019/06/19 06:32:46 msaitoh Exp $ */ +/* $NetBSD: ioapic.c,v 1.63.8.1 2020/04/19 19:39:10 bouyer Exp $ */ /*- * Copyright (c) 2000, 2009 The NetBSD Foundation, Inc. @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.63 2019/06/19 06:32:46 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ioapic.c,v 1.63.8.1 2020/04/19 19:39:10 bouyer Exp $"); #include "opt_ddb.h" @@ -301,6 +301,9 @@ ioapic_attach(device_t parent, device_t sc->sc_pic.pic_trymask = ioapic_trymask; sc->sc_pic.pic_edge_stubs = ioapic_edge_stubs; sc->sc_pic.pic_level_stubs = ioapic_level_stubs; + sc->sc_pic.pic_intr_get_devname = x86_intr_get_devname; + sc->sc_pic.pic_intr_get_assigned = x86_intr_get_assigned; + sc->sc_pic.pic_intr_get_count = x86_intr_get_count; apic_id = (ioapic_read(sc, IOAPIC_ID) & IOAPIC_ID_MASK) >> IOAPIC_ID_SHIFT; Index: src/sys/arch/x86/x86/lapic.c diff -u src/sys/arch/x86/x86/lapic.c:1.76.6.3 src/sys/arch/x86/x86/lapic.c:1.76.6.4 --- src/sys/arch/x86/x86/lapic.c:1.76.6.3 Sat Apr 18 14:47:56 2020 +++ src/sys/arch/x86/x86/lapic.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: lapic.c,v 1.76.6.3 2020/04/18 14:47:56 bouyer Exp $ */ +/* $NetBSD: lapic.c,v 1.76.6.4 2020/04/19 19:39:10 bouyer Exp $ */ /*- * Copyright (c) 2000, 2008 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lapic.c,v 1.76.6.3 2020/04/18 14:47:56 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lapic.c,v 1.76.6.4 2020/04/19 19:39:10 bouyer Exp $"); #include "acpica.h" #include "ioapic.h" @@ -115,6 +115,9 @@ struct pic local_pic = { .pic_hwunmask = lapic_hwunmask, .pic_addroute = lapic_setup, .pic_delroute = lapic_setup, + .pic_intr_get_devname = x86_intr_get_devname, + .pic_intr_get_assigned = x86_intr_get_assigned, + .pic_intr_get_count = x86_intr_get_count, }; static int i82489_ipi(int vec, int target, int dl); Index: src/sys/arch/xen/include/intr.h diff -u src/sys/arch/xen/include/intr.h:1.53.6.2 src/sys/arch/xen/include/intr.h:1.53.6.3 --- src/sys/arch/xen/include/intr.h:1.53.6.2 Thu Apr 16 08:46:35 2020 +++ src/sys/arch/xen/include/intr.h Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: intr.h,v 1.53.6.2 2020/04/16 08:46:35 bouyer Exp $ */ +/* $NetBSD: intr.h,v 1.53.6.3 2020/04/19 19:39:10 bouyer Exp $ */ /* NetBSD intr.h,v 1.15 2004/10/31 10:39:34 yamt Exp */ /*- @@ -58,8 +58,9 @@ struct evtsource { struct intrhand *ev_handlers; /* handler chain */ struct evcnt ev_evcnt; /* interrupt counter */ struct cpu_info *ev_cpu; /* cpu on which this event is bound */ - char ev_intrname[32]; /* interrupt string */ - char ev_xname[64]; /* handler device list */ + char ev_intrname[INTRIDBUF]; /* interrupt string */ + char ev_xname[INTRDEVNAMEBUF]; /* handler device list */ + struct intrsource *ev_isl; /* entry in intr sources list */ }; extern struct intrstub xenev_stubs[]; Index: src/sys/arch/xen/x86/xen_intr.c diff -u src/sys/arch/xen/x86/xen_intr.c:1.21.2.6 src/sys/arch/xen/x86/xen_intr.c:1.21.2.7 --- src/sys/arch/xen/x86/xen_intr.c:1.21.2.6 Sun Apr 19 11:40:30 2020 +++ src/sys/arch/xen/x86/xen_intr.c Sun Apr 19 19:39:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: xen_intr.c,v 1.21.2.6 2020/04/19 11:40:30 bouyer Exp $ */ +/* $NetBSD: xen_intr.c,v 1.21.2.7 2020/04/19 19:39:10 bouyer Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.21.2.6 2020/04/19 11:40:30 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.21.2.7 2020/04/19 19:39:10 bouyer Exp $"); #include "opt_multiprocessor.h" @@ -142,7 +142,7 @@ xen_intr_establish_xname(int legacy_irq, intrstr, xname, known_mpsafe); if (rih == NULL) { - printf("%s: can't establish interrupt", __func__); + printf("%s: can't establish interrupt\n", __func__); return NULL; } @@ -481,7 +481,7 @@ xen_intr_create_intrid(int legacy_irq, s return NULL; /* No pic found! */ } -#if !defined(XENPVHVM) +#if defined(XENPV) __strong_alias(x86_read_psl, xen_read_psl); __strong_alias(x86_write_psl, xen_write_psl); @@ -495,4 +495,4 @@ __strong_alias(intr_disestablish, xen_in __strong_alias(cpu_intr_redistribute, xen_cpu_intr_redistribute); __strong_alias(cpu_intr_count, xen_cpu_intr_count); __strong_alias(cpu_intr_init, xen_cpu_intr_init); -#endif /* !XENPVHVM */ +#endif /* XENPV */ Index: src/sys/arch/xen/xen/evtchn.c diff -u src/sys/arch/xen/xen/evtchn.c:1.88.2.7 src/sys/arch/xen/xen/evtchn.c:1.88.2.8 --- src/sys/arch/xen/xen/evtchn.c:1.88.2.7 Sun Apr 19 11:40:30 2020 +++ src/sys/arch/xen/xen/evtchn.c Sun Apr 19 19:39:11 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: evtchn.c,v 1.88.2.7 2020/04/19 11:40:30 bouyer Exp $ */ +/* $NetBSD: evtchn.c,v 1.88.2.8 2020/04/19 19:39:11 bouyer Exp $ */ /* * Copyright (c) 2006 Manuel Bouyer. @@ -54,7 +54,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.88.2.7 2020/04/19 11:40:30 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.88.2.8 2020/04/19 19:39:11 bouyer Exp $"); #include "opt_xen.h" #include "isa.h" @@ -121,7 +121,9 @@ static void xen_evtchn_unmask(struct pic static void xen_evtchn_addroute(struct pic *, struct cpu_info *, int, int, int); static void xen_evtchn_delroute(struct pic *, struct cpu_info *, int, int, int); static bool xen_evtchn_trymask(struct pic *, int); - +static void xen_intr_get_devname(const char *, char *, size_t); +static void xen_intr_get_assigned(const char *, kcpuset_t *); +static uint64_t xen_intr_get_count(const char *, u_int); struct pic xen_pic = { .pic_name = "xenev0", @@ -136,6 +138,9 @@ struct pic xen_pic = { .pic_trymask = xen_evtchn_trymask, .pic_level_stubs = xenev_stubs, .pic_edge_stubs = xenev_stubs, + .pic_intr_get_devname = xen_intr_get_devname, + .pic_intr_get_assigned = xen_intr_get_assigned, + .pic_intr_get_count = xen_intr_get_count, }; /* @@ -365,6 +370,8 @@ evtchn_do_event(int evtch, struct intrfr } ci->ci_ilevel = evtsource[evtch]->ev_maxlevel; iplmask = evtsource[evtch]->ev_imask; + KASSERT(ci->ci_ilevel >= IPL_VM); + KASSERT(cpu_intr_p()); x86_enable_intr(); mutex_spin_enter(&evtlock[evtch]); ih = evtsource[evtch]->ev_handlers; @@ -418,7 +425,6 @@ xen_evtchn_mask(struct pic *pic, int pin KASSERT(evtchn < NR_EVENT_CHANNELS); hypervisor_mask_event(evtchn); - } static void @@ -732,7 +738,7 @@ pirq_establish(int pirq, int evtch, int ih->arg = arg; if (event_set_handler(evtch, pirq_interrupt, ih, level, intrname, - xname, known_mpsafe) != 0) { + xname, known_mpsafe) == NULL) { kmem_free(ih, sizeof(struct pintrhand)); return NULL; } @@ -885,6 +891,11 @@ event_set_handler(int evtch, int (*func) } } mutex_spin_exit(&evtlock[evtch]); +#ifndef XENPV + mutex_enter(&cpu_lock); + evts->ev_isl->is_handlers = evts->ev_handlers; + mutex_exit(&cpu_lock); +#endif } @@ -895,6 +906,16 @@ event_set_handler(int evtch, int (*func) intr_calculatemasks(evts, evtch, ci); splx(s); +#ifndef XENPV + mutex_enter(&cpu_lock); + if (evts->ev_isl == NULL) { + evts->ev_isl = intr_allocate_io_intrsource(intrname); + evts->ev_isl->is_pic = &xen_pic; + } + evts->ev_isl->is_handlers = evts->ev_handlers; + mutex_exit(&cpu_lock); +#endif + return ih; } @@ -968,8 +989,19 @@ event_remove_handler(int evtch, int (*fu panic("event_remove_handler"); *ihp = ih->ih_next; mutex_spin_exit(&evtlock[evtch]); +#ifndef XENPV + mutex_enter(&cpu_lock); + evts->ev_isl->is_handlers = evts->ev_handlers; + mutex_exit(&cpu_lock); +#endif kmem_free(ih, sizeof (struct intrhand)); if (evts->ev_handlers == NULL) { +#ifndef XENPV + KASSERT(evts->ev_isl->is_handlers == NULL); + mutex_enter(&cpu_lock); + intr_free_io_intrsource(evts->ev_intrname); + mutex_exit(&cpu_lock); +#endif xen_atomic_clear_bit(&ci->ci_evtmask[0], evtch); evcnt_detach(&evts->ev_evcnt); kmem_free(evts, sizeof (struct evtsource)); @@ -1055,7 +1087,6 @@ xen_debug_handler(void *arg) return 0; } -#ifdef XENPV static struct evtsource * event_get_handler(const char *intrid) { @@ -1072,11 +1103,8 @@ event_get_handler(const char *intrid) return NULL; } -/* - * MI interface for subr_interrupt.c - */ -uint64_t -interrupt_get_count(const char *intrid, u_int cpu_idx) +static uint64_t +xen_intr_get_count(const char *intrid, u_int cpu_idx) { int count = 0; struct evtsource *evp; @@ -1092,11 +1120,8 @@ interrupt_get_count(const char *intrid, return count; } -/* - * MI interface for subr_interrupt.c - */ -void -interrupt_get_assigned(const char *intrid, kcpuset_t *cpuset) +static void +xen_intr_get_assigned(const char *intrid, kcpuset_t *cpuset) { struct evtsource *evp; @@ -1111,11 +1136,8 @@ interrupt_get_assigned(const char *intri mutex_spin_exit(&evtchn_lock); } -/* - * MI interface for subr_interrupt.c - */ -void -interrupt_get_devname(const char *intrid, char *buf, size_t len) +static void +xen_intr_get_devname(const char *intrid, char *buf, size_t len) { struct evtsource *evp; @@ -1127,6 +1149,7 @@ interrupt_get_devname(const char *intrid mutex_spin_exit(&evtchn_lock); } +#ifdef XENPV /* * MI interface for subr_interrupt. */ @@ -1180,7 +1203,12 @@ interrupt_construct_intrids(const kcpuse off++; } mutex_spin_exit(&evtchn_lock); - return ii_handler; } +__strong_alias(interrupt_get_count, xen_intr_get_count); +__strong_alias(interrupt_get_assigned, xen_intr_get_assigned); +__strong_alias(interrupt_get_devname, xen_intr_get_devname); +__strong_alias(x86_intr_get_count, xen_intr_get_count); +__strong_alias(x86_intr_get_assigned, xen_intr_get_assigned); +__strong_alias(x86_intr_get_devname, xen_intr_get_devname); #endif /* XENPV */ Index: src/sys/arch/xen/xen/xen_clock.c diff -u src/sys/arch/xen/xen/xen_clock.c:1.1.2.3 src/sys/arch/xen/xen/xen_clock.c:1.1.2.4 --- src/sys/arch/xen/xen/xen_clock.c:1.1.2.3 Sat Apr 18 15:06:18 2020 +++ src/sys/arch/xen/xen/xen_clock.c Sun Apr 19 19:39:11 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: xen_clock.c,v 1.1.2.3 2020/04/18 15:06:18 bouyer Exp $ */ +/* $NetBSD: xen_clock.c,v 1.1.2.4 2020/04/19 19:39:11 bouyer Exp $ */ /*- * Copyright (c) 2017, 2018 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xen_clock.c,v 1.1.2.3 2020/04/18 15:06:18 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_clock.c,v 1.1.2.4 2020/04/19 19:39:11 bouyer Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -636,7 +636,7 @@ xen_resumeclocks(struct cpu_info *ci) /* XXX sketchy function pointer cast -- fix the API, please */ if (event_set_handler(evtch, __FPTRCAST(int (*)(void *), xen_timer_handler), - ci, IPL_CLOCK, NULL, intr_xname, true, false) != 0) + ci, IPL_CLOCK, NULL, intr_xname, true, false) == NULL) panic("failed to establish timer interrupt handler"); hypervisor_unmask_event(evtch);