On 2022-03-17, Alexander Bluhm wrote:
> On Thu, Mar 17, 2022 at 01:07:12AM +0100, Mark Kettenis wrote:
> > > Date: Thu, 17 Mar 2022 01:01:46 +0100 (CET)
> > > From: Mark Kettenis <mark.kette...@xs4all.nl>
> > > 
> > > > Date: Thu, 17 Mar 2022 00:47:15 +0100
> > > > From: Alexander Bluhm <alexander.bl...@gmx.net>
> > > > 
> > > > Hi,
> > > > 
> > > > My previous atempt to add a mutex to in_pcb.h was reverted as it
> > > > broke userland build.
> > > > 
> > > > Is the correct fix to include sys/mutex.h in every .c file that
> > > > includes netinet/in_pcb.h ?  I made a release with it.
> > > > Or should I include sys/mutex.h in netinet/in_pcb.h ?
> > > 
> > > Neither?
> > > 
> > > It makes no sense to export the kernel mutex stuff to userland.  Is
> > > there a way to avoid doing that by adding a bit for #ifdef _KERNEL?
> >                                             ^^^^^^^^^
> >                                         a bit more
> 
> My diff adds struct mutex to struct inpcbtable.  My later plan is
> to add a mutex also to struct inpcb.
> 
> tcpbench uses libkvm to extract information from struct inpcbtable.
> netstat does that for struct inpcb.  Also post mortem analysis from
> a kernel core dump is possible.
> 
> I don't understand why userland must not know the size of struct
> mutex when tools where written to analyze these structs.
> 
> Is there something special about struct mutex that should not shown
> to userland?
> 
> Do you like this?  Different structs for kernel and userland.
> I think this is confusing when used with libkvm.
> 
> struct inpcbtable {
>         TAILQ_HEAD(inpthead, inpcb) inpt_queue; /* [t] inet PCB queue */
>         struct  inpcbhead *inpt_hashtbl;        /* [t] local and foreign hash 
> */
>         struct  inpcbhead *inpt_lhashtbl;       /* [t] local port hash */
>         SIPHASH_KEY inpt_key, inpt_lkey;        /* [t] secrets for hashes */
>         u_long  inpt_mask, inpt_lmask;          /* [t] hash masks */
>         int     inpt_count, inpt_size;          /* [t] queue count, hash size 
> */
> #ifdef _KERNEL
>         struct mutex inpt_mtx;                  /* protect queue and hash */
> #endif
> };

What if you add an #else case?

#ifdef _KERNEL
struct mutex inpt_mtx;
#else
char _mtxpad[8];
#endif

Reply via email to