Subj.

Index: net/if_pppx.c
===================================================================
RCS file: /cvs/src/sys/net/if_pppx.c,v
retrieving revision 1.83
diff -u -p -r1.83 if_pppx.c
--- net/if_pppx.c       10 Apr 2020 07:36:52 -0000      1.83
+++ net/if_pppx.c       10 Apr 2020 11:16:53 -0000
@@ -132,12 +132,11 @@ struct pppx_dev {
        LIST_HEAD(,pppx_if)     pxd_pxis;
 };
 
-struct rwlock                  pppx_devs_lk = RWLOCK_INITIALIZER("pppxdevs");
 LIST_HEAD(, pppx_dev)          pppx_devs = LIST_HEAD_INITIALIZER(pppx_devs);
 struct pool                    *pppx_if_pl;
 
 struct pppx_dev                        *pppx_dev_lookup(dev_t);
-struct pppx_dev                        *pppx_dev2pxd(dev_t);
+static inline struct pppx_dev  *pppx_dev2pxd(dev_t);
 
 struct pppx_if_key {
        int                     pxik_session_id;
@@ -165,7 +164,6 @@ pppx_if_cmp(const struct pppx_if *a, con
        return memcmp(&a->pxi_key, &b->pxi_key, sizeof(a->pxi_key));
 }
 
-struct rwlock                  pppx_ifs_lk = RWLOCK_INITIALIZER("pppxifs");
 RBT_HEAD(pppx_ifs, pppx_if)    pppx_ifs = RBT_INITIALIZER(&pppx_ifs);
 RBT_PROTOTYPE(pppx_ifs, pppx_if, pxi_entry, pppx_if_cmp);
 
@@ -219,8 +217,6 @@ pppx_dev_lookup(dev_t dev)
        struct pppx_dev *pxd;
        int unit = minor(dev);
 
-       /* must hold pppx_devs_lk */
-
        LIST_FOREACH(pxd, &pppx_devs, pxd_entry) {
                if (pxd->pxd_unit == unit)
                        return (pxd);
@@ -229,16 +225,10 @@ pppx_dev_lookup(dev_t dev)
        return (NULL);
 }
 
-struct pppx_dev *
+static inline struct pppx_dev *
 pppx_dev2pxd(dev_t dev)
 {
-       struct pppx_dev *pxd;
-
-       rw_enter_read(&pppx_devs_lk);
-       pxd = pppx_dev_lookup(dev);
-       rw_exit_read(&pppx_devs_lk);
-
-       return (pxd);
+       return pppx_dev_lookup(dev);
 }
 
 void
@@ -251,17 +241,10 @@ int
 pppxopen(dev_t dev, int flags, int mode, struct proc *p)
 {
        struct pppx_dev *pxd;
-       int rv = 0;
-
-       rv = rw_enter(&pppx_devs_lk, RW_WRITE | RW_INTR);
-       if (rv != 0)
-               return (rv);
 
        pxd = pppx_dev_lookup(dev);
-       if (pxd != NULL) {
-               rv = EBUSY;
-               goto out;
-       }
+       if (pxd != NULL)
+               return EBUSY;
 
        if (LIST_EMPTY(&pppx_devs) && pppx_if_pl == NULL) {
                pppx_if_pl = malloc(sizeof(*pppx_if_pl), M_DEVBUF, M_WAITOK);
@@ -279,9 +262,7 @@ pppxopen(dev_t dev, int flags, int mode,
        mq_init(&pxd->pxd_svcq, 128, IPL_NET);
        LIST_INSERT_HEAD(&pppx_devs, pxd, pxd_entry);
 
-out:
-       rw_exit(&pppx_devs_lk);
-       return (rv);
+       return 0;
 }
 
 int
@@ -588,8 +569,6 @@ pppxclose(dev_t dev, int flags, int mode
        struct pppx_dev *pxd;
        struct pppx_if  *pxi;
 
-       rw_enter_write(&pppx_devs_lk);
-
        pxd = pppx_dev_lookup(dev);
 
        /* XXX */
@@ -610,7 +589,6 @@ pppxclose(dev_t dev, int flags, int mode
                pppx_if_pl = NULL;
        }
 
-       rw_exit_write(&pppx_devs_lk);
        return (0);
 }
 
@@ -620,8 +598,6 @@ pppx_if_next_unit(void)
        struct pppx_if *pxi;
        int unit = 0;
 
-       rw_assert_wrlock(&pppx_ifs_lk);
-
        /* this is safe without splnet since we're not modifying it */
        do {
                int found = 0;
@@ -650,11 +626,9 @@ pppx_if_find(struct pppx_dev *pxd, int s
        key.pxik_session_id = session_id;
        key.pxik_protocol = protocol;
 
-       rw_enter_read(&pppx_ifs_lk);
        pxi = RBT_FIND(pppx_ifs, &pppx_ifs, (struct pppx_if *)&key);
        if (pxi && pxi->pxi_ready == 0)
                pxi = NULL;
-       rw_exit_read(&pppx_ifs_lk);
 
        return pxi;
 }
@@ -828,12 +802,10 @@ pppx_add_session(struct pppx_dev *pxd, s
 #endif
 
        /* try to set the interface up */
-       rw_enter_write(&pppx_ifs_lk);
        unit = pppx_if_next_unit();
        if (unit < 0) {
                pool_put(pppx_if_pl, pxi);
                error = ENOMEM;
-               rw_exit_write(&pppx_ifs_lk);
                goto out;
        }
 
@@ -846,14 +818,12 @@ pppx_add_session(struct pppx_dev *pxd, s
        if (RBT_FIND(pppx_ifs, &pppx_ifs, pxi) != NULL) {
                pool_put(pppx_if_pl, pxi);
                error = EADDRINUSE;
-               rw_exit_write(&pppx_ifs_lk);
                goto out;
        }
 
        if (RBT_INSERT(pppx_ifs, &pppx_ifs, pxi) != NULL)
                panic("%s: pppx_ifs modified while lock was held", __func__);
        LIST_INSERT_HEAD(&pxd->pxd_pxis, pxi, pxi_list);
-       rw_exit_write(&pppx_ifs_lk);
 
        snprintf(ifp->if_xname, sizeof(ifp->if_xname), "%s%d", "pppx", unit);
        ifp->if_mtu = req->pr_peer_mru; /* XXX */
@@ -935,9 +905,8 @@ pppx_add_session(struct pppx_dev *pxd, s
        } else {
                if_addrhooks_run(ifp);
        }
-       rw_enter_write(&pppx_ifs_lk);
+
        pxi->pxi_ready = 1;
-       rw_exit_write(&pppx_ifs_lk);
 
 out:
        return (error);
@@ -1038,11 +1007,9 @@ pppx_if_destroy(struct pppx_dev *pxd, st
        if_detach(ifp);
        NET_LOCK();
 
-       rw_enter_write(&pppx_ifs_lk);
        if (RBT_REMOVE(pppx_ifs, &pppx_ifs, pxi) == NULL)
                panic("%s: pppx_ifs modified while lock was held", __func__);
        LIST_REMOVE(pxi, pxi_list);
-       rw_exit_write(&pppx_ifs_lk);
 
        pool_put(pppx_if_pl, pxi);
 }
@@ -1130,7 +1097,6 @@ pppx_if_output(struct ifnet *ifp, struct
                th = mtod(m, struct pppx_hdr *);
                th->pppx_proto = 0;     /* not used */
                th->pppx_id = pxi->pxi_session.ppp_id;
-               rw_enter_read(&pppx_devs_lk);
                error = mq_enqueue(&pxi->pxi_dev->pxd_svcq, m);
                if (error == 0) {
                        if (pxi->pxi_dev->pxd_waiting) {
@@ -1139,7 +1105,6 @@ pppx_if_output(struct ifnet *ifp, struct
                        }
                        selwakeup(&pxi->pxi_dev->pxd_rsel);
                }
-               rw_exit_read(&pppx_devs_lk);
        }
 
 out:

Reply via email to