On Mon, Apr 17, 2023 at 05:43:05PM +0300, Vitaliy Makkoveev wrote:
> On Mon, Apr 17, 2023 at 02:58:59PM +0200, Alexander Bluhm wrote:
> > On Mon, Apr 17, 2023 at 01:20:28AM +0300, Vitaliy Makkoveev wrote:
> > > It performs read-only access to netlock protected data.
> > 
> > OK bluhm@
> > 
> > Could you somewhere document that ifnetlist is protected by netlock?
> >
> 
> We use both kernel and net lock for protect `ifnetlist'. This is the
> exception, so I propose to document this like below.

OK bluhm@

> Index: sys/net/if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if.c,v
> retrieving revision 1.688
> diff -u -p -r1.688 if.c
> --- sys/net/if.c      8 Apr 2023 13:49:38 -0000       1.688
> +++ sys/net/if.c      17 Apr 2023 14:42:10 -0000
> @@ -272,6 +272,10 @@ ifinit(void)
>  
>  static struct if_idxmap if_idxmap;
>  
> +/*
> + * XXXSMP: For `ifnetlist' modification both kernel and net locks
> + * should be taken. For read-only access only one lock of them required.
> + */
>  struct ifnet_head ifnetlist = TAILQ_HEAD_INITIALIZER(ifnetlist);
>  
>  static inline unsigned int
> Index: sys/net/if_var.h
> ===================================================================
> RCS file: /cvs/src/sys/net/if_var.h,v
> retrieving revision 1.123
> diff -u -p -r1.123 if_var.h
> --- sys/net/if_var.h  5 Apr 2023 19:35:23 -0000       1.123
> +++ sys/net/if_var.h  17 Apr 2023 14:42:10 -0000
> @@ -121,7 +121,7 @@ TAILQ_HEAD(ifnet_head, ifnet);            /* the a
>  struct ifnet {                               /* and the entries */
>       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_ENTRY(ifnet) if_list;     /* [NK] all struct ifnets are chained */
>       TAILQ_HEAD(, ifaddr) if_addrlist; /* [N] list of addresses per if */
>       TAILQ_HEAD(, ifmaddr) if_maddrlist; /* [N] list of multicast records */
>       TAILQ_HEAD(, ifg_list) if_groups; /* [N] list of groups per if */

Reply via email to