> Date: Sat, 16 Apr 2016 16:36:11 +0200
> From: Stefan Kempf <[email protected]>
>
> am_maxslot represents the total number of slots an amap can be extended
> to. Since we do not extend amaps, this field as well as rounding the
> number of slots to the next malloc bucket is not useful.
>
> This also removes the corresponding output from procmap(1).
>
> ok?
ok kettenis@
> Index: sys/uvm/uvm_amap.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_amap.c,v
> retrieving revision 1.65
> diff -u -p -r1.65 uvm_amap.c
> --- sys/uvm/uvm_amap.c 12 Apr 2016 16:47:33 -0000 1.65
> +++ sys/uvm/uvm_amap.c 16 Apr 2016 14:29:55 -0000
> @@ -180,44 +180,37 @@ static inline struct vm_amap *
> amap_alloc1(int slots, int waitf)
> {
> struct vm_amap *amap;
> - int totalslots;
>
> amap = pool_get(&uvm_amap_pool, (waitf == M_WAITOK) ? PR_WAITOK
> : PR_NOWAIT);
> if (amap == NULL)
> return(NULL);
>
> - totalslots = slots;
> - KASSERT(totalslots > 0);
> -
> - if (totalslots > UVM_AMAP_CHUNK)
> - totalslots = malloc_roundup(totalslots * MALLOC_SLOT_UNIT) /
> - MALLOC_SLOT_UNIT;
> + KASSERT(slots > 0);
>
> amap->am_ref = 1;
> amap->am_flags = 0;
> #ifdef UVM_AMAP_PPREF
> amap->am_ppref = NULL;
> #endif
> - amap->am_maxslot = totalslots;
> amap->am_nslot = slots;
> amap->am_nused = 0;
>
> - if (totalslots > UVM_AMAP_CHUNK)
> - amap->am_slots = malloc(totalslots * MALLOC_SLOT_UNIT,
> + if (slots > UVM_AMAP_CHUNK)
> + amap->am_slots = malloc(slots * MALLOC_SLOT_UNIT,
> M_UVMAMAP, waitf);
> else
> amap->am_slots = pool_get(
> - &uvm_amap_slot_pools[totalslots - 1],
> + &uvm_amap_slot_pools[slots - 1],
> (waitf == M_WAITOK) ? PR_WAITOK : PR_NOWAIT);
>
> if (amap->am_slots == NULL)
> goto fail1;
>
> - amap->am_bckptr = (int *)(((char *)amap->am_slots) + totalslots *
> + amap->am_bckptr = (int *)(((char *)amap->am_slots) + slots *
> sizeof(int));
> amap->am_anon = (struct vm_anon **)(((char *)amap->am_bckptr) +
> - totalslots * sizeof(int));
> + slots * sizeof(int));
>
> return(amap);
>
> @@ -243,7 +236,7 @@ amap_alloc(vaddr_t sz, int waitf)
> amap = amap_alloc1(slots, waitf);
> if (amap) {
> memset(amap->am_anon, 0,
> - amap->am_maxslot * sizeof(struct vm_anon *));
> + amap->am_nslot * sizeof(struct vm_anon *));
> amap_list_insert(amap);
> }
>
> @@ -263,10 +256,10 @@ amap_free(struct vm_amap *amap)
> KASSERT(amap->am_ref == 0 && amap->am_nused == 0);
> KASSERT((amap->am_flags & AMAP_SWAPOFF) == 0);
>
> - if (amap->am_maxslot > UVM_AMAP_CHUNK)
> + if (amap->am_nslot > UVM_AMAP_CHUNK)
> free(amap->am_slots, M_UVMAMAP, 0);
> else
> - pool_put(&uvm_amap_slot_pools[amap->am_maxslot - 1],
> + pool_put(&uvm_amap_slot_pools[amap->am_nslot - 1],
> amap->am_slots);
>
> #ifdef UVM_AMAP_PPREF
> @@ -409,8 +402,7 @@ amap_copy(struct vm_map *map, struct vm_
> amap->am_slots[amap->am_nused] = lcv;
> amap->am_nused++;
> }
> - memset(&amap->am_anon[lcv], 0,
> - (amap->am_maxslot - lcv) * sizeof(struct vm_anon *));
> + KASSERT(lcv == amap->am_nslot);
>
> /*
> * drop our reference to the old amap (srcamap).
> @@ -570,7 +562,7 @@ void
> amap_pp_establish(struct vm_amap *amap)
> {
>
> - amap->am_ppref = mallocarray(amap->am_maxslot, sizeof(int),
> + amap->am_ppref = mallocarray(amap->am_nslot, sizeof(int),
> M_UVMAMAP, M_NOWAIT|M_ZERO);
>
> /* if we fail then we just won't use ppref for this amap */
> Index: sys/uvm/uvm_amap.h
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_amap.h,v
> retrieving revision 1.23
> diff -u -p -r1.23 uvm_amap.h
> --- sys/uvm/uvm_amap.h 4 Apr 2016 16:34:16 -0000 1.23
> +++ sys/uvm/uvm_amap.h 16 Apr 2016 14:29:55 -0000
> @@ -124,8 +124,7 @@ boolean_t amap_swap_off(int, int);
> struct vm_amap {
> int am_ref; /* reference count */
> int am_flags; /* flags */
> - int am_maxslot; /* max # of slots allocated */
> - int am_nslot; /* # of slots currently in map ( <= maxslot) */
> + int am_nslot; /* # of slots currently in map */
> int am_nused; /* # of slots currently in use */
> int *am_slots; /* contig array of active slots */
> int *am_bckptr; /* back pointer array to am_slots */
> Index: usr.sbin/procmap/procmap.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/procmap/procmap.c,v
> retrieving revision 1.59
> diff -u -p -r1.59 procmap.c
> --- usr.sbin/procmap/procmap.c 19 Jan 2015 19:25:28 -0000 1.59
> +++ usr.sbin/procmap/procmap.c 16 Apr 2016 14:29:56 -0000
> @@ -97,7 +97,6 @@ rlim_t maxssiz;
>
> struct sum {
> unsigned long s_am_nslots;
> - unsigned long s_am_maxslots;
> unsigned long s_am_nusedslots;
> };
>
> @@ -347,12 +346,10 @@ void
> print_sum(struct sum *sum, struct sum *total_sum)
> {
> const char *t = total_sum == NULL ? "total " : "";
> - printf("%samap allocated slots: %lu\n", t, sum->s_am_maxslots);
> printf("%samap mapped slots: %lu\n", t, sum->s_am_nslots);
> printf("%samap used slots: %lu\n", t, sum->s_am_nusedslots);
>
> if (total_sum) {
> - total_sum->s_am_maxslots += sum->s_am_maxslots;
> total_sum->s_am_nslots += sum->s_am_nslots;
> total_sum->s_am_nusedslots += sum->s_am_nusedslots;
> }
> @@ -785,15 +782,13 @@ dump_vm_map_entry(kvm_t *kd, struct kbit
> }
>
> if (print_amap && vme->aref.ar_amap) {
> - printf(" amap - ref: %d fl: 0x%x maxsl: %d nsl: %d nuse: %d\n",
> + printf(" amap - ref: %d fl: 0x%x nsl: %d nuse: %d\n",
> D(amap, vm_amap)->am_ref,
> D(amap, vm_amap)->am_flags,
> - D(amap, vm_amap)->am_maxslot,
> D(amap, vm_amap)->am_nslot,
> D(amap, vm_amap)->am_nused);
> if (sum) {
> sum->s_am_nslots += D(amap, vm_amap)->am_nslot;
> - sum->s_am_maxslots += D(amap, vm_amap)->am_maxslot;
> sum->s_am_nusedslots += D(amap, vm_amap)->am_nused;
> }
> }
>
>