提交 8080f231 编写于 作者: D David Howells 提交者: Linus Torvalds

[PATCH] FRV: Make the FRV arch work again

The attached patch implements a bunch of small changes to the FRV arch to
make it work again.

It deals with the following problems:

 (1) SEM_DEBUG should be SEMAPHORE_DEBUG.

 (2) The argument list to pcibios_penalize_isa_irq() has changed.

 (3) CONFIG_HIGHMEM can't be used directly in #if as it may not be defined.

 (4) page->private is no longer directly accessible.

 (5) linux/hardirq.h assumes asm/hardirq.h will include linux/irq.h

 (6) The IDE MMIO access functions are given pointers, not integers, and so
     get type casting errors.

 (7) __pa() is passed an explicit u64 type in drivers/char/mem.c, but that
     can't be cast directly to a pointer on a 32-bit platform.

 (8) SEMAPHORE_DEBUG should not be contingent on WAITQUEUE_DEBUG as that no
     longer exists.

 (9) PREEMPT_ACTIVE is too low a value.
Signed-off-by: NDavid Howells <dhowells@redhat.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 c13cf856
...@@ -20,7 +20,7 @@ struct sem_waiter { ...@@ -20,7 +20,7 @@ struct sem_waiter {
struct task_struct *task; struct task_struct *task;
}; };
#if SEM_DEBUG #if SEMAPHORE_DEBUG
void semtrace(struct semaphore *sem, const char *str) void semtrace(struct semaphore *sem, const char *str)
{ {
if (sem->debug) if (sem->debug)
......
...@@ -60,7 +60,7 @@ void __init pcibios_fixup_irqs(void) ...@@ -60,7 +60,7 @@ void __init pcibios_fixup_irqs(void)
} }
} }
void __init pcibios_penalize_isa_irq(int irq, int active) void __init pcibios_penalize_isa_irq(int irq)
{ {
} }
......
...@@ -108,7 +108,7 @@ void __init paging_init(void) ...@@ -108,7 +108,7 @@ void __init paging_init(void)
memset((void *) empty_zero_page, 0, PAGE_SIZE); memset((void *) empty_zero_page, 0, PAGE_SIZE);
#if CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
if (num_physpages - num_mappedpages) { if (num_physpages - num_mappedpages) {
pgd_t *pge; pgd_t *pge;
pud_t *pue; pud_t *pue;
......
...@@ -85,7 +85,7 @@ static inline void pgd_list_add(pgd_t *pgd) ...@@ -85,7 +85,7 @@ static inline void pgd_list_add(pgd_t *pgd)
struct page *page = virt_to_page(pgd); struct page *page = virt_to_page(pgd);
page->index = (unsigned long) pgd_list; page->index = (unsigned long) pgd_list;
if (pgd_list) if (pgd_list)
pgd_list->private = (unsigned long) &page->index; set_page_private(pgd_list, (unsigned long) &page->index);
pgd_list = page; pgd_list = page;
set_page_private(page, (unsigned long)&pgd_list); set_page_private(page, (unsigned long)&pgd_list);
} }
...@@ -94,10 +94,10 @@ static inline void pgd_list_del(pgd_t *pgd) ...@@ -94,10 +94,10 @@ static inline void pgd_list_del(pgd_t *pgd)
{ {
struct page *next, **pprev, *page = virt_to_page(pgd); struct page *next, **pprev, *page = virt_to_page(pgd);
next = (struct page *) page->index; next = (struct page *) page->index;
pprev = (struct page **)page_private(page); pprev = (struct page **) page_private(page);
*pprev = next; *pprev = next;
if (next) if (next)
next->private = (unsigned long) pprev; set_page_private(next, (unsigned long) pprev);
} }
void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused) void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/threads.h> #include <linux/threads.h>
#include <linux/irq.h>
typedef struct { typedef struct {
unsigned int __softirq_pending; unsigned int __softirq_pending;
......
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
/* /*
* some bits needed for parts of the IDE subsystem to compile * some bits needed for parts of the IDE subsystem to compile
*/ */
#define __ide_mm_insw(port, addr, n) insw(port, addr, n) #define __ide_mm_insw(port, addr, n) insw((unsigned long) (port), addr, n)
#define __ide_mm_insl(port, addr, n) insl(port, addr, n) #define __ide_mm_insl(port, addr, n) insl((unsigned long) (port), addr, n)
#define __ide_mm_outsw(port, addr, n) outsw(port, addr, n) #define __ide_mm_outsw(port, addr, n) outsw((unsigned long) (port), addr, n)
#define __ide_mm_outsl(port, addr, n) outsl(port, addr, n) #define __ide_mm_outsl(port, addr, n) outsl((unsigned long) (port), addr, n)
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -47,8 +47,8 @@ typedef struct { unsigned long pgprot; } pgprot_t; ...@@ -47,8 +47,8 @@ typedef struct { unsigned long pgprot; } pgprot_t;
#define devmem_is_allowed(pfn) 1 #define devmem_is_allowed(pfn) 1
#define __pa(vaddr) virt_to_phys((void *) vaddr) #define __pa(vaddr) virt_to_phys((void *) (unsigned long) (vaddr))
#define __va(paddr) phys_to_virt((unsigned long) paddr) #define __va(paddr) phys_to_virt((unsigned long) (paddr))
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) #define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/rwsem.h> #include <linux/rwsem.h>
#define SEMAPHORE_DEBUG WAITQUEUE_DEBUG #define SEMAPHORE_DEBUG 0
/* /*
* the semaphore definition * the semaphore definition
......
...@@ -58,7 +58,7 @@ struct thread_info { ...@@ -58,7 +58,7 @@ struct thread_info {
#endif #endif
#define PREEMPT_ACTIVE 0x4000000 #define PREEMPT_ACTIVE 0x10000000
/* /*
* macros/functions for gaining access to the thread information structure * macros/functions for gaining access to the thread information structure
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册