Module Name: src Committed By: pgoyette Date: Tue Sep 18 01:15:58 UTC 2018
Modified Files: src/sys/compat/common [pgoyette-compat]: if_43.c usb_subr_30.c src/sys/dev [pgoyette-compat]: bio.c ccd.c clockctl.c vnd.c src/sys/dev/raidframe [pgoyette-compat]: rf_netbsdkintf.c src/sys/dev/sysmon [pgoyette-compat]: sysmon_power.c src/sys/dev/usb [pgoyette-compat]: ugen.c uhid.c usb.c src/sys/dev/wscons [pgoyette-compat]: wsevent.c src/sys/fs/puffs [pgoyette-compat]: puffs_msgif.c src/sys/kern [pgoyette-compat]: compat_stub.c sys_module.c src/sys/net [pgoyette-compat]: if_spppsubr.c rtsock.c src/sys/opencrypto [pgoyette-compat]: cryptodev.c src/sys/sys [pgoyette-compat]: compat_stub.h Log Message: Split the COMPAT_CALL_HOOK to separate the declaration from the implementation. Some hooks are called from multiple source files, and the old method resulted in duplicate implementations. Implement MP-safe hooks for the usb_subr_30 code. Pass the helper functions as arguments to the compat code so it does not have to determine if the kernel contains usb code. To generate a diff of this commit: cvs rdiff -u -r1.14.2.2 -r1.14.2.3 src/sys/compat/common/if_43.c cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/compat/common/usb_subr_30.c cvs rdiff -u -r1.13.16.2 -r1.13.16.3 src/sys/dev/bio.c cvs rdiff -u -r1.175.2.5 -r1.175.2.6 src/sys/dev/ccd.c cvs rdiff -u -r1.35.14.2 -r1.35.14.3 src/sys/dev/clockctl.c cvs rdiff -u -r1.263.2.3 -r1.263.2.4 src/sys/dev/vnd.c cvs rdiff -u -r1.356.2.3 -r1.356.2.4 src/sys/dev/raidframe/rf_netbsdkintf.c cvs rdiff -u -r1.58.2.2 -r1.58.2.3 src/sys/dev/sysmon/sysmon_power.c cvs rdiff -u -r1.139.2.2 -r1.139.2.3 src/sys/dev/usb/ugen.c cvs rdiff -u -r1.101.2.2 -r1.101.2.3 src/sys/dev/usb/uhid.c cvs rdiff -u -r1.168.2.3 -r1.168.2.4 src/sys/dev/usb/usb.c cvs rdiff -u -r1.37.2.3 -r1.37.2.4 src/sys/dev/wscons/wsevent.c cvs rdiff -u -r1.101.10.3 -r1.101.10.4 src/sys/fs/puffs/puffs_msgif.c cvs rdiff -u -r1.1.2.18 -r1.1.2.19 src/sys/kern/compat_stub.c cvs rdiff -u -r1.23.2.10 -r1.23.2.11 src/sys/kern/sys_module.c cvs rdiff -u -r1.179.2.4 -r1.179.2.5 src/sys/net/if_spppsubr.c cvs rdiff -u -r1.238.2.7 -r1.238.2.8 src/sys/net/rtsock.c cvs rdiff -u -r1.98.2.2 -r1.98.2.3 src/sys/opencrypto/cryptodev.c cvs rdiff -u -r1.1.2.23 -r1.1.2.24 src/sys/sys/compat_stub.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/if_43.c diff -u src/sys/compat/common/if_43.c:1.14.2.2 src/sys/compat/common/if_43.c:1.14.2.3 --- src/sys/compat/common/if_43.c:1.14.2.2 Mon Sep 17 11:04:30 2018 +++ src/sys/compat/common/if_43.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_43.c,v 1.14.2.2 2018/09/17 11:04:30 pgoyette Exp $ */ +/* $NetBSD: if_43.c,v 1.14.2.3 2018/09/18 01:15:57 pgoyette Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1990, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.14.2.2 2018/09/17 11:04:30 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.14.2.3 2018/09/18 01:15:57 pgoyette Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -78,6 +78,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1. #include <uvm/uvm_extern.h> /* COMPAT_HOOK for replacing the cmdcvt() function */ +COMPAT_CALL_HOOK_DECL(ieee80211_get_ostats_20_hook, f, (int cmd), (cmd), cmd); COMPAT_CALL_HOOK(ieee80211_get_ostats_20_hook, f, (int cmd), (cmd), cmd); u_long Index: src/sys/compat/common/usb_subr_30.c diff -u src/sys/compat/common/usb_subr_30.c:1.1.2.1 src/sys/compat/common/usb_subr_30.c:1.1.2.2 --- src/sys/compat/common/usb_subr_30.c:1.1.2.1 Thu Mar 29 23:23:03 2018 +++ src/sys/compat/common/usb_subr_30.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: usb_subr_30.c,v 1.1.2.1 2018/03/29 23:23:03 pgoyette Exp $ */ +/* $NetBSD: usb_subr_30.c,v 1.1.2.2 2018/09/18 01:15:57 pgoyette Exp $ */ /* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */ /* @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb_subr_30.c,v 1.1.2.1 2018/03/29 23:23:03 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb_subr_30.c,v 1.1.2.2 2018/09/18 01:15:57 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -126,7 +126,10 @@ usb_copy_old_devinfo(struct usb_device_i static int usbd_fill_deviceinfo_old(struct usbd_device *dev, - struct usb_device_info_old *di, int usedev) + struct usb_device_info_old *di, int usedev, + void (*do_devinfo_vp)(struct usbd_device *, char *, size_t, char *, + size_t, int, int), + int (*do_printBCD)(char *cp, size_t l, int bcd)) { struct usbd_port *p; int i, j, err; @@ -134,9 +137,9 @@ usbd_fill_deviceinfo_old(struct usbd_dev di->udi_bus = device_unit(dev->ud_bus->ub_usbctl); di->udi_addr = dev->ud_addr; di->udi_cookie = dev->ud_cookie; - (*vec_usbd_devinfo_vp)(dev, di->udi_vendor, sizeof(di->udi_vendor), + (*do_devinfo_vp)(dev, di->udi_vendor, sizeof(di->udi_vendor), di->udi_product, sizeof(di->udi_product), usedev, 0); - (*vec_usbd_printBCD)(di->udi_release, sizeof(di->udi_release), + (*do_printBCD)(di->udi_release, sizeof(di->udi_release), UGETW(dev->ud_ddesc.bcdDevice)); di->udi_vendorNo = UGETW(dev->ud_ddesc.idVendor); di->udi_productNo = UGETW(dev->ud_ddesc.idProduct); @@ -226,18 +229,20 @@ usb_copy_to_old30(struct usb_event *ue, return 0; } +COMPAT_SET_HOOK2(usb_subr_30_hook, "usb_30", usbd_fill_deviceinfo_old, + usb_copy_to_old30); +COMPAT_UNSET_HOOK2(usb_subr_30_hook); + void usb_30_init(void) { - usbd30_fill_deviceinfo_old = usbd_fill_deviceinfo_old; - usb30_copy_to_old = usb_copy_to_old30; + usb_subr_30_hook_set(); } void usb_30_fini(void) { - usbd30_fill_deviceinfo_old = (void *)enosys; - usb30_copy_to_old = (void *)enosys; + usb_subr_30_hook_unset(); } Index: src/sys/dev/bio.c diff -u src/sys/dev/bio.c:1.13.16.2 src/sys/dev/bio.c:1.13.16.3 --- src/sys/dev/bio.c:1.13.16.2 Mon Sep 17 11:04:30 2018 +++ src/sys/dev/bio.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bio.c,v 1.13.16.2 2018/09/17 11:04:30 pgoyette Exp $ */ +/* $NetBSD: bio.c,v 1.13.16.3 2018/09/18 01:15:57 pgoyette Exp $ */ /* $OpenBSD: bio.c,v 1.9 2007/03/20 02:35:55 marco Exp $ */ /* @@ -28,7 +28,7 @@ /* A device controller ioctl tunnelling device. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13.16.2 2018/09/17 11:04:30 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13.16.3 2018/09/18 01:15:57 pgoyette Exp $"); #include "opt_compat_netbsd.h" @@ -115,6 +115,9 @@ bioclose(dev_t dev, int flags, int mode, } /* Hook up the compat_bio_30 routine */ +COMPAT_CALL_HOOK_DECL(compat_bio_30_hook, f, + (void * cookie, u_long cmd, void *addr, int(*ff)(void *, u_long, void *)), + (cookie, cmd, addr, ff), enosys()); COMPAT_CALL_HOOK(compat_bio_30_hook, f, (void * cookie, u_long cmd, void *addr, int(*ff)(void *, u_long, void *)), (cookie, cmd, addr, ff), enosys()); Index: src/sys/dev/ccd.c diff -u src/sys/dev/ccd.c:1.175.2.5 src/sys/dev/ccd.c:1.175.2.6 --- src/sys/dev/ccd.c:1.175.2.5 Sun Sep 16 04:57:22 2018 +++ src/sys/dev/ccd.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ccd.c,v 1.175.2.5 2018/09/16 04:57:22 pgoyette Exp $ */ +/* $NetBSD: ccd.c,v 1.175.2.6 2018/09/18 01:15:57 pgoyette Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc. @@ -88,7 +88,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.175.2.5 2018/09/16 04:57:22 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.175.2.6 2018/09/18 01:15:57 pgoyette Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -1061,6 +1061,10 @@ ccdread(dev_t dev, struct uio *uio, int * This looks ugly, since we pass the "real" ioctl function as an * argument to the compat_xxx function. */ +COMPAT_CALL_HOOK_DECL(ccd_ioctl_60_hook, f, (dev_t dev, u_long cmd, void *data, + int flag, struct lwp *l, int (*ff)(dev_t, u_long, void *, int, + struct lwp *)), + (dev, cmd, data, flag, l, ccdioctl), enosys()); COMPAT_CALL_HOOK(ccd_ioctl_60_hook, f, (dev_t dev, u_long cmd, void *data, int flag, struct lwp *l, int (*ff)(dev_t, u_long, void *, int, struct lwp *)), Index: src/sys/dev/clockctl.c diff -u src/sys/dev/clockctl.c:1.35.14.2 src/sys/dev/clockctl.c:1.35.14.3 --- src/sys/dev/clockctl.c:1.35.14.2 Mon Sep 17 11:04:30 2018 +++ src/sys/dev/clockctl.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: clockctl.c,v 1.35.14.2 2018/09/17 11:04:30 pgoyette Exp $ */ +/* $NetBSD: clockctl.c,v 1.35.14.3 2018/09/18 01:15:57 pgoyette Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.35.14.2 2018/09/17 11:04:30 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: clockctl.c,v 1.35.14.3 2018/09/18 01:15:57 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_ntp.h" @@ -201,6 +201,9 @@ clockctl_modcmd(modcmd_t cmd, void *data } /* Hook the compat_50 stuff */ +COMPAT_CALL_HOOK_DECL(clockctl_ioctl_50_hook, f, + (dev_t dev, u_long cmd, void *data, int flags, struct lwp *l), + (dev, cmd, data, flags, l), enosys()); COMPAT_CALL_HOOK(clockctl_ioctl_50_hook, f, (dev_t dev, u_long cmd, void *data, int flags, struct lwp *l), (dev, cmd, data, flags, l), enosys()); Index: src/sys/dev/vnd.c diff -u src/sys/dev/vnd.c:1.263.2.3 src/sys/dev/vnd.c:1.263.2.4 --- src/sys/dev/vnd.c:1.263.2.3 Mon Sep 17 11:04:30 2018 +++ src/sys/dev/vnd.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: vnd.c,v 1.263.2.3 2018/09/17 11:04:30 pgoyette Exp $ */ +/* $NetBSD: vnd.c,v 1.263.2.4 2018/09/18 01:15:57 pgoyette Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.263.2.3 2018/09/17 11:04:30 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.263.2.4 2018/09/18 01:15:57 pgoyette Exp $"); #if defined(_KERNEL_OPT) #include "opt_vnd.h" @@ -1111,6 +1111,11 @@ vndioctl_get(struct lwp *l, void *data, } } +COMPAT_CALL_HOOK_DECL(compat_vndioctl_30_hook, f, + (u_long cmd, struct lwp *l, void *data, int unit, struct vattr *vattr, + int (*ff)(struct lwp *, void *, int, struct vattr *)), + (cmd, l, data, unit, vattr, ff), + enosys()); COMPAT_CALL_HOOK(compat_vndioctl_30_hook, f, (u_long cmd, struct lwp *l, void *data, int unit, struct vattr *vattr, int (*ff)(struct lwp *, void *, int, struct vattr *)), Index: src/sys/dev/raidframe/rf_netbsdkintf.c diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.356.2.3 src/sys/dev/raidframe/rf_netbsdkintf.c:1.356.2.4 --- src/sys/dev/raidframe/rf_netbsdkintf.c:1.356.2.3 Mon Sep 17 11:04:30 2018 +++ src/sys/dev/raidframe/rf_netbsdkintf.c Tue Sep 18 01:15:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_netbsdkintf.c,v 1.356.2.3 2018/09/17 11:04:30 pgoyette Exp $ */ +/* $NetBSD: rf_netbsdkintf.c,v 1.356.2.4 2018/09/18 01:15:57 pgoyette Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc. @@ -101,7 +101,7 @@ ***********************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.356.2.3 2018/09/17 11:04:30 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.356.2.4 2018/09/18 01:15:57 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1038,11 +1038,22 @@ raid_detach_unlocked(struct raid_softc * } /* Hooks to call the 5.0 and 8.0 ioctl compat code */ +COMPAT_CALL_HOOK_DECL(raidframe50_ioctl_hook, f, + (int cmd, int initted, RF_Raid_t *raidPtr, int unit, void *data, + RF_Config_t **k_cfg), + (cmd, initted, raidPtr, unit, data, k_cfg), + enosys()); COMPAT_CALL_HOOK(raidframe50_ioctl_hook, f, (int cmd, int initted, RF_Raid_t *raidPtr, int unit, void *data, RF_Config_t **k_cfg), (cmd, initted, raidPtr, unit, data, k_cfg), enosys()); + +COMPAT_CALL_HOOK_DECL(raidframe80_ioctl_hook, f, + (int cmd, int initted, RF_Raid_t *raidPtr, int unit, void *data, + RF_Config_t **k_cfg), + (cmd, initted, raidPtr, unit, data, k_cfg), + enosys()); COMPAT_CALL_HOOK(raidframe80_ioctl_hook, f, (int cmd, int initted, RF_Raid_t *raidPtr, int unit, void *data, RF_Config_t **k_cfg), Index: src/sys/dev/sysmon/sysmon_power.c diff -u src/sys/dev/sysmon/sysmon_power.c:1.58.2.2 src/sys/dev/sysmon/sysmon_power.c:1.58.2.3 --- src/sys/dev/sysmon/sysmon_power.c:1.58.2.2 Mon Sep 17 11:04:31 2018 +++ src/sys/dev/sysmon/sysmon_power.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: sysmon_power.c,v 1.58.2.2 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: sysmon_power.c,v 1.58.2.3 2018/09/18 01:15:58 pgoyette Exp $ */ /*- * Copyright (c) 2007 Juan Romero Pardines. @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sysmon_power.c,v 1.58.2.2 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysmon_power.c,v 1.58.2.3 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -318,6 +318,9 @@ sysmon_power_event_queue_flush(void) /* * Call the compat hook function */ +COMPAT_CALL_HOOK_DECL(compat_sysmon_power_40_hook, f, + (power_event_t *pev, struct sysmon_pswitch *pswitch, int event), + (pev, pswitch, event), enosys()); COMPAT_CALL_HOOK(compat_sysmon_power_40_hook, f, (power_event_t *pev, struct sysmon_pswitch *pswitch, int event), (pev, pswitch, event), enosys()); Index: src/sys/dev/usb/ugen.c diff -u src/sys/dev/usb/ugen.c:1.139.2.2 src/sys/dev/usb/ugen.c:1.139.2.3 --- src/sys/dev/usb/ugen.c:1.139.2.2 Thu Sep 6 06:56:04 2018 +++ src/sys/dev/usb/ugen.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ugen.c,v 1.139.2.2 2018/09/06 06:56:04 pgoyette Exp $ */ +/* $NetBSD: ugen.c,v 1.139.2.3 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.139.2.2 2018/09/06 06:56:04 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ugen.c,v 1.139.2.3 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1439,6 +1439,13 @@ ugen_get_alt_index(struct ugen_softc *sc return usbd_get_interface_altindex(iface); } +COMPAT_CALL_HOOK_DECL(usb_subr_30_hook, f1, + (struct usbd_device *udev, struct usb_device_info_old * addr, int usedev, + void (*fill_devinfo_vp)(struct usbd_device *, char *, size_t, char *, + size_t, int, int), int (*printBCD)(char *, size_t, int)), + (udev, addr, usedev, fill_devinfo_vp, printBCD), + enosys()); + Static int ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, void *addr, int flag, struct lwp *l) @@ -1837,8 +1844,9 @@ ugen_do_ioctl(struct ugen_softc *sc, int (struct usb_device_info *)addr, 0); break; case USB_GET_DEVICEINFO_OLD: - if ((*usbd30_fill_deviceinfo_old)(sc->sc_udev, - (struct usb_device_info_old *)addr, 0) == 0) + if (usb_subr_30_hook_f1_call(sc->sc_udev, + (struct usb_device_info_old *)addr, 0, + usbd_devinfo_vp, usbd_printBCD) == 0) return 0; return EINVAL; default: Index: src/sys/dev/usb/uhid.c diff -u src/sys/dev/usb/uhid.c:1.101.2.2 src/sys/dev/usb/uhid.c:1.101.2.3 --- src/sys/dev/usb/uhid.c:1.101.2.2 Thu Sep 6 06:56:04 2018 +++ src/sys/dev/usb/uhid.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: uhid.c,v 1.101.2.2 2018/09/06 06:56:04 pgoyette Exp $ */ +/* $NetBSD: uhid.c,v 1.101.2.3 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Copyright (c) 1998, 2004, 2008, 2012 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.101.2.2 2018/09/06 06:56:04 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uhid.c,v 1.101.2.3 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -513,6 +513,13 @@ uhidwrite(dev_t dev, struct uio *uio, in return error; } +COMPAT_CALL_HOOK_DECL(usb_subr_30_hook, f1, + (struct usbd_device *udev, struct usb_device_info_old * addr, int usedev, + void (*fill_devinfo_vp)(struct usbd_device *, char *, size_t, char *, + size_t, int, int), int (*printBCD)(char *, size_t, int)), + (udev, addr, usedev, fill_devinfo_vp, printBCD), + enosys()); + int uhid_do_ioctl(struct uhid_softc *sc, u_long cmd, void *addr, int flag, struct lwp *l) @@ -654,9 +661,9 @@ uhid_do_ioctl(struct uhid_softc *sc, u_l (struct usb_device_info *)addr, 0); break; case USB_GET_DEVICEINFO_OLD: - err = (*usbd30_fill_deviceinfo_old)( - sc->sc_hdev.sc_parent->sc_udev, - (struct usb_device_info_old *)addr, 0); + err = usb_subr_30_hook_f1_call( sc->sc_hdev.sc_parent->sc_udev, + (struct usb_device_info_old *)addr, 0, + usbd_devinfo_vp, usbd_printBCD); if (err == 0) return 0; break; Index: src/sys/dev/usb/usb.c diff -u src/sys/dev/usb/usb.c:1.168.2.3 src/sys/dev/usb/usb.c:1.168.2.4 --- src/sys/dev/usb/usb.c:1.168.2.3 Thu Sep 6 06:56:05 2018 +++ src/sys/dev/usb/usb.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: usb.c,v 1.168.2.3 2018/09/06 06:56:05 pgoyette Exp $ */ +/* $NetBSD: usb.c,v 1.168.2.4 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Copyright (c) 1998, 2002, 2008, 2012 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.168.2.3 2018/09/06 06:56:05 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.168.2.4 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -646,6 +646,14 @@ usbopen(dev_t dev, int flag, int mode, s return 0; } +/* Call hook for usbd30_fill_device_info_old() */ +COMPAT_CALL_HOOK_DECL(usb_subr_30_hook, f2, + (struct usb_event *ue, struct usb_event_old *ueo, struct uio *uio), + (ue, ueo, uio), enosys()); +COMPAT_CALL_HOOK(usb_subr_30_hook, f2, + (struct usb_event *ue, struct usb_event_old *ueo, struct uio *uio), + (ue, ueo, uio), enosys()); + int usbread(dev_t dev, struct uio *uio, int flag) { @@ -686,7 +694,7 @@ usbread(dev_t dev, struct uio *uio, int mutex_exit(&usb_event_lock); if (!error) { if (useold) { /* copy fields to old struct */ - error = (*usb30_copy_to_old)(ue, ueo, uio); + error = usb_subr_30_hook_f2_call(ue, ueo, uio); if (error == ENOSYS) error = EINVAL; @@ -718,6 +726,20 @@ usbclose(dev_t dev, int flag, int mode, return 0; } +/* Call the hook for usb30_copy_to_old() */ +COMPAT_CALL_HOOK_DECL(usb_subr_30_hook, f1, + (struct usbd_device *udev, struct usb_device_info_old * addr, int usedev, + void (*fill_devinfo_vp)(struct usbd_device *, char *, size_t, char *, + size_t, int, int), int (*printBCD)(char *, size_t, int)), + (udev, addr, usedev, fill_devinfo_vp, printBCD), + enosys()); +COMPAT_CALL_HOOK(usb_subr_30_hook, f1, + (struct usbd_device *udev, struct usb_device_info_old * addr, int usedev, + void (*fill_devinfo_vp)(struct usbd_device *, char *, size_t, char *, + size_t, int, int), int (*printBCD)(char *, size_t, int)), + (udev, addr, usedev, fill_devinfo_vp, printBCD), + enosys()); + int usbioctl(dev_t devt, u_long cmd, void *data, int flag, struct lwp *l) { @@ -866,7 +888,8 @@ usbioctl(dev_t devt, u_long cmd, void *d error = ENXIO; goto fail; } - error = (*usbd30_fill_deviceinfo_old)(dev, di, 1); + error = usb_subr_30_hook_f1_call(dev, di, 1, + usbd_devinfo_vp, usbd_printBCD); if (error == ENOSYS) error = EINVAL; if (error) Index: src/sys/dev/wscons/wsevent.c diff -u src/sys/dev/wscons/wsevent.c:1.37.2.3 src/sys/dev/wscons/wsevent.c:1.37.2.4 --- src/sys/dev/wscons/wsevent.c:1.37.2.3 Mon Sep 17 11:04:31 2018 +++ src/sys/dev/wscons/wsevent.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: wsevent.c,v 1.37.2.3 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: wsevent.c,v 1.37.2.4 2018/09/18 01:15:58 pgoyette Exp $ */ /*- * Copyright (c) 2006, 2008 The NetBSD Foundation, Inc. @@ -104,7 +104,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wsevent.c,v 1.37.2.3 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wsevent.c,v 1.37.2.4 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -189,6 +189,9 @@ wsevent_fini(struct wseventvar *ev) softint_disestablish(ev->sih); } +COMPAT_CALL_HOOK_DECL(wsevent_50_copyout_events_hook, f, + (const struct wscons_event *events, int cnt, struct uio *uio), + (events, cnt, uio), enosys()); COMPAT_CALL_HOOK(wsevent_50_copyout_events_hook, f, (const struct wscons_event *events, int cnt, struct uio *uio), (events, cnt, uio), enosys()); Index: src/sys/fs/puffs/puffs_msgif.c diff -u src/sys/fs/puffs/puffs_msgif.c:1.101.10.3 src/sys/fs/puffs/puffs_msgif.c:1.101.10.4 --- src/sys/fs/puffs/puffs_msgif.c:1.101.10.3 Mon Sep 17 11:04:31 2018 +++ src/sys/fs/puffs/puffs_msgif.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_msgif.c,v 1.101.10.3 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: puffs_msgif.c,v 1.101.10.4 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.101.10.3 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.101.10.4 2018/09/18 01:15:58 pgoyette Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -325,11 +325,17 @@ puffs_getmsgid(struct puffs_mount *pmp) /* Routines to call the compat hooks */ /* Out-going */ +COMPAT_CALL_HOOK_DECL(puffs50_compat_hook, f1, + (struct puffs_req *oreq, struct puffs_req **creqp, ssize_t *deltap), + (oreq, creqp, deltap), enosys()); COMPAT_CALL_HOOK(puffs50_compat_hook, f1, (struct puffs_req *oreq, struct puffs_req **creqp, ssize_t *deltap), (oreq, creqp, deltap), enosys()); /* Incoming */ +COMPAT_CALL_HOOK_DECL(puffs50_compat_hook, f2, + (struct puffs_req *oreq, struct puffs_req *creqp), + (oreq, creqp), enosys()); COMPAT_CALL_HOOK(puffs50_compat_hook, f2, (struct puffs_req *oreq, struct puffs_req *creqp), (oreq, creqp), enosys()); Index: src/sys/kern/compat_stub.c diff -u src/sys/kern/compat_stub.c:1.1.2.18 src/sys/kern/compat_stub.c:1.1.2.19 --- src/sys/kern/compat_stub.c:1.1.2.18 Mon Sep 17 11:04:31 2018 +++ src/sys/kern/compat_stub.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.c,v 1.1.2.18 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: compat_stub.c,v 1.1.2.19 2018/09/18 01:15:58 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -33,7 +33,6 @@ #ifdef _KERNEL_OPT #include "opt_ntp.h" -#include "usb.h" /* XXX No other way to determine if USB is present */ #endif #include <sys/systm.h> @@ -58,32 +57,10 @@ void (*vec_ntp_gettime)(struct ntptimeva int (*vec_ntp_timestatus)(void) = NULL; #endif -#if NUSB > 0 -#include <dev/usb/usb.h> -#include <dev/usb/usbdi.h> -#endif - /* * usb device_info compatability - * - * MP-hooks not needed since the USB code is not modular */ -int (*usbd30_fill_deviceinfo_old)(struct usbd_device *, - struct usb_device_info_old *, int) = (void *)enosys; - -int (*usb30_copy_to_old)(struct usb_event *, struct usb_event_old *, - struct uio *) = (void *)enosys; - -#if NUSB > 0 -void (*vec_usbd_devinfo_vp)(struct usbd_device *, char *, size_t, char *, - size_t, int, int) = usbd_devinfo_vp; -int (*vec_usbd_printBCD)(char *cp, size_t l, int bcd) = usbd_printBCD; - -#else -void (*vec_usbd_devinfo_vp)(struct usbd_device *, char *, size_t, char *, - size_t, int, int) = NULL; -int (*vec_usbd_printBCD)(char *cp, size_t l, int bcd) = NULL; -#endif +struct usb_subr_30_hook_t usb_subr_30_hook; /* * ccd device compatability ioctl Index: src/sys/kern/sys_module.c diff -u src/sys/kern/sys_module.c:1.23.2.10 src/sys/kern/sys_module.c:1.23.2.11 --- src/sys/kern/sys_module.c:1.23.2.10 Mon Sep 17 11:04:31 2018 +++ src/sys/kern/sys_module.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_module.c,v 1.23.2.10 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: sys_module.c,v 1.23.2.11 2018/09/18 01:15:58 pgoyette Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_module.c,v 1.23.2.10 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_module.c,v 1.23.2.11 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_modular.h" @@ -262,6 +262,8 @@ handle_modctl_stat(struct iovec *iov, vo } /* COMPAT_HOOK glue for modstat_80 */ +COMPAT_CALL_HOOK_DECL(compat_modstat_80_hook, f, + (int cmd, struct iovec *iov, void *arg), (cmd, iov, arg), enosys()); COMPAT_CALL_HOOK(compat_modstat_80_hook, f, (int cmd, struct iovec *iov, void *arg), (cmd, iov, arg), enosys()); Index: src/sys/net/if_spppsubr.c diff -u src/sys/net/if_spppsubr.c:1.179.2.4 src/sys/net/if_spppsubr.c:1.179.2.5 --- src/sys/net/if_spppsubr.c:1.179.2.4 Mon Sep 17 11:04:31 2018 +++ src/sys/net/if_spppsubr.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_spppsubr.c,v 1.179.2.4 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: if_spppsubr.c,v 1.179.2.5 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Synchronous PPP/Cisco link level subroutines. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.179.2.4 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.179.2.5 2018/09/18 01:15:58 pgoyette Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -5612,6 +5612,8 @@ sppp_suggest_ip6_addr(struct sppp *sp, s #endif /*INET6*/ /* Hook the sppp_params50 compat code */ +COMPAT_CALL_HOOK_DECL(sppp_params_50_hook, f, + (struct sppp *sp, u_long cmd, void *data), (sp, cmd, data), enosys()); COMPAT_CALL_HOOK(sppp_params_50_hook, f, (struct sppp *sp, u_long cmd, void *data), (sp, cmd, data), enosys()); Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.238.2.7 src/sys/net/rtsock.c:1.238.2.8 --- src/sys/net/rtsock.c:1.238.2.7 Mon Sep 17 11:04:31 2018 +++ src/sys/net/rtsock.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.238.2.7 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: rtsock.c,v 1.238.2.8 2018/09/18 01:15:58 pgoyette Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.238.2.7 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.238.2.8 2018/09/18 01:15:58 pgoyette Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1383,15 +1383,23 @@ COMPATNAME(rt_missmsg)(int type, const s * COMPAT_xx options and we would otherwise end up with duplicate * global symbols. */ -static +COMPAT_CALL_HOOK_DECL(rtsock14_hook, f1, (struct ifnet *ifp), (ifp), enosys()); +#ifndef COMPAT_RTSOCK COMPAT_CALL_HOOK(rtsock14_hook, f1, (struct ifnet *ifp), (ifp), enosys()); +#endif -static +COMPAT_CALL_HOOK_DECL(rtsock14_hook, f2, + (struct ifnet *ifp, struct rt_walkarg *w, struct rt_addrinfo *info, + size_t len), + (ifp, w, info, len), + enosys()); +#ifndef COMPAT_RTSOCK COMPAT_CALL_HOOK(rtsock14_hook, f2, (struct ifnet *ifp, struct rt_walkarg *w, struct rt_addrinfo *info, size_t len), (ifp, w, info, len), enosys()); +#endif /* * This routine is called to generate a message from the routing Index: src/sys/opencrypto/cryptodev.c diff -u src/sys/opencrypto/cryptodev.c:1.98.2.2 src/sys/opencrypto/cryptodev.c:1.98.2.3 --- src/sys/opencrypto/cryptodev.c:1.98.2.2 Mon Sep 17 11:04:31 2018 +++ src/sys/opencrypto/cryptodev.c Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: cryptodev.c,v 1.98.2.2 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: cryptodev.c,v 1.98.2.3 2018/09/18 01:15:58 pgoyette Exp $ */ /* $FreeBSD: src/sys/opencrypto/cryptodev.c,v 1.4.2.4 2003/06/03 00:09:02 sam Exp $ */ /* $OpenBSD: cryptodev.c,v 1.53 2002/07/10 22:21:30 mickey Exp $ */ @@ -64,7 +64,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.98.2.2 2018/09/17 11:04:31 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.98.2.3 2018/09/18 01:15:58 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -220,6 +220,8 @@ cryptof_write(file_t *fp, off_t *poff, } /* Hook the ocryptodev 50 compat code */ +COMPAT_CALL_HOOK_DECL(ocryptof_50_hook, f, + (struct file *fp, u_long cmd, void *data), (fp, cmd, data), enosys()); COMPAT_CALL_HOOK(ocryptof_50_hook, f, (struct file *fp, u_long cmd, void *data), (fp, cmd, data), enosys()); Index: src/sys/sys/compat_stub.h diff -u src/sys/sys/compat_stub.h:1.1.2.23 src/sys/sys/compat_stub.h:1.1.2.24 --- src/sys/sys/compat_stub.h:1.1.2.23 Mon Sep 17 11:04:31 2018 +++ src/sys/sys/compat_stub.h Tue Sep 18 01:15:58 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: compat_stub.h,v 1.1.2.23 2018/09/17 11:04:31 pgoyette Exp $ */ +/* $NetBSD: compat_stub.h,v 1.1.2.24 2018/09/18 01:15:58 pgoyette Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -156,9 +156,10 @@ static void (hook ## _unset)(void) \ pserialize_destroy(hook.psz); \ } -#define COMPAT_CALL_HOOK(hook, which, decl, args, default) \ +#define COMPAT_CALL_HOOK_DECL(hook, which, decl, args, default) \ int \ -hook ## _ ## which ## _call decl; \ +hook ## _ ## which ## _call decl; +#define COMPAT_CALL_HOOK(hook, which, decl, args, default) \ int \ hook ## _ ## which ## _call decl \ { \ @@ -198,16 +199,18 @@ COMPAT_HOOK2(ntp_gettime_hooks, (struct /* * usb devinfo compatability - * - * MP-hooks not needed since the USB code is not modular */ struct usbd_device; -struct usb_device_info; struct usb_device_info_old; struct usb_event; struct usb_event_old; struct uio; +COMPAT_HOOK2(usb_subr_30_hook, + (struct usbd_device *, struct usb_device_info_old *, int, + void (*)(struct usbd_device *, char *, size_t, char *, size_t, int, int), + int (*)(char *, size_t, int)), + (struct usb_event *, struct usb_event_old *, struct uio *)); /* * Routine vector for dev/ccd ioctl() @@ -287,17 +290,6 @@ struct vattr; COMPAT_HOOK(compat_vndioctl_30_hook, (u_long, struct lwp *, void *, int, struct vattr *, int (*)(struct lwp *, void *, int, struct vattr *))); -extern int (*usbd30_fill_deviceinfo_old)(struct usbd_device *, - struct usb_device_info_old *, int); - -extern int (*usb30_copy_to_old)(struct usb_event *ue, struct usb_event_old *ueo, - struct uio *uio); - -extern void (*vec_usbd_devinfo_vp)(struct usbd_device *, char *, size_t, char *, - size_t, int, int); - -extern int (*vec_usbd_printBCD)(char *cp, size_t l, int bcd); - /* * ieee80211 ioctl compatability */