Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: [netbsd-9] src/sys



Module Name:    src
Committed By:   martin
Date:           Wed Nov 20 14:01:59 UTC 2024

Modified Files:
        src/sys/compat/netbsd32 [netbsd-9]: netbsd32_ioctl.c
        src/sys/ddb [netbsd-9]: db_xxx.c
        src/sys/kern [netbsd-9]: kern_descrip.c kern_event.c kern_sig.c
            subr_exec_fd.c sys_aio.c sys_descrip.c sys_select.c uipc_socket2.c
            uipc_usrreq.c
        src/sys/miscfs/fdesc [netbsd-9]: fdesc_vnops.c
        src/sys/miscfs/procfs [netbsd-9]: procfs_vnops.c

Log Message:
Pull up following revision(s) (requested by riastradh in ticket #1921):

        sys/kern/kern_event.c: revision 1.106
        sys/kern/sys_select.c: revision 1.51
        sys/kern/subr_exec_fd.c: revision 1.10
        sys/kern/sys_aio.c: revision 1.46
        sys/kern/kern_descrip.c: revision 1.244
        sys/kern/kern_descrip.c: revision 1.245
        sys/ddb/db_xxx.c: revision 1.72
        sys/ddb/db_xxx.c: revision 1.73
        sys/miscfs/fdesc/fdesc_vnops.c: revision 1.132
        sys/kern/uipc_usrreq.c: revision 1.195
        sys/kern/sys_descrip.c: revision 1.36
        sys/kern/uipc_usrreq.c: revision 1.196
        sys/kern/uipc_socket2.c: revision 1.135
        sys/kern/uipc_socket2.c: revision 1.136
        sys/kern/kern_sig.c: revision 1.383
        sys/kern/kern_sig.c: revision 1.384
        sys/compat/netbsd32/netbsd32_ioctl.c: revision 1.107
        sys/miscfs/procfs/procfs_vnops.c: revision 1.208
        sys/kern/subr_exec_fd.c: revision 1.9
        sys/kern/kern_descrip.c: revision 1.252
        (all via patch)

Load struct filedesc::fd_dt with atomic_load_consume.

Exceptions: when fd_refcnt <= 1, or when holding fd_lock.

While here:
- Restore KASSERT(mutex_owned(&fdp->fd_lock)) in fd_unused.
  => This is used only in fd_close and fd_abort, where it holds.
- Move bounds check assertion in fd_putfile to where it matters.
- Store fd_dt with atomic_store_release.
- Move load of fd_dt under lock in knote_fdclose.
- Omit membar_consumer in fdesc_readdir.
  => atomic_load_consume serves the same purpose now.
  => Was needed only on alpha anyway.

Load struct fdfile::ff_file with atomic_load_consume.
Exceptions: when we're only testing whether it's there, not about to
dereference it.

Note: We do not use atomic_store_release to set it because the
preceding mutex_exit should be enough.

(That said, it's not clear the mutex_enter/exit is needed unless
refcnt > 0 already, in which case maybe it would be a win to switch
from the membar implied by mutex_enter to the membar implied by
atomic_store_release -- which I would generally expect to be much
cheaper.  And a little clearer without a long comment.)
kern_descrip.c: Fix membars around reference count decrement.

In general, the `last one out hit the lights' style of reference
counting (as opposed to the `whoever's destroying must wait for
pending users to finish' style) requires memory barriers like so:

        ... usage of resources associated with object ...
        membar_release();
        if (atomic_dec_uint_nv(&obj->refcnt) != 0)
                return;
        membar_acquire();
        ... freeing of resources associated with object ...

This way, all usage happens-before all freeing.  This fixes several
errors:
- fd_close failed to ensure whatever its caller did would
  happen-before the freeing, in the case where another thread is
  concurrently trying to close the fd (ff->ff_file == NULL).
  Fix: Add membar_release before atomic_dec_uint(&ff->ff_refcnt) in
  that branch.
- fd_close failed to ensure all loads its caller had issued will have
  happened-before the freeing, in the case where the fd is still in
  use by another thread (fdp->fd_refcnt > 1 and ff->ff_refcnt-- > 0).
  Fix: Change membar_producer to membar_release before
  atomic_dec_uint(&ff->ff_refcnt).
- fd_close failed to ensure that any usage of fp by other callers
  would happen-before any freeing it does.
  Fix: Add membar_acquire after atomic_dec_uint_nv(&ff->ff_refcnt).
- fd_free failed to ensure that any usage of fdp by other callers
  would happen-before any freeing it does.
  Fix: Add membar_acquire after atomic_dec_uint_nv(&fdp->fd_refcnt).

While here, change membar_exit -> membar_release.  No semantic
change, just updating away from the legacy API.


To generate a diff of this commit:
cvs rdiff -u -r1.103.2.2 -r1.103.2.3 src/sys/compat/netbsd32/netbsd32_ioctl.c
cvs rdiff -u -r1.71 -r1.71.22.1 src/sys/ddb/db_xxx.c
cvs rdiff -u -r1.243.4.2 -r1.243.4.3 src/sys/kern/kern_descrip.c
cvs rdiff -u -r1.104.4.2 -r1.104.4.3 src/sys/kern/kern_event.c
cvs rdiff -u -r1.364.2.9 -r1.364.2.10 src/sys/kern/kern_sig.c
cvs rdiff -u -r1.8 -r1.8.4.1 src/sys/kern/subr_exec_fd.c
cvs rdiff -u -r1.44 -r1.44.4.1 src/sys/kern/sys_aio.c
cvs rdiff -u -r1.33 -r1.33.2.1 src/sys/kern/sys_descrip.c
cvs rdiff -u -r1.46 -r1.46.2.1 src/sys/kern/sys_select.c
cvs rdiff -u -r1.134.2.2 -r1.134.2.3 src/sys/kern/uipc_socket2.c
cvs rdiff -u -r1.194.2.1 -r1.194.2.2 src/sys/kern/uipc_usrreq.c
cvs rdiff -u -r1.130.4.1 -r1.130.4.2 src/sys/miscfs/fdesc/fdesc_vnops.c
cvs rdiff -u -r1.206.4.2 -r1.206.4.3 src/sys/miscfs/procfs/procfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index