You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(210) |
Jun
(169) |
Jul
(167) |
Aug
(128) |
Sep
(218) |
Oct
(120) |
Nov
(86) |
Dec
(71) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2001 |
Jan
(91) |
Feb
(179) |
Mar
(52) |
Apr
(56) |
May
(183) |
Jun
(62) |
Jul
(63) |
Aug
(49) |
Sep
(36) |
Oct
(35) |
Nov
(72) |
Dec
(30) |
| 2002 |
Jan
(53) |
Feb
(61) |
Mar
(56) |
Apr
(13) |
May
(1) |
Jun
(7) |
Jul
(80) |
Aug
(73) |
Sep
(30) |
Oct
(29) |
Nov
(8) |
Dec
(40) |
| 2003 |
Jan
(10) |
Feb
(2) |
Mar
(4) |
Apr
(9) |
May
(3) |
Jun
(19) |
Jul
(64) |
Aug
(53) |
Sep
(28) |
Oct
(7) |
Nov
(3) |
Dec
(21) |
| 2004 |
Jan
(11) |
Feb
(30) |
Mar
(18) |
Apr
(1) |
May
(13) |
Jun
(18) |
Jul
(13) |
Aug
|
Sep
(9) |
Oct
(5) |
Nov
|
Dec
|
| 2005 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(10) |
Aug
(21) |
Sep
(7) |
Oct
(10) |
Nov
(6) |
Dec
|
| 2006 |
Jan
(2) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
(2) |
Aug
(2) |
Sep
(6) |
Oct
(10) |
Nov
(8) |
Dec
(3) |
| 2007 |
Jan
(3) |
Feb
(6) |
Mar
(1) |
Apr
(6) |
May
(10) |
Jun
(7) |
Jul
(13) |
Aug
(8) |
Sep
|
Oct
(2) |
Nov
|
Dec
|
|
From: Ken T. <ke...@we...> - 2001-07-09 21:53:40
|
Hello, On Mon, 9 Jul 2001, Michel D?nzer wrote: > build fix for Mac partition support This fix interests me, was mac partition support not working ? I've been using mac partition support to access the LinuxPPC CDs which are mac bootable I believe and have a mac partition table on them. Must confess I don't understand how iso9660 and hfs fit together but it seemed to work. I've being trying to get either the text or X based installers from the 2000 Q4 CD to work, the basics work but it looks like some things are missing from the CD, or the image I downloaded. I don't see how it could work at all. Ken. |
|
From: Michel D?n. <mda...@us...> - 2001-07-09 15:40:27
|
CVSROOT: /cvsroot/linux-apus
Module name: 2.3
Repository: 2.3/fs/partitions/
Changes by: mdaenzer@usw-pr-cvs1. 01/07/09 08:40:26
Log message:
build fix for Mac partition support
Modified files:
2.3/fs/partitions/:
mac.c
Revision Changes Path
1.2 +8 -6 2.3/fs/partitions/mac.c
|
|
From: Roman Z. <zi...@li...> - 2001-07-09 12:48:11
|
Hi, Ken Tyler wrote: > How do I get rid of old files out of my local copy ? > > When I 'cvs update' I get several messages like > > cvs server: net/econet/sysctl_net_ec.c no longer exists, no comparison available I think that can only happen if you modified the files locally. You can just remove the file manually and run 'cvs update' again. If that doesn't help, you can also remove the whole directory and run 'cvs update -d'. > As I undersatnd 'cvs update -P' should delete all the old files but it > doesn't seem to. That's only for empty directories. bye, Roman |
|
From: Ken T. <ke...@we...> - 2001-07-09 12:28:33
|
Hello, How do I get rid of old files out of my local copy ? When I 'cvs update' I get several messages like cvs server: net/econet/sysctl_net_ec.c no longer exists, no comparison available As I undersatnd 'cvs update -P' should delete all the old files but it doesn't seem to. Thanks, Ken. |
|
From: Roman Z. <zi...@li...> - 2001-07-08 23:37:28
|
Hi, Ken Tyler wrote: > Does this mean the cvs tree is now 2.4.6 ? Yep and the kernel compiles happily now already for more than 3 hours, so this problem should be fixed now. :) BTW there also new snapshots on the ftp server, so nobody has an excuse to give the kernel a try, before we make an official release. bye, Roman |
|
From: Ken T. <ke...@we...> - 2001-07-08 22:55:11
|
On Sun, 8 Jul 2001, Roman Zippel wrote: > First the good news: I think I found the vmm bug, so crashing X server > and compiles should be gone now. I also changed the pcmcia > initialization to match the m68k version, so there is a chance that this > works now too. Great. I'll give it a test run. > Bad news is I've tested this only with 2.4.5, I'm going to test 2.4.6 > now, but in case you don't want to wait. :) Does this mean the cvs tree is now 2.4.6 ? > BTW Michel, could we _please_ get the old commit script back? :-) he he :) No, make it post a message for every single hunk - I like lots of mail, makes me feel loved :) Ken. |
|
From: Michel <mic...@ii...> - 2001-07-08 20:16:59
|
Roman Zippel wrote: > First the good news: I think I found the vmm bug, so crashing X server > and compiles should be gone now. I also changed the pcmcia > initialization to match the m68k version, so there is a chance that this > works now too. > Bad news is I've tested this only with 2.4.5, I'm going to test 2.4.6 > now, but in case you don't want to wait. :) Wow, this sounds great! I'll be working on 2.4.6 Debian packages this week. > BTW Michel, could we _please_ get the old commit script back? :-) Sure, should be back to normal, apologies to everyone for the spam. -- Earthling Michel Dänzer (MrCooper) \ Debian GNU/Linux (powerpc) developer CS student, Free Software enthusiast \ XFree86 and DRI project member |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:42:09
|
Update of /cvsroot/linux-apus/2.3/net/irda In directory usw-pr-cvs1:/tmp/cvs-serv20699/net/irda Modified Files: Makefile Log Message: make dep fix Index: Makefile =================================================================== RCS file: /cvsroot/linux-apus/2.3/net/irda/Makefile,v retrieving revision 1.1.1.4 retrieving revision 1.2 diff -u -r1.1.1.4 -r1.2 --- Makefile 2001/01/11 19:13:31 1.1.1.4 +++ Makefile 2001/07/08 17:42:07 1.2 @@ -20,7 +20,6 @@ obj-m := $(O_TARGET) endif -obj-$(CONFIG_IRDA_COMPRESSION) += irlap_comp.o obj-$(CONFIG_PROC_FS) += irproc.o obj-$(CONFIG_SYSCTL) += irsysctl.o obj-$(CONFIG_IRLAN) += irlan/irlan.o @@ -28,7 +27,6 @@ subdir-$(CONFIG_IRLAN) += irlan subdir-$(CONFIG_IRNET) += irnet subdir-$(CONFIG_IRCOMM) += ircomm -subdir-$(CONFIG_IRDA_COMPRESSION) += compressors ifeq ($(CONFIG_IRLAN),y) obj-y += irlan/irlan.o @@ -36,14 +34,6 @@ ifeq ($(CONFIG_IRNET),y) obj-y += irnet/irnet.o -endif - -ifeq ($(CONFIG_IRDA_DEFLATE),y) -obj-y += compressors/irda_deflate.o -else - ifeq ($(CONFIG_IRDA_DEFLATE),m) - MOD_TO_LIST += irda_deflate.o - endif endif ifeq ($(CONFIG_IRCOMM),y) |
|
From: Roman Z. <zi...@li...> - 2001-07-08 17:26:05
|
Hi, First the good news: I think I found the vmm bug, so crashing X server and compiles should be gone now. I also changed the pcmcia initialization to match the m68k version, so there is a chance that this works now too. Bad news is I've tested this only with 2.4.5, I'm going to test 2.4.6 now, but in case you don't want to wait. :) BTW Michel, could we _please_ get the old commit script back? :-) bye, Roman |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:12:40
|
Update of /cvsroot/linux-apus/2.3/mm In directory usw-pr-cvs1:/tmp/cvs-serv15187/mm Modified Files: memory.c Log Message: flush all read swap pages Index: memory.c =================================================================== RCS file: /cvsroot/linux-apus/2.3/mm/memory.c,v retrieving revision 1.1.1.13 retrieving revision 1.3 diff -u -r1.1.1.13 -r1.3 --- memory.c 2001/07/08 15:05:26 1.1.1.13 +++ memory.c 2001/07/08 17:12:37 1.3 @@ -1109,8 +1109,6 @@ return -1; } wait_on_page(page); - flush_page_to_ram(page); - flush_icache_page(vma, page); } /* @@ -1140,6 +1138,8 @@ pte = pte_mkwrite(pte_mkdirty(pte)); UnlockPage(page); + flush_page_to_ram(page); + flush_icache_page(vma, page); set_pte(page_table, pte); /* No need to invalidate - it was non-present before */ |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:10:36
|
Update of /cvsroot/linux-apus/2.3/arch/ppc/amiga In directory usw-pr-cvs1:/tmp/cvs-serv14789/arch/ppc/amiga Modified Files: amiints.c Log Message: fix pcmcia initialization Index: amiints.c =================================================================== RCS file: /cvsroot/linux-apus/2.3/arch/ppc/amiga/amiints.c,v retrieving revision 1.1.1.7 retrieving revision 1.6 diff -u -r1.1.1.7 -r1.6 --- amiints.c 2001/07/08 15:58:24 1.1.1.7 +++ amiints.c 2001/07/08 17:10:33 1.6 @@ -115,7 +115,7 @@ /* turn off PCMCIA interrupts */ if (AMIGAHW_PRESENT(PCMCIA)) - pcmcia_disable_irq(); + gayle.inten = GAYLE_IRQ_IDE; /* turn off all interrupts... */ custom.intena = 0x7fff; |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:27
|
Update of /cvsroot/linux-apus/2.3/arch/ppc/mm
In directory usw-pr-cvs1:/tmp/cvs-serv11606/arch/ppc/mm
Modified Files:
init.c
Log Message:
conflict fixes from import bitkeeper (2.4.6)
Index: init.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/mm/init.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- init.c 2001/06/10 00:17:27 1.18
+++ init.c 2001/07/08 16:59:54 1.19
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.init.c 1.22 05/17/01 18:14:23 cort
+ * BK Id: SCCS/s.init.c 1.29 07/04/01 08:52:21 trini
*/
/*
* PowerPC version
@@ -73,9 +73,15 @@
#define PGTOKB(pages) (((pages) * PAGE_SIZE) >> 10)
+mm_context_t next_mmu_context;
+unsigned long context_map[(LAST_CONTEXT+1) / (8*sizeof(unsigned long))];
+#ifdef FEW_CONTEXTS
+atomic_t nr_free_contexts;
+struct mm_struct *context_mm[LAST_CONTEXT+1];
+void steal_context(void);
+#endif /* FEW_CONTEXTS */
+
int prom_trashed;
-atomic_t next_mmu_context;
-rwlock_t context_overflow_lock __cacheline_aligned = RW_LOCK_UNLOCKED;
unsigned long *end_of_DRAM;
unsigned long total_memory;
unsigned long total_lowmem;
@@ -187,12 +193,6 @@
/* max amount of low RAM to map in */
unsigned long __max_low_memory = MAX_LOW_MEM;
-void __bad_pte(pmd_t *pmd)
-{
- printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
- pmd_val(*pmd) = (unsigned long) BAD_PAGETABLE;
-}
-
int do_check_pgt_cache(int low, int high)
{
int freed = 0;
@@ -211,35 +211,6 @@
return freed;
}
-/*
- * BAD_PAGE is the page that is used for page faults when linux
- * is out-of-memory. Older versions of linux just did a
- * do_exit(), but using this instead means there is less risk
- * for a process dying in kernel mode, possibly leaving a inode
- * unused etc..
- *
- * BAD_PAGETABLE is the accompanying page-table: it is initialized
- * to point to BAD_PAGE entries.
- *
- * ZERO_PAGE is a special page that is used for zero-initialized
- * data and COW.
- */
-pte_t *empty_bad_page_table;
-
-pte_t * __bad_pagetable(void)
-{
- clear_page(empty_bad_page_table);
- return empty_bad_page_table;
-}
-
-void *empty_bad_page;
-
-pte_t __bad_page(void)
-{
- clear_page(empty_bad_page);
- return pte_mkdirty(mk_pte_phys(__pa(empty_bad_page), PAGE_SHARED));
-}
-
void show_mem(void)
{
int i,free = 0,total = 0,reserved = 0;
@@ -319,21 +290,10 @@
void si_meminfo(struct sysinfo *val)
{
- int i;
-
- i = max_mapnr;
- val->totalram = 0;
+ val->totalram = totalram_pages;
val->sharedram = 0;
val->freeram = nr_free_pages();
val->bufferram = atomic_read(&buffermem_pages);
- while (i-- > 0) {
- if (PageReserved(mem_map+i))
- continue;
- val->totalram++;
- if (!atomic_read(&mem_map[i].count))
- continue;
- val->sharedram += atomic_read(&mem_map[i].count) - 1;
- }
val->totalhigh = totalhigh_pages;
val->freehigh = nr_free_highpages();
val->mem_unit = PAGE_SIZE;
@@ -500,14 +460,16 @@
if (pg != 0) {
err = 0;
set_pte(pg, mk_pte_phys(pa & PAGE_MASK, __pgprot(flags)));
- if (mem_init_done)
- flush_hash_page(0, va);
+#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx)
+ if (mem_init_done && Hash != 0)
+ flush_hash_page(0, va, pg);
+#endif /* !4xx && !8xx */
}
spin_unlock(&init_mm.page_table_lock);
return err;
}
-#ifndef CONFIG_8xx
+#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx)
/*
* TLB flushing:
*
@@ -528,19 +490,14 @@
void
local_flush_tlb_all(void)
{
-#ifdef CONFIG_PPC64BRIDGE
- /* XXX this assumes that the vmalloc arena starts no lower than
- * 0xd0000000 on 64-bit machines. */
- flush_hash_segments(0xd, 0xffffff);
-#else
- /* this could cause problems on SMP with nobats -- paulus */
- /* XXX no hash_table_lock? interesting -- paulus */
- __clear_user(Hash, Hash_size);
- _tlbia();
+ /* aargh!!! */
+ /* just flush the kernel part of the address space, that's
+ all that the current callers of this require. -- paulus. */
+ local_flush_tlb_range(&init_mm, TASK_SIZE, ~0UL);
+
#ifdef CONFIG_SMP
smp_send_tlb_invalidate(0);
#endif /* CONFIG_SMP */
-#endif /* CONFIG_PPC64BRIDGE */
}
/*
@@ -551,30 +508,18 @@
void
local_flush_tlb_mm(struct mm_struct *mm)
{
- if (mm->context == 0) {
- /* don't try to reassign a new context to the kernel */
- /*
- * This could cause problems on SMP if we aren't using
- * the BATs (e.g. on POWER4 or if the nobats option is used).
- * The problem scenario is that one cpu is doing
- * flush_hash_page or similar when another cpu clears
- * out the HPTEs which map the flush_hash_page text
- * and the hash table. hash_page will then deadlock.
- * We need some way to have "protected" HPTEs or else
- * do all hash-table manipulation with the MMU off.
- * -- paulus.
- */
-#ifdef CONFIG_PPC64BRIDGE
- flush_hash_segments(0xd, 0xf);
-#else
- flush_hash_segments(0xc, 0xf);
-#endif CONFIG_PPC64BRIDGE
+ if (Hash == 0) {
_tlbia();
return;
}
- mm->context = NO_CONTEXT;
- if (mm == current->mm)
- activate_mm(mm, mm);
+
+ if (mm->map_count) {
+ struct vm_area_struct *mp;
+ for (mp = mm->mmap; mp != NULL; mp = mp->vm_next)
+ local_flush_tlb_range(mm, mp->vm_start, mp->vm_end);
+ } else
+ local_flush_tlb_range(mm, 0, TASK_SIZE);
+
#ifdef CONFIG_SMP
smp_send_tlb_invalidate(0);
#endif
@@ -583,10 +528,21 @@
void
local_flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr)
{
- if (vmaddr < TASK_SIZE)
- flush_hash_page(vma->vm_mm->context, vmaddr);
- else
- flush_hash_page(0, vmaddr);
+ struct mm_struct *mm;
+ pmd_t *pmd;
+ pte_t *pte;
+
+ if (Hash == 0) {
+ _tlbie(vmaddr);
+ return;
+ }
+ mm = (vmaddr < TASK_SIZE)? vma->vm_mm: &init_mm;
+ pmd = pmd_offset(pgd_offset(mm, vmaddr), vmaddr);
+ if (!pmd_none(*pmd)) {
+ pte = pte_offset(pmd, vmaddr);
+ if (pte_val(*pte) & _PAGE_HASHPTE)
+ flush_hash_page(mm->context, vmaddr, pte);
+ }
#ifdef CONFIG_SMP
smp_send_tlb_invalidate(0);
#endif
@@ -594,28 +550,43 @@
/*
- * for each page addr in the range, call MMU_invalidate_page()
- * if the range is very large and the hash table is small it might be
- * faster to do a search of the hash table and just invalidate pages
- * that are in the range but that's for study later.
- * -- Cort
+ * For each address in the range, find the pte for the address
+ * and check _PAGE_HASHPTE bit; if it is set, find and destroy
+ * the corresponding HPTE.
*/
void
local_flush_tlb_range(struct mm_struct *mm, unsigned long start, unsigned long end)
{
- start &= PAGE_MASK;
+ pmd_t *pmd;
+ pte_t *pte;
+ unsigned long pmd_end;
+ unsigned int ctx = mm->context;
- if (mm->context != 0) {
- if (end > TASK_SIZE)
- end = TASK_SIZE;
- if (end - start > 20 * PAGE_SIZE) {
- flush_tlb_mm(mm);
- return;
- }
+ if (Hash == 0) {
+ _tlbia();
+ return;
}
-
- for (; start < end; start += PAGE_SIZE)
- flush_hash_page(mm->context, start);
+ start &= PAGE_MASK;
+ if (start >= end)
+ return;
+ pmd = pmd_offset(pgd_offset(mm, start), start);
+ do {
+ pmd_end = (start + PGDIR_SIZE) & PGDIR_MASK;
+ if (!pmd_none(*pmd)) {
+ if (!pmd_end || pmd_end > end)
+ pmd_end = end;
+ pte = pte_offset(pmd, start);
+ do {
+ if ((pte_val(*pte) & _PAGE_HASHPTE) != 0)
+ flush_hash_page(ctx, start, pte);
+ start += PAGE_SIZE;
+ ++pte;
+ } while (start && start < pmd_end);
+ } else {
+ start = pmd_end;
+ }
+ ++pmd;
+ } while (start && start < end);
#ifdef CONFIG_SMP
smp_send_tlb_invalidate(0);
@@ -623,59 +594,6 @@
}
/*
- * The context counter has overflowed.
- * We set mm->context to NO_CONTEXT for all mm's in the system.
- * We assume we can get to all mm's by looking as tsk->mm for
- * all tasks in the system.
- */
-void
-mmu_context_overflow(void)
-{
- struct task_struct *tsk;
-
- printk(KERN_DEBUG "mmu_context_overflow\n");
- /* acquire the write lock for context overflow */
- write_lock (&context_overflow_lock);
- /* recheck if overflow still exists */
- if (atomic_read(&next_mmu_context) == LAST_CONTEXT) {
- read_lock(&tasklist_lock);
- for_each_task(tsk) {
- if (tsk->mm)
- tsk->mm->context = NO_CONTEXT;
- }
- read_unlock(&tasklist_lock);
- flush_hash_segments(0x10, 0xffffff);
-#ifdef CONFIG_SMP
- smp_send_tlb_invalidate(0);
-#endif
- atomic_set(&next_mmu_context, 0);
- }
- write_unlock (&context_overflow_lock);
- /* make sure current always has a context */
- /* need to check to assure current task has an mm */
- /* - idle thread does not have an MM */
- if (current->mm) {
- current->mm->context = MUNGE_CONTEXT(atomic_inc_return(&next_mmu_context));
- set_context(current->mm->context, current->mm->pgd);
- }
-}
-#else /* CONFIG_8xx */
-void
-mmu_context_overflow(void)
-{
- atomic_set(&next_mmu_context, -1);
-}
-#endif /* CONFIG_8xx */
-
-void flush_page_to_ram(struct page *page)
-{
- unsigned long vaddr = (unsigned long) kmap(page);
- __flush_page_to_ram(vaddr);
- kunmap(page);
-}
-
-#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx)
-/*
* Set up one of the I/D BAT (block address translation) register pairs.
* The parameters are not checked; in particular size must be a power
* of 2 between 128k and 256M.
@@ -735,8 +653,6 @@
/*
* Map in all of physical memory starting at KERNELBASE.
*/
-#define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED)
-
static void __init mapin_ram(void)
{
unsigned long v, p, s, f;
@@ -786,10 +702,10 @@
f = _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_SHARED;
#if defined(CONFIG_KGDB) || defined(CONFIG_XMON)
/* Allows stub to set breakpoints everywhere */
- f |= _PAGE_RW | _PAGE_DIRTY | _PAGE_HWWRITE;
+ f |= _PAGE_RW | _PAGE_DIRTY;
#else
if ((char *) v < _stext || (char *) v >= etext)
- f |= _PAGE_RW | _PAGE_DIRTY | _PAGE_HWWRITE;
+ f |= _PAGE_RW | _PAGE_DIRTY;
#ifndef CONFIG_8xx
else
/* On the powerpc (not 8xx), no user access
@@ -821,14 +737,16 @@
unsigned long cnt = 0;
while (start < end) {
- clear_bit(PG_reserved, &virt_to_page(start)->flags);
+ ClearPageReserved(virt_to_page(start));
set_page_count(virt_to_page(start), 1);
free_page(start);
cnt++;
start += PAGE_SIZE;
}
- if (cnt)
+ if (cnt) {
printk(" %ldk %s", PGTOKB(cnt), name);
+ totalram_pages += cnt;
+ }
}
void free_initmem(void)
@@ -857,16 +775,59 @@
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
+ printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
+
for (; start < end; start += PAGE_SIZE) {
ClearPageReserved(virt_to_page(start));
set_page_count(virt_to_page(start), 1);
free_page(start);
totalram_pages++;
}
- printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
}
#endif
+/*
+ * Initialize the context management stuff.
+ */
+static void mmu_context_init(void)
+{
+ context_map[0] = 1; /* init_mm uses context 0 */
+ next_mmu_context = 1;
+#ifdef FEW_CONTEXTS
+ atomic_set(&nr_free_contexts, LAST_CONTEXT);
+ context_mm[0] = &init_mm;
+#endif /* FEW_CONTEXTS */
+}
+
+#ifdef FEW_CONTEXTS
+/*
+ * Steal a context from a task that has one at the moment.
+ * This is only used on 8xx and 4xx and we presently assume that
+ * they don't do SMP. If they do then this will have to check
+ * whether the MM we steal is in use.
+ * We also assume that this is only used on systems that don't
+ * use an MMU hash table - this is true for 8xx and 4xx.
+ * This isn't an LRU system, it just frees up each context in
+ * turn (sort-of pseudo-random replacement :). This would be the
+ * place to implement an LRU scheme if anyone was motivated to do it.
+ * -- paulus
+ */
+void steal_context(void)
+{
+ struct mm_struct *mm;
+
+ /* free up context `next_mmu_context' */
+ /* if we shouldn't free context 0, don't... */
+#ifdef CONFIG_4xx
+ if (next_mmu_context == 0)
+ next_mmu_context = 1;
+#endif /* CONFIG_4xx */
+ mm = context_mm[next_mmu_context];
+ flush_tlb_mm(mm);
+ destroy_context(mm);
+}
+#endif /* FEW_CONTEXTS */
+
extern boot_infos_t *disp_bi;
/*
@@ -921,6 +882,8 @@
mtspr(SPRN_DCCR, 0x80000000); /* 128 MB of data space at 0x0. */
mtspr(SPRN_ICCR, 0x80000000); /* 128 MB of instr. space at 0x0. */
+
+ mmu_context_init();
}
#else /* !CONFIG_4xx */
@@ -955,12 +918,8 @@
if ( ppc_md.progress ) ppc_md.progress("MMU:mapin", 0x301);
/* Map in all of RAM starting at KERNELBASE */
mapin_ram();
-
-#if defined(CONFIG_POWER4)
- ioremap_base = ioremap_bot = 0xfffff000;
- isa_io_base = (unsigned long) ioremap(0xffd00000, 0x200000) + 0x100000;
-#elif defined(CONFIG_8xx)
+#if defined(CONFIG_8xx)
/* Now map in some of the I/O space that is generically needed
* or shared with multiple devices.
* All of this fits into the same 4Mbyte region, so it only
@@ -992,7 +951,7 @@
#ifdef CONFIG_PCI
ioremap(PCI_CSR_ADDR, PCI_CSR_SIZE);
#endif
-#else /* !CONFIG_POWER4 && !CONFIG_8xx */
+#else /* !CONFIG_8xx */
/*
* Setup the bat mappings we're going to load that cover
* the io areas. RAM was mapped by mapin_ram().
@@ -1042,7 +1001,7 @@
break;
}
ioremap_bot = ioremap_base;
-#endif /* CONFIG_POWER4 || CONFIG_8xx */
+#endif /* CONFIG_8xx */
if ( ppc_md.progress ) ppc_md.progress("MMU:exit", 0x211);
#ifdef CONFIG_BOOTX_TEXT
@@ -1050,6 +1009,8 @@
if (_machine == _MACH_Pmac || _machine == _MACH_chrp)
map_bootx_text();
#endif
+
+ mmu_context_init();
}
#endif /* CONFIG_4xx */
@@ -1117,12 +1078,6 @@
#endif /* CONFIG_HIGHMEM */
/*
- * Grab some memory for bad_page and bad_pagetable to use.
- */
- empty_bad_page = alloc_bootmem_pages(PAGE_SIZE);
- empty_bad_page_table = alloc_bootmem_pages(PAGE_SIZE);
-
- /*
* All pages are DMA-able so we put them all in the DMA zone.
*/
zones_size[ZONE_DMA] = total_lowmem >> PAGE_SHIFT;
@@ -1150,7 +1105,6 @@
highmem_mapnr = total_lowmem >> PAGE_SHIFT;
highmem_start_page = mem_map + highmem_mapnr;
max_mapnr = total_memory >> PAGE_SHIFT;
- totalram_pages += max_mapnr - highmem_mapnr;
#else
max_mapnr = total_lowmem >> PAGE_SHIFT;
#endif /* CONFIG_HIGHMEM */
@@ -1222,15 +1176,17 @@
#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx)
/*
- * Initialize the hash table and patch the instructions in head.S.
+ * Initialize the hash table and patch the instructions in hashtable.S.
*/
static void __init hash_init(void)
{
int Hash_bits, mb, mb2;
unsigned int hmask, h;
- extern unsigned int hash_page_patch_A[], hash_page_patch_B[],
- hash_page_patch_C[], hash_page[];
+ extern unsigned int hash_page_patch_A[];
+ extern unsigned int hash_page_patch_B[], hash_page_patch_C[];
+ extern unsigned int hash_page[];
+ extern unsigned int flush_hash_patch_A[], flush_hash_patch_B[];
#ifdef CONFIG_PPC64BRIDGE
/* The hash table has already been allocated and initialized
@@ -1280,6 +1236,7 @@
if ( Hash_size ) {
Hash = mem_pieces_find(Hash_size, Hash_size);
cacheable_memzero(Hash, Hash_size);
+ _SDR1 = __pa(Hash) | (Hash_mask >> 10);
} else
Hash = 0;
#endif /* CONFIG_PPC64BRIDGE */
@@ -1292,10 +1249,10 @@
Hash_end = (PTE *) ((unsigned long)Hash + Hash_size);
/*
- * Patch up the instructions in head.S:hash_page
+ * Patch up the instructions in hashtable.S:create_hpte
*/
hash_page_patch_A[0] = (hash_page_patch_A[0] & ~0xffff)
- | (__pa(Hash) >> 16);
+ | ((unsigned int)(Hash) >> 16);
hash_page_patch_A[1] = (hash_page_patch_A[1] & ~0x7c0)
| (mb << 6);
hash_page_patch_A[2] = (hash_page_patch_A[2] & ~0x7c0)
@@ -1304,10 +1261,6 @@
| hmask;
hash_page_patch_C[0] = (hash_page_patch_C[0] & ~0xffff)
| hmask;
-#if 0 /* see hash_page in head.S, note also patch_C ref below */
- hash_page_patch_D[0] = (hash_page_patch_D[0] & ~0xffff)
- | hmask;
-#endif
/*
* Ensure that the locations we've patched have been written
* out from the data cache and invalidated in the instruction
@@ -1315,6 +1268,19 @@
*/
flush_icache_range((unsigned long) &hash_page_patch_A[0],
(unsigned long) &hash_page_patch_C[1]);
+ /*
+ * Patch up the instructions in hashtable.S:flush_hash_page
+ */
+ flush_hash_patch_A[0] = (flush_hash_patch_A[0] & ~0xffff)
+ | ((unsigned int)(Hash) >> 16);
+ flush_hash_patch_A[1] = (flush_hash_patch_A[1] & ~0x7c0)
+ | (mb << 6);
+ flush_hash_patch_A[2] = (flush_hash_patch_A[2] & ~0x7c0)
+ | (mb2 << 6);
+ flush_hash_patch_B[0] = (flush_hash_patch_B[0] & ~0xffff)
+ | hmask;
+ flush_icache_range((unsigned long) &flush_hash_patch_A[0],
+ (unsigned long) &flush_hash_patch_B[1]);
}
else {
Hash_end = 0;
@@ -1327,6 +1293,7 @@
flush_icache_range((unsigned long) &hash_page[0],
(unsigned long) &hash_page[1]);
}
+
if ( ppc_md.progress ) ppc_md.progress("hash:done", 0x205);
}
#endif /* !CONFIG_4xx && !CONFIG_8xx */
@@ -1341,7 +1308,7 @@
unsigned long kstart, ksize;
/*
- * Initially, available phyiscal memory is equivalent to all
+ * Initially, available physical memory is equivalent to all
* physical memory.
*/
@@ -1377,4 +1344,51 @@
if (Hash)
mem_pieces_remove(&phys_avail, __pa(Hash), Hash_size, 1);
#endif /* CONFIG_PPC64BRIDGE */
+}
+
+void flush_page_to_ram(struct page *page)
+{
+ unsigned long vaddr = (unsigned long) kmap(page);
+ __flush_page_to_ram(vaddr);
+ kunmap(page);
+}
+
+#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx)
+/*
+ * This is called at the end of handling a user page fault, when the
+ * fault has been handled by updating a PTE in the linux page tables.
+ * We use it to preload an HPTE into the hash table corresponding to
+ * the updated linux PTE.
+ */
+void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
+ pte_t pte)
+{
+ struct mm_struct *mm;
+ pmd_t *pmd;
+ pte_t *ptep;
+ static int nopreload;
+
+ if (Hash == 0 || nopreload)
+ return;
+ mm = (address < TASK_SIZE)? vma->vm_mm: &init_mm;
+ pmd = pmd_offset(pgd_offset(mm, address), address);
+ if (!pmd_none(*pmd)) {
+ ptep = pte_offset(pmd, address);
+ add_hash_page(mm->context, address, ptep);
+ }
+}
+#endif /* !4xx && !8xx */
+
+/*
+ * set_pte stores a linux PTE into the linux page table.
+ * On machines which use an MMU hash table we avoid changing the
+ * _PAGE_HASHPTE bit.
+ */
+void set_pte(pte_t *ptep, pte_t pte)
+{
+#if _PAGE_HASHPTE != 0
+ pte_update(ptep, ~_PAGE_HASHPTE, pte_val(pte) & ~_PAGE_HASHPTE);
+#else
+ *ptep = pte;
+#endif
}
|
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:27
|
Update of /cvsroot/linux-apus/2.3/arch/ppc/kernel
In directory usw-pr-cvs1:/tmp/cvs-serv11606/arch/ppc/kernel
Modified Files:
apus_setup.c head.S irq.c pci.c ppc-stub.c ppc_ksyms.c setup.c
time.c
Removed Files:
hashtable.S
Log Message:
conflict fixes from import bitkeeper (2.4.6)
Index: apus_setup.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/apus_setup.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- apus_setup.c 2001/06/10 00:17:27 1.15
+++ apus_setup.c 2001/07/08 16:59:54 1.16
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.apus_setup.c 1.11 05/17/01 18:14:21 cort
+ * BK Id: SCCS/s.apus_setup.c 1.13 06/05/01 21:22:02 paulus
*/
/*
* linux/arch/ppc/kernel/apus_setup.c
Index: head.S
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/head.S,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- head.S 2001/06/10 00:17:27 1.19
+++ head.S 2001/07/08 16:59:54 1.20
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.head.S 1.21 05/23/01 00:38:42 cort
+ * BK Id: SCCS/s.head.S 1.24 07/03/01 15:00:30 paulus
*/
/*
* PowerPC version
@@ -25,11 +25,12 @@
*
*/
+#include <linux/config.h>
#include "ppc_asm.h"
#include <asm/processor.h>
#include <asm/page.h>
-#include <linux/config.h>
#include <asm/mmu.h>
+#include <asm/pgtable.h>
#ifdef CONFIG_APUS
#include <asm/amigappc.h>
@@ -179,7 +180,7 @@
mtspr SDR1,r4
slbia
lis r5,0x2000 /* set pseudo-segment reg 12 */
- ori r5,r5,12
+ ori r5,r5,0x0ccc
mtsr 12,r5
#endif /* CONFIG_POWER4 */
@@ -314,9 +315,8 @@
mfspr r20,DSISR
andis. r0,r20,0xa470 /* weird error? */
bne 1f /* if not, try to put a PTE */
- mfspr r3,DAR /* into the hash table */
- rlwinm r4,r23,32-13,30,30 /* MSR_PR -> _PAGE_USER */
- rlwimi r4,r20,32-23,29,29 /* DSISR_STORE -> _PAGE_RW */
+ mfspr r4,DAR /* into the hash table */
+ rlwinm r3,r20,32-15,21,21 /* DSISR_STORE -> _PAGE_RW */
#ifndef CONFIG_APUS
bl hash_page
#else
@@ -364,9 +364,8 @@
#endif /* CONFIG_PPC64BRIDGE */
andis. r0,r23,0x4000 /* no pte found? */
beq 1f /* if so, try to put a PTE */
- mr r3,r22 /* into the hash table */
- rlwinm r4,r23,32-13,30,30 /* MSR_PR -> _PAGE_USER */
- mr r20,r23 /* SRR1 has reason bits */
+ li r3,0 /* into the hash table */
+ mr r4,r22 /* SRR0 is fault address */
#ifndef CONFIG_APUS
bl hash_page
#else
@@ -519,10 +518,13 @@
lis r1,KERNELBASE@h /* check if kernel address */
cmplw 0,r3,r1
mfspr r2,SPRG3
+ li r1,_PAGE_USER|_PAGE_PRESENT /* low addresses tested as user */
lwz r2,PGDIR(r2)
blt+ 112f
lis r2,swapper_pg_dir@ha /* if kernel address, use */
addi r2,r2,swapper_pg_dir@l /* kernel page table */
+ mfspr r1,SRR1 /* and MSR_PR bit from SRR1 */
+ rlwinm r1,r1,32-12,29,29 /* shift MSR_PR to _PAGE_USER posn */
112: tophys(r2,r2)
rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */
lwz r2,0(r2) /* get pmd entry */
@@ -530,21 +532,23 @@
beq- InstructionAddressInvalid /* return if no mapping */
tophys(r2,r2)
rlwimi r2,r3,22,20,29 /* insert next 10 bits of address */
- lwz r1,0(r2) /* get linux-style pte */
- /* setup access flags in r3 */
- mfmsr r3
- rlwinm r3,r3,32-13,30,30 /* MSR_PR -> _PAGE_USER */
- ori r3,r3,1 /* set _PAGE_PRESENT bit in access */
- andc. r3,r3,r1 /* check access & ~permission */
+ lwz r3,0(r2) /* get linux-style pte */
+ andc. r1,r1,r3 /* check access & ~permission */
bne- InstructionAddressInvalid /* return if access not permitted */
- ori r1,r1,0x100 /* set _PAGE_ACCESSED in pte */
- stw r1,0(r2) /* update PTE (accessed bit) */
+ ori r3,r3,_PAGE_ACCESSED /* set _PAGE_ACCESSED in pte */
+ /*
+ * NOTE! We are assuming this is not an SMP system, otherwise
+ * we would need to update the pte atomically with lwarx/stwcx.
+ */
+ stw r3,0(r2) /* update PTE (accessed bit) */
/* Convert linux-style PTE to low word of PPC-style PTE */
- /* this computation could be done better -- Cort */
- rlwinm r3,r1,32-9,31,31 /* _PAGE_HWWRITE -> PP lsb */
- rlwimi r1,r1,32-1,31,31 /* _PAGE_USER -> PP (both bits now) */
- ori r3,r3,0xe04 /* clear out reserved bits */
- andc r1,r1,r3 /* PP=2 or 0, when _PAGE_HWWRITE */
+ rlwinm r1,r3,32-10,31,31 /* _PAGE_RW -> PP lsb */
+ rlwinm r2,r3,32-7,31,31 /* _PAGE_DIRTY -> PP lsb */
+ and r1,r1,r2 /* writable if _RW and _DIRTY */
+ rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
+ rlwimi r3,r3,32-1,31,31 /* _PAGE_USER -> PP lsb */
+ ori r1,r1,0xe14 /* clear out reserved bits and M */
+ andc r1,r3,r1 /* PP = user? (rw&dirty? 2: 3): 0 */
mtspr RPA,r1
mfspr r3,IMISS
tlbli r3
@@ -569,7 +573,6 @@
mfmsr r0 /* Restore "normal" registers */
xoris r0,r0,MSR_TGPR>>16
mtcrf 0x80,r3 /* Restore CR0 */
- SYNC /* Some chip revs have problems here... */
mtmsr r0
b InstructionAccess
@@ -590,10 +593,13 @@
lis r1,KERNELBASE@h /* check if kernel address */
cmplw 0,r3,r1
mfspr r2,SPRG3
+ li r1,_PAGE_USER|_PAGE_PRESENT /* low addresses tested as user */
lwz r2,PGDIR(r2)
blt+ 112f
lis r2,swapper_pg_dir@ha /* if kernel address, use */
addi r2,r2,swapper_pg_dir@l /* kernel page table */
+ mfspr r1,SRR1 /* and MSR_PR bit from SRR1 */
+ rlwinm r1,r1,32-12,29,29 /* shift MSR_PR to _PAGE_USER posn */
112: tophys(r2,r2)
rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */
lwz r2,0(r2) /* get pmd entry */
@@ -601,22 +607,23 @@
beq- DataAddressInvalid /* return if no mapping */
tophys(r2,r2)
rlwimi r2,r3,22,20,29 /* insert next 10 bits of address */
- lwz r1,0(r2) /* get linux-style pte */
- /* setup access flags in r3 */
- mfmsr r3
- rlwinm r3,r3,32-13,30,30 /* MSR_PR -> _PAGE_USER */
- ori r3,r3,1 /* set _PAGE_PRESENT bit in access */
- /* save r2 and use it as scratch for the andc. */
- andc. r3,r3,r1 /* check access & ~permission */
+ lwz r3,0(r2) /* get linux-style pte */
+ andc. r1,r1,r3 /* check access & ~permission */
bne- DataAddressInvalid /* return if access not permitted */
- ori r1,r1,0x100 /* set _PAGE_ACCESSED in pte */
- stw r1,0(r2) /* update PTE (accessed bit) */
+ ori r3,r3,_PAGE_ACCESSED /* set _PAGE_ACCESSED in pte */
+ /*
+ * NOTE! We are assuming this is not an SMP system, otherwise
+ * we would need to update the pte atomically with lwarx/stwcx.
+ */
+ stw r3,0(r2) /* update PTE (accessed bit) */
/* Convert linux-style PTE to low word of PPC-style PTE */
- /* this computation could be done better -- Cort */
- rlwinm r3,r1,32-9,31,31 /* _PAGE_HWWRITE -> PP lsb */
- rlwimi r1,r1,32-1,31,31 /* _PAGE_USER -> PP (both bits now) */
- ori r3,r3,0xe04 /* clear out reserved bits */
- andc r1,r1,r3 /* PP=2 or 0, when _PAGE_HWWRITE */
+ rlwinm r1,r3,32-10,31,31 /* _PAGE_RW -> PP lsb */
+ rlwinm r2,r3,32-7,31,31 /* _PAGE_DIRTY -> PP lsb */
+ and r1,r1,r2 /* writable if _RW and _DIRTY */
+ rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
+ rlwimi r3,r3,32-1,31,31 /* _PAGE_USER -> PP lsb */
+ ori r1,r1,0xe14 /* clear out reserved bits and M */
+ andc r1,r3,r1 /* PP = user? (rw&dirty? 2: 3): 0 */
mtspr RPA,r1
mfspr r3,DMISS
tlbld r3
@@ -639,7 +646,6 @@
mfmsr r0 /* Restore "normal" registers */
xoris r0,r0,MSR_TGPR>>16
mtcrf 0x80,r3 /* Restore CR0 */
- SYNC /* Some chip revs have problems here... */
mtmsr r0
b DataAccess
@@ -660,10 +666,13 @@
lis r1,KERNELBASE@h /* check if kernel address */
cmplw 0,r3,r1
mfspr r2,SPRG3
+ li r1,_PAGE_RW|_PAGE_USER|_PAGE_PRESENT /* access flags */
lwz r2,PGDIR(r2)
blt+ 112f
lis r2,swapper_pg_dir@ha /* if kernel address, use */
addi r2,r2,swapper_pg_dir@l /* kernel page table */
+ mfspr r1,SRR1 /* and MSR_PR bit from SRR1 */
+ rlwinm r1,r1,32-12,29,29 /* shift MSR_PR to _PAGE_USER posn */
112: tophys(r2,r2)
rlwimi r2,r3,12,20,29 /* insert top 10 bits of address */
lwz r2,0(r2) /* get pmd entry */
@@ -671,22 +680,19 @@
beq- DataAddressInvalid /* return if no mapping */
tophys(r2,r2)
rlwimi r2,r3,22,20,29 /* insert next 10 bits of address */
- lwz r1,0(r2) /* get linux-style pte */
- /* setup access flags in r3 */
- mfmsr r3
- rlwinm r3,r3,32-13,30,30 /* MSR_PR -> _PAGE_USER */
- ori r3,r3,0x5 /* _PAGE_PRESENT|_PAGE_RW */
- /* save r2 and use it as scratch for the andc. */
- andc. r3,r3,r1 /* check access & ~permission */
+ lwz r3,0(r2) /* get linux-style pte */
+ andc. r1,r1,r3 /* check access & ~permission */
bne- DataAddressInvalid /* return if access not permitted */
- ori r1,r1,0x384 /* set _PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_RW|_PAGE_HWWRITE in pte */
- stw r1,0(r2) /* update PTE (accessed bit) */
+ ori r3,r3,_PAGE_ACCESSED|_PAGE_DIRTY
+ /*
+ * NOTE! We are assuming this is not an SMP system, otherwise
+ * we would need to update the pte atomically with lwarx/stwcx.
+ */
+ stw r3,0(r2) /* update PTE (accessed/dirty bits) */
/* Convert linux-style PTE to low word of PPC-style PTE */
- /* this computation could be done better -- Cort */
- rlwinm r3,r1,32-9,31,31 /* _PAGE_HWWRITE -> PP lsb */
- rlwimi r1,r1,32-1,31,31 /* _PAGE_USER -> PP (both bits now) */
- ori r3,r3,0xe04 /* clear out reserved bits */
- andc r1,r1,r3 /* PP=2 or 0, when _PAGE_HWWRITE */
+ rlwimi r3,r3,32-1,30,30 /* _PAGE_USER -> PP msb */
+ li r1,0xe15 /* clear out reserved bits and M */
+ andc r1,r3,r1 /* PP = user? 2: 0 */
mtspr RPA,r1
mfspr r3,DMISS
tlbld r3
@@ -915,7 +921,6 @@
*/
mfmsr r5
oris r5,r5,MSR_VEC@h
- SYNC
mtmsr r5 /* enable use of AltiVec now */
isync
/*
@@ -1042,6 +1047,7 @@
ori r5,r5,MSR_FP
SYNC
mtmsr r5 /* enable use of fpu now */
+ SYNC
isync
cmpi 0,r3,0
beqlr- /* if no previous owner, done */
@@ -1342,7 +1348,7 @@
lis r3,0x2000 /* Ku = 1, VSID = 0 */
li r4,0
3: mtsrin r3,r4
- addi r3,r3,1 /* increment VSID */
+ addi r3,r3,0x111 /* increment VSID */
addis r4,r4,0x1000 /* address of next segment */
bdnz 3b
#ifndef CONFIG_POWER4
@@ -1449,7 +1455,8 @@
* Set up the segment registers for a new context.
*/
_GLOBAL(set_context)
- rlwinm r3,r3,4,8,27 /* VSID = context << 4 */
+ mulli r3,r3,897 /* multiply context by skew factor */
+ rlwinm r3,r3,4,8,27 /* VSID = (context & 0xfffff) << 4 */
addis r3,r3,0x6000 /* Set Ks, Ku bits */
li r0,12 /* TASK_SIZE / SEGMENT_SIZE */
mtctr r0
@@ -1459,7 +1466,8 @@
slbie r4
#endif /* CONFIG_PPC64BRIDGE */
mtsrin r3,r4
- addi r3,r3,1 /* next VSID */
+ addi r3,r3,0x111 /* next VSID */
+ rlwinm r3,r3,0,8,3 /* clear out any overflow from VSID field */
addis r4,r4,0x1000 /* address of next segment */
bdnz 3b
SYNC
Index: irq.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/irq.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- irq.c 2001/06/10 00:17:27 1.8
+++ irq.c 2001/07/08 16:59:54 1.9
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.irq.c 1.23 05/17/01 18:14:21 cort
+ * BK Id: SCCS/s.irq.c 1.29 07/03/01 15:00:30 paulus
*/
/*
* arch/ppc/kernel/irq.c
@@ -531,26 +531,25 @@
{
int cpu = smp_processor_id();
int irq;
- hardirq_enter( cpu );
+ hardirq_enter(cpu);
/* every arch is required to have a get_irq -- Cort */
- irq = ppc_md.get_irq( regs );
+ irq = ppc_md.get_irq(regs);
- if ( irq < 0 )
- {
+ if (irq >= 0) {
+ ppc_irq_dispatch_handler( regs, irq );
+ } else if (irq != -2) {
/* -2 means ignore, already handled */
- if (irq != -2)
- {
+ if (ppc_spurious_interrupts < 10)
printk(KERN_DEBUG "Bogus interrupt %d from PC = %lx\n",
irq, regs->nip);
- /* That's not SMP safe ... but who cares ? */
- ppc_spurious_interrupts++;
- }
- goto out;
+ /* That's not SMP safe ... but who cares ? */
+ ppc_spurious_interrupts++;
}
- ppc_irq_dispatch_handler( regs, irq );
-out:
hardirq_exit( cpu );
+
+ if (softirq_pending(cpu))
+ do_softirq();
return 1; /* lets ret_from_int know we can do checks */
}
Index: pci.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/pci.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- pci.c 2001/06/10 00:17:27 1.11
+++ pci.c 2001/07/08 16:59:54 1.12
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.pci.c 1.21 05/21/01 01:31:30 cort
+ * BK Id: SCCS/s.pci.c 1.27 07/03/01 15:00:30 paulus
*/
/*
* Common pmac/prep/chrp pci routines. -- Cort
@@ -40,11 +40,10 @@
unsigned long isa_mem_base = 0;
unsigned long pci_dram_offset = 0;
-static u8* pci_to_OF_bus_map;
-
static void pcibios_fixup_resources(struct pci_dev* dev);
#ifdef CONFIG_ALL_PPC
static void pcibios_fixup_cardbus(struct pci_dev* dev);
+static u8* pci_to_OF_bus_map;
#endif
/* By default, we don't re-assign bus numbers. We do this only on
@@ -73,8 +72,13 @@
u32 new, check;
int reg;
struct pci_controller* hose = dev->sysdata;
+ unsigned long io_offset;
new = res->start;
+ if (hose && res->flags & IORESOURCE_IO) {
+ io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
+ new -= io_offset;
+ }
if (hose && res->flags & IORESOURCE_MEM)
new -= hose->pci_mem_offset;
new |= (res->flags & PCI_REGION_FLAG_MASK);
@@ -98,40 +102,43 @@
}
static void
-pcibios_fixup_resources(struct pci_dev* dev)
+pcibios_fixup_resources(struct pci_dev *dev)
{
- struct pci_controller* hose =
- (struct pci_controller *)dev->sysdata;
+ struct pci_controller* hose = (struct pci_controller *)dev->sysdata;
int i;
+ unsigned long offset;
+
if (!hose) {
- printk("No hose for PCI dev %x.%x !\n", dev->bus->number, dev->devfn >> 3);
+ printk(KERN_ERR "No hose for PCI dev %s!\n", dev->slot_name);
return;
}
for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
struct resource *res = dev->resource + i;
- if (!res->start)
+ if (!res->start || !res->flags)
+ continue;
+ if (res->end == 0xffffffff) {
+ DBG("PCI:%s Resource %d [%08lx-%08lx] is unassigned\n",
+ dev->slot_name, i, res->start, res->end);
+ res->end -= res->start;
+ res->start = 0;
continue;
- if ((res->flags & IORESOURCE_MEM) && hose->pci_mem_offset) {
- res->start += hose->pci_mem_offset;
- res->end += hose->pci_mem_offset;
+ }
+ offset = 0;
+ if (res->flags & IORESOURCE_MEM) {
+ offset = hose->pci_mem_offset;
+ } else if (res->flags & IORESOURCE_IO) {
+ offset = (unsigned long) hose->io_base_virt
+ - isa_io_base;
+ }
+ if (offset != 0) {
+ res->start += offset;
+ res->end += offset;
#ifdef DEBUG
- printk("Fixup mem res, dev: %x.%x, res_start: %lx->%lx\n",
- dev->bus->number, dev->devfn>>3, res->start-hose->pci_mem_offset,
- res->start);
+ printk("Fixup res %d (%lx) of dev %s: %lx -> %lx\n",
+ i, res->flags, dev->slot_name,
+ res->start - offset, res->start);
#endif
}
-
- if ((res->flags & IORESOURCE_IO)
- && (unsigned long) hose->io_base_virt != isa_io_base) {
- unsigned long offs;
-
- offs = (unsigned long)hose->io_base_virt - isa_io_base;
- res->start += offs;
- res->end += offs;
- printk("Fixup IO res, dev: %x.%x, res_start: %lx->%lx\n",
- dev->bus->number, dev->devfn>>3,
- res->start - offs, res->start);
- }
}
}
@@ -228,22 +235,27 @@
{
struct list_head *ln;
struct pci_bus *bus;
- struct pci_dev *dev;
- int idx;
- struct resource *r, *pr;
+ int i;
+ struct resource *res, *pr;
/* Depth-First Search on bus tree */
- for (ln=bus_list->next; ln != bus_list; ln=ln->next) {
+ for (ln = bus_list->next; ln != bus_list; ln=ln->next) {
bus = pci_bus_b(ln);
- if ((dev = bus->self)) {
- for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) {
- r = &dev->resource[idx];
- if (!r->start)
- continue;
- pr = pci_find_parent_resource(dev, r);
- if (!pr || request_resource(pr, r) < 0)
- printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, dev->slot_name);
- }
+ for (i = 0; i < 4; ++i) {
+ if ((res = bus->resource[i]) == NULL || !res->flags)
+ continue;
+ if (bus->parent == NULL)
+ pr = (res->flags & IORESOURCE_IO)?
+ &ioport_resource: &iomem_resource;
+ else
+ pr = pci_find_parent_resource(bus->self, res);
+
+ if (pr && request_resource(pr, res) == 0)
+ continue;
+ printk(KERN_ERR "PCI: Cannot allocate resource region "
+ "%d of PCI bridge %d\n", i, bus->number);
+ DBG("PCI: resource is %lx..%lx (%lx), parent %p\n",
+ res->start, res->end, res->flags, pr);
}
pcibios_allocate_bus_resources(&bus->children);
}
@@ -253,13 +265,15 @@
{
struct resource *pr, *r = &dev->resource[idx];
- DBG("PCI:%x:%x:%x: Resource %08lx-%08lx (f=%lx)\n",
- dev->bus->number, dev->devfn >> 3, dev->devfn & 7,
- r->start, r->end, r->flags);
+ DBG("PCI:%s: Resource %d: %08lx-%08lx (f=%lx)\n",
+ dev->slot_name, idx, r->start, r->end, r->flags);
pr = pci_find_parent_resource(dev, r);
if (!pr || request_resource(pr, r) < 0) {
printk(KERN_ERR "PCI: Cannot allocate resource region %d"
" of device %s\n", idx, dev->slot_name);
+ if (pr)
+ DBG("PCI: parent is %p: %08lx-%08lx (f=%lx)\n",
+ pr, pr->start, pr->end, pr->flags);
/* We'll assign a new address later */
r->end -= r->start;
r->start = 0;
@@ -276,20 +290,12 @@
pci_for_each_dev(dev) {
pci_read_config_word(dev, PCI_COMMAND, &command);
- for(idx = 0; idx < 6; idx++) {
+ for (idx = 0; idx < 6; idx++) {
r = &dev->resource[idx];
if (r->parent) /* Already allocated */
continue;
if (!r->start) /* Not assigned at all */
continue;
- if (r->end == 0xffffffff) {
- /* LongTrail OF quirk: unassigned */
- DBG("PCI: Resource %08lx-%08lx was unassigned\n", r->start, r->end);
- r->end -= r->start;
- r->start = 0;
- continue;
- }
-
if (r->flags & IORESOURCE_IO)
disabled = !(command & PCI_COMMAND_IO);
else
@@ -306,7 +312,8 @@
DBG("PCI: Switching off ROM of %s\n", dev->slot_name);
r->flags &= ~PCI_ROM_ADDRESS_ENABLE;
pci_read_config_dword(dev, dev->rom_base_reg, ®);
- pci_write_config_dword(dev, dev->rom_base_reg, reg & ~PCI_ROM_ADDRESS_ENABLE);
+ pci_write_config_dword(dev, dev->rom_base_reg,
+ reg & ~PCI_ROM_ADDRESS_ENABLE);
}
}
}
@@ -325,21 +332,14 @@
if (!class || class == PCI_CLASS_BRIDGE_HOST)
continue;
- for(idx=0; idx<6; idx++) {
+ for (idx = 0; idx < 6; idx++) {
r = &dev->resource[idx];
-#if 0 /* we don't need this PC-ism */
- /*
- * Don't touch IDE controllers and I/O ports of video cards!
- */
- if ((class == PCI_CLASS_STORAGE_IDE && idx < 4) ||
- (class == PCI_CLASS_DISPLAY_VGA && (r->flags & IORESOURCE_IO)))
- continue;
-#endif
/*
- * We shall assign a new address to this resource, either because
- * the BIOS (sic) forgot to do so or because we have decided the old
- * address was unusable for some reason.
+ * We shall assign a new address to this resource,
+ * either because the BIOS (sic) forgot to do so
+ * or because we have decided the old address was
+ * unusable for some reason.
*/
if (!r->start && r->end &&
(!ppc_md.pcibios_enable_device_hook ||
@@ -347,13 +347,13 @@
pci_assign_resource(dev, idx);
}
- if (0) { /* don't assign ROMs */
- r = &dev->resource[PCI_ROM_RESOURCE];
- r->end -= r->start;
- r->start = 0;
- if (r->end)
- pci_assign_resource(dev, PCI_ROM_RESOURCE);
- }
+#if 0 /* don't assign ROMs */
+ r = &dev->resource[PCI_ROM_RESOURCE];
+ r->end -= r->start;
+ r->start = 0;
+ if (r->end)
+ pci_assign_resource(dev, PCI_ROM_RESOURCE);
+#endif
}
}
@@ -496,10 +496,15 @@
&& ((reg[0] >> 16) & 0xff) == bus)
return node;
- /* For PCI<->PCI bridges or CardBus bridges, we go down */
+ /* For PCI<->PCI bridges or CardBus bridges, we go down
+ * Note: some OFs create a parent node "multifunc-device" as
+ * a fake root for all functions of a multi-function device,
+ * we go down them as well.
+ */
class_code = (unsigned int *) get_property(node, "class-code", 0);
- if (!class_code || ((*class_code >> 8) != PCI_CLASS_BRIDGE_PCI &&
- (*class_code >> 8) != PCI_CLASS_BRIDGE_CARDBUS))
+ if ((!class_code || ((*class_code >> 8) != PCI_CLASS_BRIDGE_PCI &&
+ (*class_code >> 8) != PCI_CLASS_BRIDGE_CARDBUS)) &&
+ strcmp(node->name, "multifunc-device"))
continue;
sub_node = scan_OF_childs_for_device(node->child, bus, dev_fn);
if (sub_node)
@@ -682,9 +687,9 @@
{
struct pci_controller *hose;
struct pci_bus *bus;
- int next_busno, i;
+ int next_busno;
- printk("PCI: Probing PCI hardware\n");
+ printk(KERN_INFO "PCI: Probing PCI hardware\n");
/* Scan all of the recorded PCI controllers. */
for (next_busno = 0, hose = hose_head; hose; hose = hose->next) {
@@ -692,18 +697,6 @@
hose->first_busno = next_busno;
hose->last_busno = 0xff;
bus = pci_scan_bus(hose->first_busno, hose->ops, hose);
- if (hose->io_resource.flags) {
- unsigned long offs;
-
- offs = (unsigned long)hose->io_base_virt - isa_io_base;
- hose->io_resource.start += offs;
- hose->io_resource.end += offs;
- bus->resource[0] = &hose->io_resource;
- }
- for (i = 0; i < 3; ++i)
- if (hose->mem_resources[i].flags)
- bus->resource[i+1] = &hose->mem_resources[i];
- hose->bus = bus;
hose->last_busno = bus->subordinate;
if (pci_assign_all_busses || next_busno <= hose->last_busno)
next_busno = hose->last_busno+1;
@@ -728,28 +721,8 @@
pcibios_allocate_resources(0);
pcibios_allocate_resources(1);
pcibios_assign_resources();
-
-#ifdef CONFIG_BLK_DEV_IDE
- /* OF fails to initialize IDE controllers on macs
- * (and maybe other machines)
- *
- * Ideally, this should be moved to the IDE layer, but we need
- * to check specifically with Andre Hedrick how to do it cleanly
- * since the common IDE code seem to care about the fact that the
- * BIOS may have disabled a controller.
- *
- * -- BenH
- */
- if (_machine == _MACH_Pmac) {
- struct pci_dev *dev;
- pci_for_each_dev(dev)
- {
- if ((dev->class >> 16) == PCI_BASE_CLASS_STORAGE)
- pci_enable_device(dev);
- }
- }
-#endif /* CONFIG_BLK_DEV_IDE */
+ /* Call machine dependent post-init code */
if (ppc_md.pcibios_after_init)
ppc_md.pcibios_after_init();
}
@@ -777,21 +750,62 @@
void __init pcibios_fixup_bus(struct pci_bus *bus)
{
- struct pci_controller *hose;
+ struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
+ unsigned long io_offset;
+ struct resource *res;
+ int i;
- pci_read_bridge_bases(bus);
+ io_offset = (unsigned long)hose->io_base_virt - isa_io_base;
+ if (bus->parent == NULL) {
+ /* This is a host bridge - fill in its resources */
+ hose->bus = bus;
- hose = pci_bus_to_hose(bus->number);
+ bus->resource[0] = res = &hose->io_resource;
+ if (!res->flags) {
+ if (io_offset)
+ printk(KERN_ERR "I/O resource not set for host"
+ " bridge %d\n", hose->index);
+ res->start = 0;
+ res->end = IO_SPACE_LIMIT;
+ res->flags = IORESOURCE_IO;
+ }
+ res->start += io_offset;
+ res->end += io_offset;
- /* Apply pci_mem_offset to bridge mem resource */
- if (hose->first_busno != bus->number)
- if (bus->resource[1]->start && (bus->resource[1]->end != -1))
- {
- bus->resource[1]->start += hose->pci_mem_offset;
- bus->resource[1]->end += hose->pci_mem_offset;
+ for (i = 0; i < 3; ++i) {
+ res = &hose->mem_resources[i];
+ if (!res->flags) {
+ if (i > 0)
+ continue;
+ printk(KERN_ERR "Memory resource not set for "
+ "host bridge %d\n", hose->index);
+ res->start = hose->pci_mem_offset;
+ res->end = ~0U;
+ res->flags = IORESOURCE_MEM;
+ }
+ bus->resource[i+1] = res;
}
+ } else {
+ /* This is a subordinate bridge */
+ pci_read_bridge_bases(bus);
- if ( ppc_md.pcibios_fixup_bus )
+ for (i = 0; i < 4; ++i) {
+ if ((res = bus->resource[i]) == NULL)
+ continue;
+ if (!res->flags)
+ continue;
+ if (io_offset && (res->flags & IORESOURCE_IO)) {
+ res->start += io_offset;
+ res->end += io_offset;
+ } else if (hose->pci_mem_offset
+ && (res->flags & IORESOURCE_MEM)) {
+ res->start += hose->pci_mem_offset;
+ res->end += hose->pci_mem_offset;
+ }
+ }
+ }
+
+ if (ppc_md.pcibios_fixup_bus)
ppc_md.pcibios_fixup_bus(bus);
}
@@ -883,26 +897,17 @@
return hose->pci_mem_offset;
}
-#ifdef CONFIG_POWER4
-extern unsigned long pci_address_offset(int, unsigned int);
-#endif /* CONFIG_POWER4 */
-
unsigned long
pci_resource_to_bus(struct pci_dev *pdev, struct resource *res)
{
/* Hack alert again ! See comments in chrp_pci.c
*/
-#ifdef CONFIG_POWER4
- unsigned long offset = pci_address_offset(pdev->bus->number, res->flags);
- return res->start - offset;
-#else /* CONFIG_POWER4 */
struct pci_controller* hose =
(struct pci_controller *)pdev->sysdata;
if (hose && res->flags & IORESOURCE_MEM)
return res->start - hose->pci_mem_offset;
/* We may want to do something with IOs here... */
return res->start;
-#endif
}
/*
@@ -1074,27 +1079,19 @@
unsigned long
pci_phys_to_bus(unsigned long pa, int busnr)
{
-#ifdef CONFIG_POWER4
- return pa - pci_address_offset(busnr, IORESOURCE_MEM);
-#else /* CONFIG_POWER4 */
struct pci_controller* hose = pci_bus_to_hose(busnr);
if (!hose)
return pa;
return pa - hose->pci_mem_offset;
-#endif
}
unsigned long
pci_bus_to_phys(unsigned int ba, int busnr)
{
-#ifdef CONFIG_POWER4
- return ba + pci_address_offset(dev->bus->number, IORESOURCE_MEM);
-#else /* CONFIG_POWER4 */
struct pci_controller* hose = pci_bus_to_hose(busnr);
if (!hose)
return ba;
return ba + hose->pci_mem_offset;
-#endif
}
/* Provide information on locations of various I/O regions in physical
Index: ppc-stub.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/ppc-stub.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ppc-stub.c 2001/06/10 00:17:27 1.6
+++ ppc-stub.c 2001/07/08 16:59:54 1.7
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.ppc-stub.c 1.6 05/17/01 18:14:21 cort
+ * BK Id: SCCS/s.ppc-stub.c 1.8 06/05/01 21:22:03 paulus
*/
/*
* ppc-stub.c: KGDB support for the Linux kernel.
Index: ppc_ksyms.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/ppc_ksyms.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- ppc_ksyms.c 2001/06/10 00:17:27 1.20
+++ ppc_ksyms.c 2001/07/08 16:59:54 1.21
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.ppc_ksyms.c 1.31 05/18/01 08:18:10 patch
+ * BK Id: SCCS/s.ppc_ksyms.c 1.37 07/03/01 15:00:30 paulus
*/
#include <linux/config.h>
#include <linux/module.h>
@@ -366,14 +366,12 @@
#endif /* CONFIG_8xx */
EXPORT_SYMBOL(ret_to_user_hook);
-EXPORT_SYMBOL(do_softirq);
EXPORT_SYMBOL(next_mmu_context);
EXPORT_SYMBOL(set_context);
-EXPORT_SYMBOL(mmu_context_overflow);
-EXPORT_SYMBOL(flush_hash_page); /* For MOL */
EXPORT_SYMBOL(handle_mm_fault); /* For MOL */
EXPORT_SYMBOL_NOVERS(disarm_decr);
#if !defined(CONFIG_8xx) && !defined(CONFIG_4xx)
+EXPORT_SYMBOL(flush_hash_page); /* For MOL */
extern long *intercept_table;
EXPORT_SYMBOL(intercept_table);
#endif
Index: setup.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/setup.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- setup.c 2001/06/10 00:17:27 1.14
+++ setup.c 2001/07/08 16:59:54 1.15
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.setup.c 1.32 05/23/01 00:38:42 cort
+ * BK Id: SCCS/s.setup.c 1.45 07/03/01 15:00:30 paulus
*/
/*
* Common prep/pmac/chrp boot and setup code.
@@ -36,14 +36,14 @@
#include <asm/mpc8260.h>
#include <asm/immap_8260.h>
#endif
+#ifdef CONFIG_4xx
+#include <asm/ppc4xx.h>
+#endif
#include <asm/bootx.h>
#include <asm/machdep.h>
#include <asm/feature.h>
#include <asm/uaccess.h>
-#ifdef CONFIG_OAK
-#include "oak_setup.h"
-#endif /* CONFIG_OAK */
extern void apus_init(unsigned long r3,
unsigned long r4,
@@ -337,7 +337,7 @@
* Assume here that all clock rates are the same in a
* smp system. -- Cort
*/
-#if !defined(CONFIG_4xx) && !defined(CONFIG_8xx) && !defined(CONFIG_8260)
+#if defined(CONFIG_ALL_PPC)
if ( have_of )
{
struct device_node *cpu_node;
@@ -361,7 +361,7 @@
len += sprintf(len+buffer, "clock\t\t: %dMHz\n",
*fp / 1000000);
}
-#endif /* !CONFIG_4xx && !CONFIG_8xx */
+#endif /* CONFIG_ALL_PPC */
if (ppc_md.setup_residual != NULL)
{
@@ -384,11 +384,12 @@
break;
}
- len += sprintf(len+buffer, "revision\t: %hd.%hd\n", maj, min);
+ len += sprintf(len+buffer, "revision\t: %hd.%hd (pvr %04x %04x)\n",
+ maj, min, PVR_VER(pvr), PVR_REV(pvr));
len += sprintf(buffer+len, "bogomips\t: %lu.%02lu\n",
- (CD(loops_per_jiffy)+2500)/(500000/HZ),
- (CD(loops_per_jiffy)+2500)/(5000/HZ) % 100);
+ CD(loops_per_jiffy)/(500000/HZ),
+ CD(loops_per_jiffy)/(5000/HZ) % 100);
bogosum += CD(loops_per_jiffy);
}
@@ -396,8 +397,8 @@
if ( i )
len += sprintf(buffer+len, "\n");
len += sprintf(buffer+len,"total bogomips\t: %lu.%02lu\n",
- (bogosum+2500)/(500000/HZ),
- (bogosum+2500)/(5000/HZ) % 100);
+ bogosum/(500000/HZ),
+ bogosum/(5000/HZ) % 100);
#endif /* CONFIG_SMP */
/*
@@ -451,6 +452,10 @@
* We're called here very early in the boot. We determine the machine
* type and call the appropriate low-level setup functions.
* -- Cort <co...@fs...>
+ *
+ * Note that the kernel may be running at an address which is different
+ * from the address that it was linked at, so we must use RELOC/PTRRELOC
+ * to access static data (including strings). -- paulus
*/
__init
unsigned long
@@ -483,8 +488,8 @@
* for now, don't use bootinfo because it breaks yaboot 0.5
* and assume that if we didn't find a magic number, we have OF
*/
- phys = prom_init( r3, r4, (prom_entry)r5);
-#endif
+ phys = prom_init(r3, r4, (prom_entry)r5);
+#endif
return phys;
}
@@ -798,7 +803,7 @@
ppc_md.setup_arch();
if ( ppc_md.progress ) ppc_md.progress("arch: exit", 0x3eab);
-#ifdef CONFIG_PCI
+#if defined(CONFIG_PCI) && defined(CONFIG_ALL_PPC)
/* We create the "pci-OF-bus-map" property now so it appear in the
* /proc device tree
*/
@@ -814,7 +819,7 @@
prom_add_property(find_path_device("/"), of_prop);
}
}
-#endif /* CONFIG_PCI */
+#endif /* CONFIG_PCI && CONFIG_ALL_PPC */
paging_init();
sort_exception_table();
Index: time.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/ppc/kernel/time.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- time.c 2001/06/10 00:17:27 1.11
+++ time.c 2001/07/08 16:59:54 1.12
@@ -1,5 +1,5 @@
/*
- * BK Id: SCCS/s.time.c 1.15 05/17/01 18:14:22 cort
+ * BK Id: SCCS/s.time.c 1.19 06/09/01 12:06:37 paulus
*/
/*
* Common time routines among all ppc machines.
@@ -211,6 +211,10 @@
ppc_md.heartbeat();
hardirq_exit(cpu);
+
+ if (softirq_pending(cpu))
+ do_softirq();
+
return 1; /* lets ret_from_int know we can do checks */
}
--- hashtable.S DELETED ---
|
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:27
|
Update of /cvsroot/linux-apus/2.3/arch/ppc/configs In directory usw-pr-cvs1:/tmp/cvs-serv11606/arch/ppc/configs Modified Files: apus_defconfig Log Message: conflict fixes from import bitkeeper (2.4.6) Index: apus_defconfig =================================================================== RCS file: /cvsroot/linux-apus/2.3/arch/ppc/configs/apus_defconfig,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- apus_defconfig 2001/06/10 00:17:27 1.7 +++ apus_defconfig 2001/07/08 16:59:54 1.8 @@ -28,8 +28,8 @@ # CONFIG_8xx is not set # CONFIG_8260 is not set # CONFIG_ALL_PPC is not set -# CONFIG_GEMINI is not set CONFIG_APUS=y +# CONFIG_GEMINI is not set # CONFIG_PPC601_SYNC_FIX is not set # CONFIG_SMP is not set # CONFIG_ALTIVEC is not set @@ -365,12 +365,12 @@ # CONFIG_EQUALIZER is not set CONFIG_TUN=m # CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set @@ -380,12 +380,16 @@ CONFIG_NE2K_ZORRO=y CONFIG_A2065=y CONFIG_HYDRA=y +# CONFIG_SUNLANCE is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_HP100 is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set @@ -395,6 +399,8 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -637,7 +643,6 @@ CONFIG_ROMFS_FS=y CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -749,6 +754,7 @@ # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set CONFIG_SOUND_OSS=m CONFIG_SOUND_TRACEINIT=y CONFIG_SOUND_DMAP=y @@ -785,6 +791,11 @@ # USB support # # CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set # # Kernel hacking |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:27
|
Update of /cvsroot/linux-apus/2.3/arch/ppc In directory usw-pr-cvs1:/tmp/cvs-serv11606/arch/ppc Modified Files: Makefile defconfig Log Message: conflict fixes from import bitkeeper (2.4.6) Index: Makefile =================================================================== RCS file: /cvsroot/linux-apus/2.3/arch/ppc/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile 2001/06/10 00:17:27 1.6 +++ Makefile 2001/07/08 16:59:54 1.7 @@ -1,4 +1,4 @@ -# BK Id: SCCS/s.Makefile 1.13 05/21/01 00:48:24 cort +# BK Id: SCCS/s.Makefile 1.17 07/03/01 13:48:12 trini # # This file is included by the global makefile so that you can add your own # architecture-specific flags and dependencies. Remember to do have actions @@ -96,13 +96,6 @@ checks: @$(MAKE) -C arch/$(ARCH)/kernel checks -BOOT_TARGETS = zImage znetboot.initrd zImage.initrd - -ifdef CONFIG_4xx -$(BOOT_TARGETS): $(CHECKS) vmlinux - @$(MAKETREEBOOT) $@ -endif - BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd $(BOOT_TARGETS): $(CHECKS) vmlinux @@ -119,4 +112,4 @@ archmrproper: archdep: - $(MAKEBOOT) dep + $(MAKEBOOT) fastdep Index: defconfig =================================================================== RCS file: /cvsroot/linux-apus/2.3/arch/ppc/defconfig,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- defconfig 2001/06/10 00:17:27 1.9 +++ defconfig 2001/07/08 16:59:54 1.10 @@ -28,8 +28,8 @@ # CONFIG_8xx is not set # CONFIG_8260 is not set # CONFIG_ALL_PPC is not set -# CONFIG_GEMINI is not set CONFIG_APUS=y +# CONFIG_GEMINI is not set # CONFIG_PPC601_SYNC_FIX is not set # CONFIG_SMP is not set # CONFIG_ALTIVEC is not set @@ -365,12 +365,12 @@ # CONFIG_EQUALIZER is not set CONFIG_TUN=m # CONFIG_ETHERTAP is not set -# CONFIG_NET_SB1000 is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set # CONFIG_MACE is not set # CONFIG_BMAC is not set # CONFIG_GMAC is not set @@ -380,12 +380,16 @@ CONFIG_NE2K_ZORRO=y CONFIG_A2065=y CONFIG_HYDRA=y +# CONFIG_SUNLANCE is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNLANCE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set # CONFIG_HP100 is not set # CONFIG_NET_ISA is not set # CONFIG_NET_PCI is not set @@ -395,6 +399,8 @@ # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set +# CONFIG_ACENIC_OMIT_TIGON_I is not set +# CONFIG_MYRI_SBUS is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set # CONFIG_SK98LIN is not set @@ -637,7 +643,6 @@ CONFIG_ROMFS_FS=y CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -749,6 +754,7 @@ # CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_VIA82CXXX is not set +# CONFIG_MIDI_VIA82CXXX is not set CONFIG_SOUND_OSS=m CONFIG_SOUND_TRACEINIT=y CONFIG_SOUND_DMAP=y @@ -785,6 +791,11 @@ # USB support # # CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set # # Kernel hacking |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:27
|
Update of /cvsroot/linux-apus/2.3/Documentation
In directory usw-pr-cvs1:/tmp/cvs-serv11606/Documentation
Modified Files:
Configure.help
Log Message:
conflict fixes from import bitkeeper (2.4.6)
Index: Configure.help
===================================================================
RCS file: /cvsroot/linux-apus/2.3/Documentation/Configure.help,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Configure.help 2001/06/10 00:17:27 1.14
+++ Configure.help 2001/07/08 16:59:53 1.15
@@ -7537,6 +7537,40 @@
configure your card and that /etc/pcmcia/wireless.opts works :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
+Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards
+CONFIG_AIRO
+ This is the standard Linux driver to support Cisco/Aironet ISA
+ and PCI 802.11 wireless cards.
+ It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
+ - with or without encryption) as well as card before the Cisco
+ aquisition (Aironet 4500, Aironet 4800, Aironet 4800B).
+
[...1035 lines suppressed...]
say M here and read Documentation/modules.txt. The module will be
- called radio-miropcm20.o
+ called miropcm20.o
+
+miroSOUND PCM20 radio RDS user interface (EXPERIMENTAL)
+CONFIG_RADIO_MIROPCM20_RDS
+ Choose Y here if you want to see RDS/RBDS information like RadioText,
+ Programme Service name, Clock Time and date, Programme TYpe and
+ Traffic Announcement/Programme identification. You also need to say
+ Y to "miroSOUND PCM20 radio" and devfs!
+
+ It's not possible to read the raw RDS packets from the device, so
+ the driver cant provide an V4L interface for this. But the
+ availability of RDS is reported over V4L by the basic driver already.
+ Here RDS can be read from files in /dev/v4l/rds.
+
+ As module the driver will be called miropcm20-rds.o.
GemTek Radio Card
CONFIG_RADIO_GEMTEK
|
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:26
|
Update of /cvsroot/linux-apus/2.3/arch/m68k/amiga
In directory usw-pr-cvs1:/tmp/cvs-serv11606/arch/m68k/amiga
Modified Files:
amisound.c
Log Message:
conflict fixes from import bitkeeper (2.4.6)
Index: amisound.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/arch/m68k/amiga/amisound.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- amisound.c 2001/04/05 22:59:27 1.5
+++ amisound.c 2001/07/08 16:59:53 1.6
@@ -16,7 +16,7 @@
#include <asm/system.h>
#include <asm/amigahw.h>
-static u_short *snd_data = NULL;
+static unsigned short *snd_data = NULL;
static const signed char sine_data[] = {
0, 39, 75, 103, 121, 127, 121, 103, 75, 39,
0, -39, -75, -103, -121, -127, -121, -103, -75, -39
@@ -28,7 +28,7 @@
* device since it depends on htotal (for OCS/ECS/AGA)
*/
-volatile u_short amiga_audio_min_period = 124; /* Default for pre-OCS */
+volatile unsigned short amiga_audio_min_period = 124; /* Default for pre-OCS */
#define MAX_PERIOD (65535)
@@ -37,9 +37,9 @@
* Current period (set by dmasound.c)
*/
-u_short amiga_audio_period = MAX_PERIOD;
+unsigned short amiga_audio_period = MAX_PERIOD;
-static u_long clock_constant;
+static unsigned long clock_constant;
void __init amiga_init_sound(void)
{
@@ -80,7 +80,7 @@
del_timer( &sound_timer );
if (hz > 20 && hz < 32767) {
- u_long period = (clock_constant / hz);
+ unsigned long period = (clock_constant / hz);
if (period < amiga_audio_min_period)
period = amiga_audio_min_period;
@@ -90,7 +90,7 @@
/* setup pointer to data, period, length and volume */
custom.aud[2].audlc = snd_data;
custom.aud[2].audlen = sizeof(sine_data)/2;
- custom.aud[2].audper = (u_short)period;
+ custom.aud[2].audper = (unsigned short)period;
custom.aud[2].audvol = 32; /* 50% of maxvol */
if (ticks) {
|
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:26
|
Update of /cvsroot/linux-apus/2.3 In directory usw-pr-cvs1:/tmp/cvs-serv11606 Modified Files: Makefile Removed Files: ChangeSet Log Message: conflict fixes from import bitkeeper (2.4.6) Index: Makefile =================================================================== RCS file: /cvsroot/linux-apus/2.3/Makefile,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- Makefile 2001/06/10 00:17:27 1.22 +++ Makefile 2001/07/08 16:59:53 1.23 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 4 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -87,7 +87,8 @@ CPPFLAGS := -D__KERNEL__ -I$(HPATH) -CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing +CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \ + -fomit-frame-pointer -fno-strict-aliasing AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS) # @@ -127,6 +128,7 @@ DRIVERS-m := DRIVERS- := +DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o DRIVERS-y += drivers/char/char.o \ drivers/block/block.o \ @@ -155,7 +157,8 @@ DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o -DRIVERS-$(CONFIG_PCMCIA_NETCARD) += drivers/net/pcmcia/pcmcia_net.o +DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o +DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o @@ -175,8 +178,8 @@ DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o -DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o +DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o DRIVERS := $(DRIVERS-y) --- ChangeSet DELETED --- |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/mm
In directory usw-pr-cvs1:/tmp/cvs-serv11606/mm
Modified Files:
page_alloc.c
Log Message:
conflict fixes from import bitkeeper (2.4.6)
Index: page_alloc.c
===================================================================
RCS file: /cvsroot/linux-apus/2.3/mm/page_alloc.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- page_alloc.c 2001/06/10 00:17:28 1.14
+++ page_alloc.c 2001/07/08 16:59:56 1.15
@@ -268,15 +268,21 @@
return NULL;
}
+#ifndef CONFIG_DISCONTIGMEM
+struct page *_alloc_pages(unsigned int gfp_mask, unsigned long order)
+{
+ return __alloc_pages(gfp_mask, order,
+ contig_page_data.node_zonelists+(gfp_mask & GFP_ZONEMASK));
+}
+#endif
/*
* This is the 'heart' of the zoned buddy allocator:
*/
-struct page * __alloc_pages(zonelist_t *zonelist, unsigned long order)
+struct page * __alloc_pages(unsigned int gfp_mask, unsigned long order, zonelist_t *zonelist)
{
zone_t **zone;
int direct_reclaim = 0;
- unsigned int gfp_mask = zonelist->gfp_mask;
struct page * page;
/*
@@ -428,18 +434,30 @@
}
/*
* When we arrive here, we are really tight on memory.
+ * Since kswapd didn't succeed in freeing pages for us,
+ * we try to help it.
*
- * We try to free pages ourselves by:
- * - shrinking the i/d caches.
- * - reclaiming unused memory from the slab caches.
- * - swapping/syncing pages to disk (done by page_launder)
- * - moving clean pages from the inactive dirty list to
- * the inactive clean list. (done by page_launder)
+ * Single page allocs loop until the allocation succeeds.
+ * Multi-page allocs can fail due to memory fragmentation;
+ * in that case we bail out to prevent infinite loops and
+ * hanging device drivers ...
+ *
+ * Another issue are GFP_NOFS allocations; because they
+ * do not have __GFP_FS set it's possible we cannot make
+ * any progress freeing pages, in that case it's better
+ * to give up than to deadlock the kernel looping here.
*/
if (gfp_mask & __GFP_WAIT) {
- memory_pressure++;
- try_to_free_pages(gfp_mask);
- goto try_again;
+ if (!order || free_shortage()) {
+ int progress = try_to_free_pages(gfp_mask);
+ if (progress || (gfp_mask & __GFP_FS))
+ goto try_again;
+ /*
+ * Fail in case no progress was made and the
+ * allocation may not be able to block on IO.
+ */
+ return NULL;
+ }
}
}
@@ -671,14 +689,13 @@
{
int i, j, k;
- for (i = 0; i < NR_GFPINDEX; i++) {
+ for (i = 0; i <= GFP_ZONEMASK; i++) {
zonelist_t *zonelist;
zone_t *zone;
zonelist = pgdat->node_zonelists + i;
memset(zonelist, 0, sizeof(*zonelist));
- zonelist->gfp_mask = i;
j = 0;
k = ZONE_NORMAL;
if (i & __GFP_HIGHMEM)
|
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv11606/include/linux Modified Files: irq.h Log Message: conflict fixes from import bitkeeper (2.4.6) Index: irq.h =================================================================== RCS file: /cvsroot/linux-apus/2.3/include/linux/irq.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- irq.h 2001/04/02 22:55:20 1.2 +++ irq.h 2001/07/08 16:59:56 1.3 @@ -62,7 +62,4 @@ extern hw_irq_controller no_irq_type; /* needed in every arch ? */ extern void no_action(int cpl, void *dev_id, struct pt_regs *regs); -extern volatile unsigned long irq_err_count; - #endif /* __asm_h */ - |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/include/net/irda In directory usw-pr-cvs1:/tmp/cvs-serv11606/include/net/irda Removed Files: irdacall.h irlap_comp.h Log Message: conflict fixes from import bitkeeper (2.4.6) --- irdacall.h DELETED --- --- irlap_comp.h DELETED --- |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/net/irda/compressors In directory usw-pr-cvs1:/tmp/cvs-serv11606/net/irda/compressors Removed Files: Config.in Makefile irda_deflate.c Log Message: conflict fixes from import bitkeeper (2.4.6) --- Config.in DELETED --- --- Makefile DELETED --- --- irda_deflate.c DELETED --- |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/include/linux/mtd In directory usw-pr-cvs1:/tmp/cvs-serv11606/include/linux/mtd Removed Files: mapped.h Log Message: conflict fixes from import bitkeeper (2.4.6) --- mapped.h DELETED --- |
|
From: Roman Z. <zi...@us...> - 2001-07-08 17:00:00
|
Update of /cvsroot/linux-apus/2.3/net/irda In directory usw-pr-cvs1:/tmp/cvs-serv11606/net/irda Removed Files: irlap_comp.c Log Message: conflict fixes from import bitkeeper (2.4.6) --- irlap_comp.c DELETED --- |
|
From: Roman Z. <zi...@us...> - 2001-07-08 16:59:59
|
Update of /cvsroot/linux-apus/2.3/include/asm-sh In directory usw-pr-cvs1:/tmp/cvs-serv11606/include/asm-sh Removed Files: io_od.h Log Message: conflict fixes from import bitkeeper (2.4.6) --- io_od.h DELETED --- |