On Sun, Apr 03, 2016 at 04:11:40PM +0200, Stefan Kempf wrote:
> This flag caused amaps to be allocated with additional spare slots, to
> make extending them cheaper. However, the kernel never extends amaps,
> so allocating spare slots is pointless. Also UVM_FLAG_AMAPPAD only
> has an effect in combination with UVM_FLAG_OVERLAY. The only function
> that used both flags was sys_obreak, but that function had the use of
> UVM_FLAG_OVERLAY removed recently.
>
> While there, kill the unused prototypes amap_flags and amap_refs.
> They're defined as macros already.
>
> ok?
>
If it's unused, I say go for it as part of the larger amap cleanup
effort.
-ml
> Index: uvm/uvm_amap.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_amap.c,v
> retrieving revision 1.63
> diff -u -p -r1.63 uvm_amap.c
> --- uvm/uvm_amap.c 27 Mar 2016 09:51:37 -0000 1.63
> +++ uvm/uvm_amap.c 3 Apr 2016 14:00:29 -0000
> @@ -65,7 +65,7 @@ static char amap_slot_pool_names[UVM_AMA
> * local functions
> */
>
> -static struct vm_amap *amap_alloc1(int, int, int);
> +static struct vm_amap *amap_alloc1(int, int);
> static __inline void amap_list_insert(struct vm_amap *);
> static __inline void amap_list_remove(struct vm_amap *);
>
> @@ -177,7 +177,7 @@ amap_init(void)
> * init the overlay.
> */
> static inline struct vm_amap *
> -amap_alloc1(int slots, int padslots, int waitf)
> +amap_alloc1(int slots, int waitf)
> {
> struct vm_amap *amap;
> int totalslots;
> @@ -187,7 +187,7 @@ amap_alloc1(int slots, int padslots, int
> if (amap == NULL)
> return(NULL);
>
> - totalslots = slots + padslots;
> + totalslots = slots;
> KASSERT(totalslots > 0);
>
> if (totalslots > UVM_AMAP_CHUNK)
> @@ -233,15 +233,14 @@ fail1:
> * => reference count to new amap is set to one
> */
> struct vm_amap *
> -amap_alloc(vaddr_t sz, vaddr_t padsz, int waitf)
> +amap_alloc(vaddr_t sz, int waitf)
> {
> struct vm_amap *amap;
> - int slots, padslots;
> + int slots;
>
> AMAP_B2SLOT(slots, sz); /* load slots */
> - AMAP_B2SLOT(padslots, padsz);
>
> - amap = amap_alloc1(slots, padslots, waitf);
> + amap = amap_alloc1(slots, waitf);
> if (amap) {
> memset(amap->am_anon, 0,
> amap->am_maxslot * sizeof(struct vm_anon *));
> @@ -361,7 +360,7 @@ amap_copy(struct vm_map *map, struct vm_
> }
>
> entry->aref.ar_pageoff = 0;
> - entry->aref.ar_amap = amap_alloc(entry->end - entry->start, 0,
> + entry->aref.ar_amap = amap_alloc(entry->end - entry->start,
> waitf);
> if (entry->aref.ar_amap != NULL)
> entry->etype &= ~UVM_ET_NEEDSCOPY;
> @@ -381,7 +380,7 @@ amap_copy(struct vm_map *map, struct vm_
>
> /* looks like we need to copy the map. */
> AMAP_B2SLOT(slots, entry->end - entry->start);
> - amap = amap_alloc1(slots, 0, waitf);
> + amap = amap_alloc1(slots, waitf);
> if (amap == NULL)
> return;
> srcamap = entry->aref.ar_amap;
> Index: uvm/uvm_amap.h
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_amap.h,v
> retrieving revision 1.22
> diff -u -p -r1.22 uvm_amap.h
> --- uvm/uvm_amap.h 27 Mar 2016 09:51:37 -0000 1.22
> +++ uvm/uvm_amap.h 3 Apr 2016 14:00:29 -0000
> @@ -66,15 +66,13 @@ struct vm_amap;
> void amap_add(struct vm_aref *, vaddr_t, struct vm_anon *,
> boolean_t);
> /* allocate a new amap */
> -struct vm_amap *amap_alloc(vaddr_t, vaddr_t, int);
> +struct vm_amap *amap_alloc(vaddr_t, int);
> /* clear amap needs-copy flag */
> void amap_copy(vm_map_t, vm_map_entry_t, int, boolean_t, vaddr_t,
> vaddr_t);
> /* resolve all COW faults now */
> void amap_cow_now(vm_map_t, vm_map_entry_t);
> /* get amap's flags */
> -int amap_flags(struct vm_amap *);
> - /* free amap */
> void amap_free(struct vm_amap *);
> /* init amap module (at boot time) */
> void amap_init(void);
> @@ -85,8 +83,6 @@ void amap_lookups(struct vm_aref *, vad
> /* add a reference to an amap */
> void amap_ref(struct vm_amap *, vaddr_t, vsize_t, int);
> /* get number of references of amap */
> -int amap_refs(struct vm_amap *);
> - /* split reference to amap into two */
> void amap_splitref(struct vm_aref *, struct vm_aref *, vaddr_t);
> /* remove an anon from an amap */
> void amap_unadd(struct vm_aref *, vaddr_t);
> Index: uvm/uvm_extern.h
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_extern.h,v
> retrieving revision 1.137
> diff -u -p -r1.137 uvm_extern.h
> --- uvm/uvm_extern.h 2 Dec 2015 09:50:46 -0000 1.137
> +++ uvm/uvm_extern.h 3 Apr 2016 14:00:29 -0000
> @@ -106,12 +106,11 @@ typedef int vm_prot_t;
> #define UVM_FLAG_OVERLAY 0x0020000 /* establish overlay */
> #define UVM_FLAG_NOMERGE 0x0040000 /* don't merge map entries */
> #define UVM_FLAG_COPYONW 0x0080000 /* set copy_on_write flag */
> -#define UVM_FLAG_AMAPPAD 0x0100000 /* for bss: pad amap to reduce malloc() */
> -#define UVM_FLAG_TRYLOCK 0x0200000 /* fail if we can not lock map */
> -#define UVM_FLAG_HOLE 0x0400000 /* no backend */
> -#define UVM_FLAG_QUERY 0x0800000 /* do everything, except actual execution
> */
> -#define UVM_FLAG_NOFAULT 0x1000000 /* don't fault */
> -#define UVM_FLAG_UNMAP 0x2000000 /* unmap to make space */
> +#define UVM_FLAG_TRYLOCK 0x0100000 /* fail if we can not lock map */
> +#define UVM_FLAG_HOLE 0x0200000 /* no backend */
> +#define UVM_FLAG_QUERY 0x0400000 /* do everything, except actual execution
> */
> +#define UVM_FLAG_NOFAULT 0x0800000 /* don't fault */
> +#define UVM_FLAG_UNMAP 0x1000000 /* unmap to make space */
>
>
> /* macros to extract info */
> Index: uvm/uvm_map.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_map.c,v
> retrieving revision 1.210
> diff -u -p -r1.210 uvm_map.c
> --- uvm/uvm_map.c 27 Mar 2016 09:51:37 -0000 1.210
> +++ uvm/uvm_map.c 3 Apr 2016 14:00:30 -0000
> @@ -1084,9 +1084,7 @@ uvm_mapanon(struct vm_map *map, vaddr_t
> if (flags & UVM_FLAG_OVERLAY) {
> KERNEL_LOCK();
> entry->aref.ar_pageoff = 0;
> - entry->aref.ar_amap = amap_alloc(sz,
> - ptoa(flags & UVM_FLAG_AMAPPAD ? UVM_AMAP_CHUNK : 0),
> - M_WAITOK);
> + entry->aref.ar_amap = amap_alloc(sz, M_WAITOK);
> KERNEL_UNLOCK();
> }
>
> @@ -1342,9 +1340,7 @@ uvm_map(struct vm_map *map, vaddr_t *add
> }
> if (flags & UVM_FLAG_OVERLAY) {
> entry->aref.ar_pageoff = 0;
> - entry->aref.ar_amap = amap_alloc(sz,
> - ptoa(flags & UVM_FLAG_AMAPPAD ? UVM_AMAP_CHUNK : 0),
> - M_WAITOK);
> + entry->aref.ar_amap = amap_alloc(sz, M_WAITOK);
> }
>
> /* Update map and process statistics. */
> Index: uvm/uvm_unix.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_unix.c,v
> retrieving revision 1.57
> diff -u -p -r1.57 uvm_unix.c
> --- uvm/uvm_unix.c 15 Mar 2016 18:16:47 -0000 1.57
> +++ uvm/uvm_unix.c 3 Apr 2016 14:00:30 -0000
> @@ -86,8 +86,7 @@ sys_obreak(struct proc *p, void *v, regi
> UVM_UNKNOWN_OFFSET, 0,
> UVM_MAPFLAG(PROT_READ | PROT_WRITE,
> PROT_READ | PROT_WRITE | PROT_EXEC, MAP_INHERIT_COPY,
> - MADV_NORMAL, UVM_FLAG_AMAPPAD|UVM_FLAG_FIXED|
> - UVM_FLAG_COPYONW));
> + MADV_NORMAL, UVM_FLAG_FIXED|UVM_FLAG_COPYONW));
> if (error) {
> uprintf("sbrk: grow %ld failed, error = %d\n",
> new - old, error);
>