On Tue, Feb 08, 2022 at 09:12:11AM +0000, Visa Hankala wrote:
> Now that poll(2) is based on kqueue, the old, non-MP-safe poll backend
> is not used any longer. Event sources can call KNOTE() directly instead
> of selwakeup().
> 
> This diff does the KNOTE() conversion for pipes and sockets, removing
> a kernel-locked section from a frequently used code path. The related
> event filters do not use the hint value, hence passing 0 rather than
> NOTE_SUBMIT.

This patch is still valid. It also paves the way for the removal
of fo_poll member from struct file.

Testers are welcome.

> Index: kern/sys_pipe.c
> ===================================================================
> RCS file: src/sys/kern/sys_pipe.c,v
> retrieving revision 1.133
> diff -u -p -r1.133 sys_pipe.c
> --- kern/sys_pipe.c   13 Dec 2021 14:56:55 -0000      1.133
> +++ kern/sys_pipe.c   8 Feb 2022 08:59:05 -0000
> @@ -381,12 +381,7 @@ pipeselwakeup(struct pipe *cpipe)
>  {
>       rw_assert_wrlock(cpipe->pipe_lock);
>  
> -     if (cpipe->pipe_state & PIPE_SEL) {
> -             cpipe->pipe_state &= ~PIPE_SEL;
> -             selwakeup(&cpipe->pipe_sel);
> -     } else {
> -             KNOTE(&cpipe->pipe_sel.si_note, 0);
> -     }
> +     KNOTE(&cpipe->pipe_sel.si_note, 0);
>  
>       if (cpipe->pipe_state & PIPE_ASYNC)
>               pgsigio(&cpipe->pipe_sigio, SIGIO, 0);
> Index: kern/uipc_socket.c
> ===================================================================
> RCS file: src/sys/kern/uipc_socket.c,v
> retrieving revision 1.271
> diff -u -p -r1.271 uipc_socket.c
> --- kern/uipc_socket.c        24 Dec 2021 06:50:16 -0000      1.271
> +++ kern/uipc_socket.c        8 Feb 2022 08:59:05 -0000
> @@ -2049,7 +2049,7 @@ void
>  sohasoutofband(struct socket *so)
>  {
>       pgsigio(&so->so_sigio, SIGURG, 0);
> -     selwakeup(&so->so_rcv.sb_sel);
> +     KNOTE(&so->so_rcv.sb_sel.si_note, 0);
>  }
>  
>  int
> Index: kern/uipc_socket2.c
> ===================================================================
> RCS file: src/sys/kern/uipc_socket2.c,v
> retrieving revision 1.116
> diff -u -p -r1.116 uipc_socket2.c
> --- kern/uipc_socket2.c       6 Nov 2021 05:26:33 -0000       1.116
> +++ kern/uipc_socket2.c       8 Feb 2022 08:59:06 -0000
> @@ -423,7 +423,7 @@ sowakeup(struct socket *so, struct sockb
>       }
>       if (sb->sb_flags & SB_ASYNC)
>               pgsigio(&so->so_sigio, SIGIO, 0);
> -     selwakeup(&sb->sb_sel);
> +     KNOTE(&sb->sb_sel.si_note, 0);
>  }
>  
>  /*
> 

Reply via email to