On 05/05/22(Thu) 14:54, Martin Pieuchot wrote:
> Diff below introduces a new wrapper to manipulate active/inactive page
> queues. 
> 
> ok?

Anyone?

> Index: uvm/uvm_page.c
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_page.c,v
> retrieving revision 1.165
> diff -u -p -r1.165 uvm_page.c
> --- uvm/uvm_page.c    4 May 2022 14:58:26 -0000       1.165
> +++ uvm/uvm_page.c    5 May 2022 12:49:13 -0000
> @@ -987,16 +987,7 @@ uvm_pageclean(struct vm_page *pg)
>       /*
>        * now remove the page from the queues
>        */
> -     if (pg->pg_flags & PQ_ACTIVE) {
> -             TAILQ_REMOVE(&uvm.page_active, pg, pageq);
> -             flags_to_clear |= PQ_ACTIVE;
> -             uvmexp.active--;
> -     }
> -     if (pg->pg_flags & PQ_INACTIVE) {
> -             TAILQ_REMOVE(&uvm.page_inactive, pg, pageq);
> -             flags_to_clear |= PQ_INACTIVE;
> -             uvmexp.inactive--;
> -     }
> +     uvm_pagedequeue(pg);
>  
>       /*
>        * if the page was wired, unwire it now.
> @@ -1243,16 +1234,7 @@ uvm_pagewire(struct vm_page *pg)
>       MUTEX_ASSERT_LOCKED(&uvm.pageqlock);
>  
>       if (pg->wire_count == 0) {
> -             if (pg->pg_flags & PQ_ACTIVE) {
> -                     TAILQ_REMOVE(&uvm.page_active, pg, pageq);
> -                     atomic_clearbits_int(&pg->pg_flags, PQ_ACTIVE);
> -                     uvmexp.active--;
> -             }
> -             if (pg->pg_flags & PQ_INACTIVE) {
> -                     TAILQ_REMOVE(&uvm.page_inactive, pg, pageq);
> -                     atomic_clearbits_int(&pg->pg_flags, PQ_INACTIVE);
> -                     uvmexp.inactive--;
> -             }
> +             uvm_pagedequeue(pg);
>               uvmexp.wired++;
>       }
>       pg->wire_count++;
> @@ -1324,28 +1306,32 @@ uvm_pageactivate(struct vm_page *pg)
>       KASSERT(uvm_page_owner_locked_p(pg));
>       MUTEX_ASSERT_LOCKED(&uvm.pageqlock);
>  
> +     uvm_pagedequeue(pg);
> +     if (pg->wire_count == 0) {
> +             TAILQ_INSERT_TAIL(&uvm.page_active, pg, pageq);
> +             atomic_setbits_int(&pg->pg_flags, PQ_ACTIVE);
> +             uvmexp.active++;
> +
> +     }
> +}
> +
> +/*
> + * uvm_pagedequeue: remove a page from any paging queue
> + */
> +void
> +uvm_pagedequeue(struct vm_page *pg)
> +{
> +     if (pg->pg_flags & PQ_ACTIVE) {
> +             TAILQ_REMOVE(&uvm.page_active, pg, pageq);
> +             atomic_clearbits_int(&pg->pg_flags, PQ_ACTIVE);
> +             uvmexp.active--;
> +     }
>       if (pg->pg_flags & PQ_INACTIVE) {
>               TAILQ_REMOVE(&uvm.page_inactive, pg, pageq);
>               atomic_clearbits_int(&pg->pg_flags, PQ_INACTIVE);
>               uvmexp.inactive--;
>       }
> -     if (pg->wire_count == 0) {
> -             /*
> -              * if page is already active, remove it from list so we
> -              * can put it at tail.  if it wasn't active, then mark
> -              * it active and bump active count
> -              */
> -             if (pg->pg_flags & PQ_ACTIVE)
> -                     TAILQ_REMOVE(&uvm.page_active, pg, pageq);
> -             else {
> -                     atomic_setbits_int(&pg->pg_flags, PQ_ACTIVE);
> -                     uvmexp.active++;
> -             }
> -
> -             TAILQ_INSERT_TAIL(&uvm.page_active, pg, pageq);
> -     }
>  }
> -
>  /*
>   * uvm_pagezero: zero fill a page
>   */
> Index: uvm/uvm_page.h
> ===================================================================
> RCS file: /cvs/src/sys/uvm/uvm_page.h,v
> retrieving revision 1.67
> diff -u -p -r1.67 uvm_page.h
> --- uvm/uvm_page.h    29 Jan 2022 06:25:33 -0000      1.67
> +++ uvm/uvm_page.h    5 May 2022 12:49:13 -0000
> @@ -224,6 +224,7 @@ boolean_t uvm_page_physget(paddr_t *);
>  #endif
>  
>  void         uvm_pageactivate(struct vm_page *);
> +void         uvm_pagedequeue(struct vm_page *);
>  vaddr_t              uvm_pageboot_alloc(vsize_t);
>  void         uvm_pagecopy(struct vm_page *, struct vm_page *);
>  void         uvm_pagedeactivate(struct vm_page *);
> 

Reply via email to