Download raw body.
unix(4): use atomic_load_int() to unlocked access to `unp*_*space'
unix(4): use atomic_load_int() to unlocked access to `unp*_*space'
On Tue, Aug 06, 2024 at 06:35:53PM +0300, Vitaliy Makkoveev wrote:
> We decided to use atomic_load_*() to unlocked access to integers. So
> adjust uipc_attach().
OK bluhm@
> Index: sys/kern/uipc_usrreq.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/uipc_usrreq.c,v
> diff -u -p -r1.208 uipc_usrreq.c
> --- sys/kern/uipc_usrreq.c 28 Jun 2024 21:30:24 -0000 1.208
> +++ sys/kern/uipc_usrreq.c 6 Aug 2024 15:32:30 -0000
> @@ -235,12 +235,12 @@ uipc_setaddr(const struct unpcb *unp, st
> * be large enough for at least one max-size datagram plus address.
> */
> #define PIPSIZ 8192
> -u_int unpst_sendspace = PIPSIZ;
> -u_int unpst_recvspace = PIPSIZ;
> -u_int unpsq_sendspace = PIPSIZ;
> -u_int unpsq_recvspace = PIPSIZ;
> -u_int unpdg_sendspace = 2*1024; /* really max datagram size */
> -u_int unpdg_recvspace = 16*1024;
> +u_int unpst_sendspace = PIPSIZ; /* [a] */
> +u_int unpst_recvspace = PIPSIZ; /* [a] */
> +u_int unpsq_sendspace = PIPSIZ; /* [a] */
> +u_int unpsq_recvspace = PIPSIZ; /* [a] */
> +u_int unpdg_sendspace = 2*1024; /* [a] really max datagram size */
> +u_int unpdg_recvspace = 16*1024; /* [a] */
>
> const struct sysctl_bounded_args unpstctl_vars[] = {
> { UNPCTL_RECVSPACE, &unpst_recvspace, 0, SB_MAX },
> @@ -267,15 +267,21 @@ uipc_attach(struct socket *so, int proto
> switch (so->so_type) {
>
> case SOCK_STREAM:
> - error = soreserve(so, unpst_sendspace, unpst_recvspace);
> + error = soreserve(so,
> + atomic_load_int(&unpst_sendspace),
> + atomic_load_int(&unpst_recvspace));
> break;
>
> case SOCK_SEQPACKET:
> - error = soreserve(so, unpsq_sendspace, unpsq_recvspace);
> + error = soreserve(so,
> + atomic_load_int(&unpsq_sendspace),
> + atomic_load_int(&unpsq_recvspace));
> break;
>
> case SOCK_DGRAM:
> - error = soreserve(so, unpdg_sendspace, unpdg_recvspace);
> + error = soreserve(so,
> + atomic_load_int(&unpdg_sendspace),
> + atomic_load_int(&unpdg_recvspace));
> break;
>
> default:
unix(4): use atomic_load_int() to unlocked access to `unp*_*space'
unix(4): use atomic_load_int() to unlocked access to `unp*_*space'