Deleted Added
full compact
mmu_oea.c (92521) mmu_oea.c (92654)
1/*
2 * Copyright (c) 2001 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Matt Thomas <matt@3am-software.com> of Allegro Networks, Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 78 unchanged lines hidden (view full) ---

87 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
88 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
89 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
90 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
91 */
92
93#ifndef lint
94static const char rcsid[] =
1/*
2 * Copyright (c) 2001 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Matt Thomas <matt@3am-software.com> of Allegro Networks, Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 78 unchanged lines hidden (view full) ---

87 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
88 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
89 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
90 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
91 */
92
93#ifndef lint
94static const char rcsid[] =
95 "$FreeBSD: head/sys/powerpc/aim/mmu_oea.c 92521 2002-03-17 23:58:12Z benno $";
95 "$FreeBSD: head/sys/powerpc/aim/mmu_oea.c 92654 2002-03-19 09:11:49Z jeff $";
96#endif /* not lint */
97
98/*
99 * Manages physical address maps.
100 *
101 * In addition to hardware address maps, this module is called upon to
102 * provide software-use-only maps which may or may not be stored in the
103 * same form as hardware maps. These pseudo-maps are used to store

--- 140 unchanged lines hidden (view full) ---

244 LIST_HEAD_INITIALIZER(pmap_pvo_kunmanaged); /* list of unmanaged pages */
245struct pvo_head pmap_pvo_unmanaged =
246 LIST_HEAD_INITIALIZER(pmap_pvo_unmanaged); /* list of unmanaged pages */
247
248vm_zone_t pmap_upvo_zone; /* zone for pvo entries for unmanaged pages */
249vm_zone_t pmap_mpvo_zone; /* zone for pvo entries for managed pages */
250struct vm_object pmap_upvo_zone_obj;
251struct vm_object pmap_mpvo_zone_obj;
96#endif /* not lint */
97
98/*
99 * Manages physical address maps.
100 *
101 * In addition to hardware address maps, this module is called upon to
102 * provide software-use-only maps which may or may not be stored in the
103 * same form as hardware maps. These pseudo-maps are used to store

--- 140 unchanged lines hidden (view full) ---

244 LIST_HEAD_INITIALIZER(pmap_pvo_kunmanaged); /* list of unmanaged pages */
245struct pvo_head pmap_pvo_unmanaged =
246 LIST_HEAD_INITIALIZER(pmap_pvo_unmanaged); /* list of unmanaged pages */
247
248vm_zone_t pmap_upvo_zone; /* zone for pvo entries for unmanaged pages */
249vm_zone_t pmap_mpvo_zone; /* zone for pvo entries for managed pages */
250struct vm_object pmap_upvo_zone_obj;
251struct vm_object pmap_mpvo_zone_obj;
252static vm_object_t pmap_pvo_obj;
253static u_int pmap_pvo_count;
252
253#define PMAP_PVO_SIZE 1024
254static struct pvo_entry *pmap_bpvo_pool;
255static int pmap_bpvo_pool_index;
256static int pmap_bpvo_pool_count;
257
258#define VSID_NBPW (sizeof(u_int32_t) * 8)
259static u_int pmap_vsid_bitmap[NPMAPS / VSID_NBPW];

--- 47 unchanged lines hidden (view full) ---

307 vm_offset_t, vm_offset_t, u_int, int);
308static void pmap_pvo_remove(struct pvo_entry *, int);
309static struct pvo_entry *pmap_pvo_find_va(pmap_t, vm_offset_t, int *);
310static struct pte *pmap_pvo_to_pte(const struct pvo_entry *, int);
311
312/*
313 * Utility routines.
314 */
254
255#define PMAP_PVO_SIZE 1024
256static struct pvo_entry *pmap_bpvo_pool;
257static int pmap_bpvo_pool_index;
258static int pmap_bpvo_pool_count;
259
260#define VSID_NBPW (sizeof(u_int32_t) * 8)
261static u_int pmap_vsid_bitmap[NPMAPS / VSID_NBPW];

--- 47 unchanged lines hidden (view full) ---

309 vm_offset_t, vm_offset_t, u_int, int);
310static void pmap_pvo_remove(struct pvo_entry *, int);
311static struct pvo_entry *pmap_pvo_find_va(pmap_t, vm_offset_t, int *);
312static struct pte *pmap_pvo_to_pte(const struct pvo_entry *, int);
313
314/*
315 * Utility routines.
316 */
317static void * pmap_pvo_allocf(uma_zone_t, int, u_int8_t *, int);
315static struct pvo_entry *pmap_rkva_alloc(void);
316static void pmap_pa_map(struct pvo_entry *, vm_offset_t,
317 struct pte *, int *);
318static void pmap_pa_unmap(struct pvo_entry *, struct pte *, int *);
319static void pmap_syncicache(vm_offset_t, vm_size_t);
320static boolean_t pmap_query_bit(vm_page_t, int);
321static boolean_t pmap_clear_bit(vm_page_t, int);
322static void tlbia(void);

