I'm mostly interested in indicating that when we have a valid reference
to an `ifp', obtained via if_get(9), it is safe to dereference if_softc. 

ok?

Index: net/if_var.h
===================================================================
RCS file: /cvs/src/sys/net/if_var.h,v
retrieving revision 1.94
diff -u -p -r1.94 if_var.h
--- net/if_var.h        9 Jan 2019 01:14:21 -0000       1.94
+++ net/if_var.h        29 Mar 2019 14:49:36 -0000
@@ -106,6 +106,9 @@ struct if_clone {
  *     c       only used in ioctl or routing socket contexts (kernel lock)
  *     k       kernel lock
  *     N       net lock
+ *
+ *  For SRP related structures that allow lock-free reads, the write lock
+ *  is indicated below.
  */
 /*
  * Structure defining a queue for a network interface.
@@ -115,7 +118,7 @@ struct if_clone {
 TAILQ_HEAD(ifnet_head, ifnet);         /* the actual queue head */
 
 struct ifnet {                         /* and the entries */
-       void    *if_softc;              /* lower-level data for this if */
+       void    *if_softc;              /* [I] lower-level data for this if */
        struct  refcnt if_refcnt;
        TAILQ_ENTRY(ifnet) if_list;     /* [k] all struct ifnets are chained */
        TAILQ_HEAD(, ifaddr) if_addrlist; /* [N] list of addresses per if */
@@ -156,7 +159,7 @@ struct ifnet {                              /* and the 
entries */
        struct  task if_linkstatetask;  /* [I] task to do route updates */
 
        /* procedure handles */
-       SRPL_HEAD(, ifih) if_inputs;    /* input routines (dequeue) */
+       SRPL_HEAD(, ifih) if_inputs;    /* [k] input routines (dequeue) */
        int     (*if_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
                     struct rtentry *); /* output routine (enqueue) */
                                        /* link level output function */

Reply via email to