svn commit: r256792 - in head/sys: conf powerpc/aim powerpc/booke powerpc/powerpc
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Oct 20 16:14:04 UTC 2013
Author: nwhitehorn
Date: Sun Oct 20 16:14:03 2013
New Revision: 256792
URL: http://svnweb.freebsd.org/changeset/base/256792
Log:
Unify the AIM and Book-E vm_machdep.c implementations, which previously
differed only with respect to the AIM version not following style(9) and
some additional features for 64-bit systems and machines with direct maps
in the AIM implementation that are no-ops on Book-E (at least for now).
Added:
head/sys/powerpc/powerpc/vm_machdep.c
- copied, changed from r256769, head/sys/powerpc/aim/vm_machdep.c
Deleted:
head/sys/powerpc/aim/vm_machdep.c
head/sys/powerpc/booke/vm_machdep.c
Modified:
head/sys/conf/files.powerpc
Modified: head/sys/conf/files.powerpc
==============================================================================
--- head/sys/conf/files.powerpc Sun Oct 20 15:24:44 2013 (r256791)
+++ head/sys/conf/files.powerpc Sun Oct 20 16:14:03 2013 (r256792)
@@ -101,7 +101,6 @@ powerpc/aim/swtch32.S optional aim powe
powerpc/aim/swtch64.S optional aim powerpc64
powerpc/aim/trap.c optional aim
powerpc/aim/uma_machdep.c optional aim
-powerpc/aim/vm_machdep.c optional aim
powerpc/booke/clock.c optional booke
powerpc/booke/copyinout.c optional booke
powerpc/booke/interrupt.c optional booke
@@ -113,7 +112,6 @@ powerpc/booke/platform_bare.c optional m
powerpc/booke/pmap.c optional booke
powerpc/booke/swtch.S optional booke
powerpc/booke/trap.c optional booke
-powerpc/booke/vm_machdep.c optional booke
powerpc/cpufreq/dfs.c optional cpufreq
powerpc/cpufreq/pcr.c optional cpufreq aim
powerpc/fpu/fpu_add.c optional fpu_emu powerpc
@@ -214,6 +212,7 @@ powerpc/powerpc/suswintr.c standard
powerpc/powerpc/syncicache.c standard
powerpc/powerpc/sys_machdep.c standard
powerpc/powerpc/uio_machdep.c standard
+powerpc/powerpc/vm_machdep.c standard
powerpc/ps3/ehci_ps3.c optional ps3 ehci
powerpc/ps3/ohci_ps3.c optional ps3 ohci
powerpc/ps3/if_glc.c optional ps3 glc
Copied and modified: head/sys/powerpc/powerpc/vm_machdep.c (from r256769, head/sys/powerpc/aim/vm_machdep.c)
==============================================================================
--- head/sys/powerpc/aim/vm_machdep.c Sat Oct 19 10:00:51 2013 (r256769, copy source)
+++ head/sys/powerpc/powerpc/vm_machdep.c Sun Oct 20 16:14:03 2013 (r256792)
@@ -108,7 +108,7 @@
*/
#ifndef NSFBUFS
-#define NSFBUFS (512 + maxusers * 16)
+#define NSFBUFS (512 + maxusers * 16)
#endif
static int nsfbufs;
@@ -205,7 +205,9 @@ cpu_fork(struct thread *td1, struct proc
#else
pcb->pcb_lr = (register_t)fork_trampoline;
#endif
+ #ifdef AIM
pcb->pcb_cpu.aim.usr_vsid = 0;
+ #endif
/* Setup to release spin count in fork_exit(). */
td2->td_md.md_spinlock_count = 1;
@@ -223,12 +225,9 @@ cpu_fork(struct thread *td1, struct proc
* This is needed to make kernel threads stay in kernel mode.
*/
void
-cpu_set_fork_handler(td, func, arg)
- struct thread *td;
- void (*func)(void *);
- void *arg;
+cpu_set_fork_handler(struct thread *td, void (*func)(void *), void *arg)
{
- struct callframe *cf;
+ struct callframe *cf;
CTR4(KTR_PROC, "%s called with td=%p func=%p arg=%p",
__func__, td, func, arg);
@@ -240,9 +239,9 @@ cpu_set_fork_handler(td, func, arg)
}
void
-cpu_exit(td)
- register struct thread *td;
+cpu_exit(struct thread *td)
{
+
}
/*
@@ -251,29 +250,29 @@ cpu_exit(td)
static void
sf_buf_init(void *arg)
{
- struct sf_buf *sf_bufs;
- vm_offset_t sf_base;
- int i;
+ struct sf_buf *sf_bufs;
+ vm_offset_t sf_base;
+ int i;
/* Don't bother on systems with a direct map */
-
if (hw_direct_map)
return;
- nsfbufs = NSFBUFS;
- TUNABLE_INT_FETCH("kern.ipc.nsfbufs", &nsfbufs);
+ nsfbufs = NSFBUFS;
+ TUNABLE_INT_FETCH("kern.ipc.nsfbufs", &nsfbufs);
- sf_buf_active = hashinit(nsfbufs, M_TEMP, &sf_buf_hashmask);
- TAILQ_INIT(&sf_buf_freelist);
- sf_base = kva_alloc(nsfbufs * PAGE_SIZE);
- sf_bufs = malloc(nsfbufs * sizeof(struct sf_buf), M_TEMP, M_NOWAIT | M_ZERO);
-
- for (i = 0; i < nsfbufs; i++) {
- sf_bufs[i].kva = sf_base + i * PAGE_SIZE;
- TAILQ_INSERT_TAIL(&sf_buf_freelist, &sf_bufs[i], free_entry);
- }
- sf_buf_alloc_want = 0;
- mtx_init(&sf_buf_lock, "sf_buf", NULL, MTX_DEF);
+ sf_buf_active = hashinit(nsfbufs, M_TEMP, &sf_buf_hashmask);
+ TAILQ_INIT(&sf_buf_freelist);
+ sf_base = kva_alloc(nsfbufs * PAGE_SIZE);
+ sf_bufs = malloc(nsfbufs * sizeof(struct sf_buf), M_TEMP,
+ M_NOWAIT | M_ZERO);
+
+ for (i = 0; i < nsfbufs; i++) {
+ sf_bufs[i].kva = sf_base + i * PAGE_SIZE;
+ TAILQ_INSERT_TAIL(&sf_buf_freelist, &sf_bufs[i], free_entry);
+ }
+ sf_buf_alloc_want = 0;
+ mtx_init(&sf_buf_lock, "sf_buf", NULL, MTX_DEF);
}
/*
@@ -282,64 +281,63 @@ sf_buf_init(void *arg)
struct sf_buf *
sf_buf_alloc(struct vm_page *m, int flags)
{
- struct sf_head *hash_list;
- struct sf_buf *sf;
- int error;
+ struct sf_head *hash_list;
+ struct sf_buf *sf;
+ int error;
if (hw_direct_map) {
/* Shortcut the direct mapped case */
-
return ((struct sf_buf *)m);
}
- hash_list = &sf_buf_active[SF_BUF_HASH(m)];
- mtx_lock(&sf_buf_lock);
- LIST_FOREACH(sf, hash_list, list_entry) {
- if (sf->m == m) {
- sf->ref_count++;
- if (sf->ref_count == 1) {
- TAILQ_REMOVE(&sf_buf_freelist, sf, free_entry);
- nsfbufsused++;
- nsfbufspeak = imax(nsfbufspeak, nsfbufsused);
- }
- goto done;
- }
- }
-
- while ((sf = TAILQ_FIRST(&sf_buf_freelist)) == NULL) {
- if (flags & SFB_NOWAIT)
- goto done;
-
- sf_buf_alloc_want++;
- SFSTAT_INC(sf_allocwait);
- error = msleep(&sf_buf_freelist, &sf_buf_lock,
- (flags & SFB_CATCH) ? PCATCH | PVM : PVM, "sfbufa", 0);
- sf_buf_alloc_want--;
-
- /*
- * If we got a signal, don't risk going back to sleep.
- */
- if (error)
- goto done;
- }
-
- TAILQ_REMOVE(&sf_buf_freelist, sf, free_entry);
- if (sf->m != NULL)
- LIST_REMOVE(sf, list_entry);
-
- LIST_INSERT_HEAD(hash_list, sf, list_entry);
- sf->ref_count = 1;
- sf->m = m;
- nsfbufsused++;
- nsfbufspeak = imax(nsfbufspeak, nsfbufsused);
- pmap_qenter(sf->kva, &sf->m, 1);
+ hash_list = &sf_buf_active[SF_BUF_HASH(m)];
+ mtx_lock(&sf_buf_lock);
+ LIST_FOREACH(sf, hash_list, list_entry) {
+ if (sf->m == m) {
+ sf->ref_count++;
+ if (sf->ref_count == 1) {
+ TAILQ_REMOVE(&sf_buf_freelist, sf, free_entry);
+ nsfbufsused++;
+ nsfbufspeak = imax(nsfbufspeak, nsfbufsused);
+ }
+ goto done;
+ }
+ }
+
+ while ((sf = TAILQ_FIRST(&sf_buf_freelist)) == NULL) {
+ if (flags & SFB_NOWAIT)
+ goto done;
+
+ sf_buf_alloc_want++;
+ SFSTAT_INC(sf_allocwait);
+ error = msleep(&sf_buf_freelist, &sf_buf_lock,
+ (flags & SFB_CATCH) ? PCATCH | PVM : PVM, "sfbufa", 0);
+ sf_buf_alloc_want--;
+
+ /*
+ * If we got a signal, don't risk going back to sleep.
+ */
+ if (error)
+ goto done;
+ }
+
+ TAILQ_REMOVE(&sf_buf_freelist, sf, free_entry);
+ if (sf->m != NULL)
+ LIST_REMOVE(sf, list_entry);
+
+ LIST_INSERT_HEAD(hash_list, sf, list_entry);
+ sf->ref_count = 1;
+ sf->m = m;
+ nsfbufsused++;
+ nsfbufspeak = imax(nsfbufspeak, nsfbufsused);
+ pmap_qenter(sf->kva, &sf->m, 1);
done:
- mtx_unlock(&sf_buf_lock);
- return (sf);
+ mtx_unlock(&sf_buf_lock);
+ return (sf);
}
/*
- * Detatch mapped page and release resources back to the system.
+ * Detach mapped page and release resources back to the system.
*
* Remove a reference from the given sf_buf, adding it to the free
* list when its reference count reaches zero. A freed sf_buf still,
@@ -352,16 +350,16 @@ sf_buf_free(struct sf_buf *sf)
if (hw_direct_map)
return;
- mtx_lock(&sf_buf_lock);
- sf->ref_count--;
- if (sf->ref_count == 0) {
- TAILQ_INSERT_TAIL(&sf_buf_freelist, sf, free_entry);
- nsfbufsused--;
-
- if (sf_buf_alloc_want > 0)
- wakeup(&sf_buf_freelist);
- }
- mtx_unlock(&sf_buf_lock);
+ mtx_lock(&sf_buf_lock);
+ sf->ref_count--;
+ if (sf->ref_count == 0) {
+ TAILQ_INSERT_TAIL(&sf_buf_freelist, sf, free_entry);
+ nsfbufsused--;
+
+ if (sf_buf_alloc_want > 0)
+ wakeup(&sf_buf_freelist);
+ }
+ mtx_unlock(&sf_buf_lock);
}
/*
@@ -381,18 +379,15 @@ swi_vm(void *dummy)
* dumping the ``ISA memory hole'' which could cause indefinite hangs,
* or other unpredictable behaviour.
*/
-
-
int
-is_physical_memory(addr)
- vm_offset_t addr;
+is_physical_memory(vm_offset_t addr)
{
+
/*
* stuff other tests for known memory-mapped devices (PCI?)
* here
*/
-
- return 1;
+ return (1);
}
/*
@@ -404,10 +399,12 @@ is_physical_memory(addr)
void
cpu_thread_swapin(struct thread *td)
{
+
}
void
cpu_thread_swapout(struct thread *td)
{
+
}
More information about the svn-src-all
mailing list