--- 606 unchanged lines hidden (view full) ---

929}
930
931void
932pmap_init2(void)
933{
934
935 CTR(KTR_PMAP, "pmap_init2");
936
318static struct pvo_entry *pmap_rkva_alloc(void);
319static void pmap_pa_map(struct pvo_entry *, vm_offset_t,
320 struct pte *, int *);
321static void pmap_pa_unmap(struct pvo_entry *, struct pte *, int *);
322static void pmap_syncicache(vm_offset_t, vm_size_t);
323static boolean_t pmap_query_bit(vm_page_t, int);
324static boolean_t pmap_clear_bit(vm_page_t, int);
325static void tlbia(void);

--- 606 unchanged lines hidden (view full) ---

932}
933
934void
935pmap_init2(void)
936{
937
938 CTR(KTR_PMAP, "pmap_init2");
939
940 pmap_pvo_obj = vm_object_allocate(OBJT_PHYS, 16);
941 pmap_pvo_count = 0;
937 pmap_upvo_zone = zinit("UPVO entry", sizeof (struct pvo_entry),
938 0, 0, 0);
942 pmap_upvo_zone = zinit("UPVO entry", sizeof (struct pvo_entry),
943 0, 0, 0);
944 uma_zone_set_allocf(pmap_upvo_zone, pmap_pvo_allocf);
939 pmap_mpvo_zone = zinit("MPVO entry", sizeof(struct pvo_entry),
940 PMAP_PVO_SIZE, ZONE_INTERRUPT, 1);
945 pmap_mpvo_zone = zinit("MPVO entry", sizeof(struct pvo_entry),
946 PMAP_PVO_SIZE, ZONE_INTERRUPT, 1);
947 uma_zone_set_allocf(pmap_mpvo_zone, pmap_pvo_allocf);
941 pmap_initialized = TRUE;
942}
943
944boolean_t
945pmap_is_modified(vm_page_t m)
946{
947 TODO;
948 return (0);

--- 900 unchanged lines hidden (view full) ---

1849 if (pvo->pvo_pte.pte_hi & PTE_VALID) {
1850 panic("pmap_pvo_to_pte: pvo %p has invalid pte %p in "
1851 "pmap_pteg_table but valid in pvo", pvo, pt);
1852 }
1853
1854 return (NULL);
1855}
1856
948 pmap_initialized = TRUE;
949}
950
951boolean_t
952pmap_is_modified(vm_page_t m)
953{
954 TODO;
955 return (0);

--- 900 unchanged lines hidden (view full) ---

1856 if (pvo->pvo_pte.pte_hi & PTE_VALID) {
1857 panic("pmap_pvo_to_pte: pvo %p has invalid pte %p in "
1858 "pmap_pteg_table but valid in pvo", pvo, pt);
1859 }
1860
1861 return (NULL);
1862}
1863
1864static void *
1865pmap_pvo_allocf(uma_zone_t zone, int bytes, u_int8_t *flags, int wait)
1866{
1867 vm_page_t m;
1868
1869 if (bytes != PAGE_SIZE)
1870 panic("pmap_pvo_allocf: benno was shortsighted. hit him.");
1871
1872 *flags = UMA_SLAB_PRIV;
1873 m = vm_page_alloc(pmap_pvo_obj, pmap_pvo_count, VM_ALLOC_SYSTEM);
1874 pmap_pvo_count++;
1875 if (m == NULL)
1876 return (NULL);
1877 return ((void *)VM_PAGE_TO_PHYS(m));
1878}
1879
1857/*
1858 * XXX: THIS STUFF SHOULD BE IN pte.c?
1859 */
1860int
1861pmap_pte_spill(vm_offset_t addr)
1862{
1863 struct pvo_entry *source_pvo, *victim_pvo;
1864 struct pvo_entry *pvo;

--- 236 unchanged lines hidden ---
1880/*
1881 * XXX: THIS STUFF SHOULD BE IN pte.c?
1882 */
1883int
1884pmap_pte_spill(vm_offset_t addr)
1885{
1886 struct pvo_entry *source_pvo, *victim_pvo;
1887 struct pvo_entry *pvo;

--- 236 unchanged lines hidden ---