> Date: Thu, 10 Feb 2022 10:19:20 +0000
> From: Klemens Nanni <k...@openbsd.org>
> 
> On Mon, Feb 07, 2022 at 02:12:52PM +0100, Mark Kettenis wrote:
> > > Date: Mon,  7 Feb 2022 12:11:42 +0000
> > > From: Klemens Nanni <k...@openbsd.org>
> > > 
> > > On Mon, Feb 07, 2022 at 12:41:27PM +0100, Mark Kettenis wrote:
> 
> > > > So there is the existing UVM_MAP_REQ_WRITE().  Compared to
> > > > vm_map_assert_wrlock() it checks the reference count of the map.  I
> > > > think that's questionable, so these should probably be replaced by
> > > > vm_map_assert_wrlock().
> > > 
> > > Yes, I'd replace the old macro with the new functions in a separate diff.
> > 
> > Fair enough.  This has been tested extensively and it doesn't make a
> > lot of sense to start all over again.
> 
> Here's the replacement diff.
> 
> OK?

If this survives a make build, I think this should be safe.

ok kettenis@

> Index: uvm_map.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_map.c,v
> retrieving revision 1.282
> diff -u -p -r1.282 uvm_map.c
> --- uvm_map.c 21 Dec 2021 22:21:32 -0000      1.282
> +++ uvm_map.c 10 Feb 2022 09:23:21 -0000
> @@ -326,16 +326,6 @@ vaddr_t uvm_maxkaddr;
>  /*
>   * Locking predicate.
>   */
> -#define UVM_MAP_REQ_WRITE(_map)                                              
> \
> -     do {                                                            \
> -             if ((_map)->ref_count > 0) {                            \
> -                     if (((_map)->flags & VM_MAP_INTRSAFE) == 0)     \
> -                             rw_assert_wrlock(&(_map)->lock);        \
> -                     else                                            \
> -                             MUTEX_ASSERT_LOCKED(&(_map)->mtx);      \
> -             }                                                       \
> -     } while (0)
> -
>  #define      vm_map_modflags(map, set, clear)                                
> \
>       do {                                                            \
>               mtx_enter(&(map)->flags_lock);                          \
> @@ -407,7 +397,7 @@ uvm_mapent_free_insert(struct vm_map *ma
>       KDASSERT((entry->fspace & (vaddr_t)PAGE_MASK) == 0);
>       KASSERT((entry->etype & UVM_ET_FREEMAPPED) == 0);
>  
> -     UVM_MAP_REQ_WRITE(map);
> +     vm_map_assert_wrlock(map);
>  
>       /* Actual insert: forward to uaddr pointer. */
>       if (uaddr != NULL) {
> @@ -433,7 +423,7 @@ uvm_mapent_free_remove(struct vm_map *ma
>  
>       KASSERT((entry->etype & UVM_ET_FREEMAPPED) != 0 || uaddr == NULL);
>       KASSERT(uvm_map_uaddr_e(map, entry) == uaddr);
> -     UVM_MAP_REQ_WRITE(map);
> +     vm_map_assert_wrlock(map);
>  
>       if (uaddr != NULL) {
>               fun = uaddr->uaddr_functions;
> @@ -460,7 +450,7 @@ uvm_mapent_addr_insert(struct vm_map *ma
>       TRACEPOINT(uvm, map_insert,
>           entry->start, entry->end, entry->protection, NULL);
>  
> -     UVM_MAP_REQ_WRITE(map);
> +     vm_map_assert_wrlock(map);
>       res = RBT_INSERT(uvm_map_addr, &map->addr, entry);
>       if (res != NULL) {
>               panic("uvm_mapent_addr_insert: map %p entry %p "
> @@ -483,7 +473,7 @@ uvm_mapent_addr_remove(struct vm_map *ma
>       TRACEPOINT(uvm, map_remove,
>           entry->start, entry->end, entry->protection, NULL);
>  
> -     UVM_MAP_REQ_WRITE(map);
> +     vm_map_assert_wrlock(map);
>       res = RBT_REMOVE(uvm_map_addr, &map->addr, entry);
>       if (res != entry)
>               panic("uvm_mapent_addr_remove");
> 

Reply via email to