Subject: Re: replace pa_to_pvh() and pa_to_attribute() macro
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Jason Thorpe <thorpej@shagadelic.org>
List: port-mips
Date: 11/22/2005 20:49:38
On Nov 21, 2005, at 8:41 AM, Izumi Tsutsui wrote:
> Some discussion is going on tech-kern, but is it OK
> to commit the attached diff against mips/pmap.c?
A good first step. Next is to move those things into the optional
machine-dependent vm_page extensions like the Alpha port does :-)
> ---
> Izumi Tsutsui
>
>
> Index: pmap.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/mips/mips/pmap.c,v
> retrieving revision 1.160
> diff -u -r1.160 pmap.c
> --- pmap.c 5 Nov 2005 10:57:49 -0000 1.160
> +++ pmap.c 21 Nov 2005 16:29:56 -0000
> @@ -221,22 +221,6 @@
> ((pm) == pmap_kernel() || \
> (pm) == curlwp->l_proc->p_vmspace->vm_map.pmap)
>
> -#define pa_to_pvh(pa) \
> -({ \
> - int bank_, pg_; \
> - \
> - bank_ = vm_physseg_find(atop((pa)), &pg_); \
> - &vm_physmem[bank_].pmseg.pvent[pg_]; \
> -})
> -
> -#define pa_to_attribute(pa) \
> -({ \
> - int bank_, pg_; \
> - \
> - bank_ = vm_physseg_find(atop((pa)), &pg_); \
> - &vm_physmem[bank_].pmseg.pvent[pg_].pv_flags; \
> -})
> -
> /* Forward function declarations */
> void pmap_remove_pv(pmap_t pmap, vaddr_t va, paddr_t pa);
> void pmap_asid_alloc(pmap_t pmap);
> @@ -249,6 +233,9 @@
> void *pmap_pv_page_alloc(struct pool *, int);
> void pmap_pv_page_free(struct pool *, void *);
>
> +static __inline struct pv_entry *pa_to_pvh(paddr_t pa);
> +static __inline int *pa_to_attribute(paddr_t pa);
> +
> struct pool_allocator pmap_pv_page_allocator = {
> pmap_pv_page_alloc, pmap_pv_page_free, 0,
> };
> @@ -260,6 +247,24 @@
> * Misc. functions.
> */
>
> +static __inline struct pv_entry *
> +pa_to_pvh(paddr_t pa)
> +{
> + int bank, pg;
> +
> + bank = vm_physseg_find(atop((pa)), &pg);
> + return &vm_physmem[bank].pmseg.pvent[pg];
> +}
> +
> +static __inline int *
> +pa_to_attribute(paddr_t pa)
> +{
> + int bank, pg;
> +
> + bank = vm_physseg_find(atop((pa)), &pg);
> + return &vm_physmem[bank].pmseg.pvent[pg].pv_flags;
> +}
> +
> #if defined(MIPS3_PLUS) /* XXX mmu XXX */
> void mips_dump_segtab(struct proc *);
> static void mips_flushcache_allpvh(paddr_t);
>
> ---
-- thorpej