The branch stable/13 has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7716178c0b389bdea83e8cab31c188ba1151bbfc

commit 7716178c0b389bdea83e8cab31c188ba1151bbfc
Author:     Warner Losh <[email protected]>
AuthorDate: 2021-09-01 19:37:27 +0000
Commit:     Warner Losh <[email protected]>
CommitDate: 2021-09-22 14:29:58 +0000

    ppbus: Set the lock for pps interface, update to latest api
    
    Since we take a lock when we enter the ioctl, we need to set driver_mtx
    in the pps structure so it can be dropped while sleeping during a call
    to timepps_fetch() with a non-zero timeout (PPS_CANWAIT feature).
    
    MFC After:              5 days
    Sponsored by:           Netflix
    Reviewed by:            ian
    Differential Revision:  https://reviews.freebsd.org/D31763
    
    (cherry picked from commit c62aa65b2a7a6492e712a69c58a35347aa441a98)
---
 sys/dev/ppbus/ppb_base.c | 8 ++++++++
 sys/dev/ppbus/ppbconf.h  | 1 +
 sys/dev/ppbus/pps.c      | 8 ++++++--
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/sys/dev/ppbus/ppb_base.c b/sys/dev/ppbus/ppb_base.c
index 20782385acc0..b399f4cc2d17 100644
--- a/sys/dev/ppbus/ppb_base.c
+++ b/sys/dev/ppbus/ppb_base.c
@@ -220,6 +220,14 @@ ppb_unlock(device_t bus)
        mtx_unlock(ppb->ppc_lock);
 }
 
+struct mtx *
+ppb_get_lock(device_t bus)
+{
+       struct ppb_data *ppb = DEVTOSOFTC(bus);
+
+       return (ppb->ppc_lock);
+}
+
 void
 _ppb_assert_locked(device_t bus, const char *file, int line)
 {
diff --git a/sys/dev/ppbus/ppbconf.h b/sys/dev/ppbus/ppbconf.h
index 6a90f5729971..723db73412f8 100644
--- a/sys/dev/ppbus/ppbconf.h
+++ b/sys/dev/ppbus/ppbconf.h
@@ -259,6 +259,7 @@ extern int ppb_release_bus(device_t, device_t);
 /* bus related functions */
 extern void ppb_lock(device_t);
 extern void ppb_unlock(device_t);
+extern struct mtx *ppb_get_lock(device_t);
 extern void _ppb_assert_locked(device_t, const char *, int);
 extern void ppb_init_callout(device_t, struct callout *, int);
 extern int ppb_sleep(device_t, void *, int, const char *, int);
diff --git a/sys/dev/ppbus/pps.c b/sys/dev/ppbus/pps.c
index cf0c1a1c2f07..897ae1b78bd7 100644
--- a/sys/dev/ppbus/pps.c
+++ b/sys/dev/ppbus/pps.c
@@ -141,9 +141,11 @@ ppsattach(device_t dev)
            UID_ROOT, GID_WHEEL, 0600, PPS_NAME "%d", unit);
        sc->devs[0] = d;
        sc->pps[0].ppscap = PPS_CAPTUREASSERT | PPS_ECHOASSERT;
+       sc->pps[0].driver_abi = PPS_ABI_VERSION;
+       sc->pps[0].driver_mtx = ppb_get_lock(ppbus);
        d->si_drv1 = sc;
        d->si_drv2 = (void*)0;
-       pps_init(&sc->pps[0]);
+       pps_init_abi(&sc->pps[0]);
 
        ppb_lock(ppbus);
        if (ppb_request_bus(ppbus, dev, PPB_DONTWAIT)) {
@@ -193,9 +195,11 @@ ppsattach(device_t dev)
                          UID_ROOT, GID_WHEEL, 0600, PPS_NAME "%db%d", unit, i 
- 1);
                        sc->devs[i] = d;
                        sc->pps[i].ppscap = PPS_CAPTUREASSERT | 
PPS_CAPTURECLEAR;
+                       sc->pps[i].driver_abi = PPS_ABI_VERSION;
+                       sc->pps[i].driver_mtx = ppb_get_lock(ppbus);
                        d->si_drv1 = sc;
                        d->si_drv2 = (void *)(intptr_t)i;
-                       pps_init(&sc->pps[i]);
+                       pps_init_abi(&sc->pps[i]);
                }
                ppb_lock(ppbus);
        } while (0);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to