Skip to content

Commit

Permalink
[PATCH] CRIS update: updates for 2.6.12
Browse files Browse the repository at this point in the history
Patches to make CRIS work with 2.6.12.

Signed-off-by: Mikael Starvik <starvik@axis.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Mikael Starvik authored and Linus Torvalds committed Jul 27, 2005
1 parent dcf1310 commit 5d01e6c
Show file tree
Hide file tree
Showing 15 changed files with 88 additions and 119 deletions.
9 changes: 7 additions & 2 deletions arch/cris/arch-v10/kernel/ptrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <linux/ptrace.h>
#include <linux/user.h>
#include <linux/signal.h>
#include <linux/security.h>

#include <asm/uaccess.h>
#include <asm/page.h>
Expand Down Expand Up @@ -86,9 +87,13 @@ sys_ptrace(long request, long pid, long addr, long data)
ret = -EPERM;

if (request == PTRACE_TRACEME) {
/* are we already being traced? */
if (current->ptrace & PT_PTRACED)
goto out;

ret = security_ptrace(current->parent, current);
if (ret)
goto out;
/* set the ptrace bit in the process flags. */
current->ptrace |= PT_PTRACED;
ret = 0;
goto out;
Expand Down Expand Up @@ -207,7 +212,7 @@ sys_ptrace(long request, long pid, long addr, long data)
case PTRACE_KILL:
ret = 0;

if (child->state == TASK_ZOMBIE)
if (child->exit_state == EXIT_ZOMBIE)
break;

child->exit_code = SIGKILL;
Expand Down
39 changes: 16 additions & 23 deletions arch/cris/kernel/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void *module_alloc(unsigned long size)
{
if (size == 0)
return NULL;
return vmalloc(size);
return vmalloc_exec(size);
}


Expand All @@ -59,26 +59,8 @@ int apply_relocate(Elf32_Shdr *sechdrs,
unsigned int relsec,
struct module *me)
{
unsigned int i;
Elf32_Rel *rel = (void *)sechdrs[relsec].sh_addr;
Elf32_Sym *sym;
uint32_t *location;

DEBUGP("Applying relocate section %u to %u\n", relsec,
sechdrs[relsec].sh_info);
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rel); i++) {
/* This is where to make the change */
location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_offset
+ rel[i].r_offset;
/* This is the symbol it is referring to. Note that all
undefined symbols have been resolved. */
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
+ ELF32_R_SYM(rel[i].r_info);

/* We add the value into the location given */
*location += sym->st_value;
}
return 0;
printk(KERN_ERR "module %s: REL relocation unsupported\n", me->name);
return -ENOEXEC;
}

int apply_relocate_add(Elf32_Shdr *sechdrs,
Expand All @@ -90,7 +72,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
unsigned int i;
Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr;

DEBUGP ("Applying relocate section %u to %u\n", relsec,
DEBUGP ("Applying add relocate section %u to %u\n", relsec,
sechdrs[relsec].sh_info);

for (i = 0; i < sechdrs[relsec].sh_size / sizeof (*rela); i++) {
Expand All @@ -103,7 +85,18 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
Elf32_Sym *sym
= ((Elf32_Sym *)sechdrs[symindex].sh_addr
+ ELF32_R_SYM (rela[i].r_info));
*loc = sym->st_value + rela[i].r_addend;
switch (ELF32_R_TYPE(rela[i].r_info)) {
case R_CRIS_32:
*loc = sym->st_value + rela[i].r_addend;
break;
case R_CRIS_32_PCREL:
*loc = sym->st_value - (unsigned)loc + rela[i].r_addend - 4;
break;
default:
printk(KERN_ERR "module %s: Unknown relocation: %u\n",
me->name, ELF32_R_TYPE(rela[i].r_info));
return -ENOEXEC;
}
}

return 0;
Expand Down
31 changes: 23 additions & 8 deletions arch/cris/kernel/process.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $Id: process.c,v 1.17 2004/04/05 13:53:48 starvik Exp $
/* $Id: process.c,v 1.21 2005/03/04 08:16:17 starvik Exp $
*
* linux/arch/cris/kernel/process.c
*
Expand All @@ -8,6 +8,18 @@
* Authors: Bjorn Wesen (bjornw@axis.com)
*
* $Log: process.c,v $
* Revision 1.21 2005/03/04 08:16:17 starvik
* Merge of Linux 2.6.11.
*
* Revision 1.20 2005/01/18 05:57:22 starvik
* Renamed hlt_counter to cris_hlt_counter and made it global.
*
* Revision 1.19 2004/10/19 13:07:43 starvik
* Merge of Linux 2.6.9
*
* Revision 1.18 2004/08/16 12:37:23 starvik
* Merge of Linux 2.6.8
*
* Revision 1.17 2004/04/05 13:53:48 starvik
* Merge of Linux 2.6.5
*
Expand Down Expand Up @@ -161,18 +173,18 @@ EXPORT_SYMBOL(init_task);
* region by enable_hlt/disable_hlt.
*/

static int hlt_counter=0;
int cris_hlt_counter=0;

void disable_hlt(void)
{
hlt_counter++;
cris_hlt_counter++;
}

EXPORT_SYMBOL(disable_hlt);

void enable_hlt(void)
{
hlt_counter--;
cris_hlt_counter--;
}

EXPORT_SYMBOL(enable_hlt);
Expand All @@ -195,16 +207,19 @@ void cpu_idle (void)
/* endless idle loop with no priority at all */
while (1) {
while (!need_resched()) {
void (*idle)(void) = pm_idle;

void (*idle)(void);
/*
* Mark this as an RCU critical section so that
* synchronize_kernel() in the unload path waits
* for our completion.
*/
idle = pm_idle;
if (!idle)
idle = default_idle;

idle();
}
schedule();
}

}

void hard_reset_now (void);
Expand Down
2 changes: 1 addition & 1 deletion include/asm-cris/arch-v10/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ extern inline unsigned long ffz(unsigned long w)
*
* Undefined if no bit exists, so code should check against 0 first.
*/
extern __inline__ unsigned long __ffs(unsigned long word)
extern inline unsigned long __ffs(unsigned long word)
{
return cris_swapnwbrlz(~word);
}
Expand Down
2 changes: 1 addition & 1 deletion include/asm-cris/arch-v10/offset.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#define THREAD_usp 4 /* offsetof(struct thread_struct, usp) */
#define THREAD_dccr 8 /* offsetof(struct thread_struct, dccr) */

#define TASK_pid 133 /* offsetof(struct task_struct, pid) */
#define TASK_pid 141 /* offsetof(struct task_struct, pid) */

#define LCLONE_VM 256 /* CLONE_VM */
#define LCLONE_UNTRACED 8388608 /* CLONE_UNTRACED */
Expand Down
35 changes: 17 additions & 18 deletions include/asm-cris/bitops.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include <asm/arch/bitops.h>
#include <asm/system.h>
#include <asm/atomic.h>
#include <linux/compiler.h>

/*
Expand Down Expand Up @@ -88,23 +89,23 @@ struct __dummy { unsigned long a[100]; };
* It also implies a memory barrier.
*/

extern inline int test_and_set_bit(int nr, void *addr)
extern inline int test_and_set_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned long flags;
unsigned int *adr = (unsigned int *)addr;

adr += nr >> 5;
mask = 1 << (nr & 0x1f);
local_save_flags(flags);
local_irq_disable();
cris_atomic_save(addr, flags);
retval = (mask & *adr) != 0;
*adr |= mask;
cris_atomic_restore(addr, flags);
local_irq_restore(flags);
return retval;
}

extern inline int __test_and_set_bit(int nr, void *addr)
extern inline int __test_and_set_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned int *adr = (unsigned int *)addr;
Expand All @@ -131,19 +132,18 @@ extern inline int __test_and_set_bit(int nr, void *addr)
* It also implies a memory barrier.
*/

extern inline int test_and_clear_bit(int nr, void *addr)
extern inline int test_and_clear_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned long flags;
unsigned int *adr = (unsigned int *)addr;

adr += nr >> 5;
mask = 1 << (nr & 0x1f);
local_save_flags(flags);
local_irq_disable();
cris_atomic_save(addr, flags);
retval = (mask & *adr) != 0;
*adr &= ~mask;
local_irq_restore(flags);
cris_atomic_restore(addr, flags);
return retval;
}

Expand All @@ -157,7 +157,7 @@ extern inline int test_and_clear_bit(int nr, void *addr)
* but actually fail. You must protect multiple accesses with a lock.
*/

extern inline int __test_and_clear_bit(int nr, void *addr)
extern inline int __test_and_clear_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned int *adr = (unsigned int *)addr;
Expand All @@ -177,24 +177,23 @@ extern inline int __test_and_clear_bit(int nr, void *addr)
* It also implies a memory barrier.
*/

extern inline int test_and_change_bit(int nr, void *addr)
extern inline int test_and_change_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned long flags;
unsigned int *adr = (unsigned int *)addr;
adr += nr >> 5;
mask = 1 << (nr & 0x1f);
local_save_flags(flags);
local_irq_disable();
cris_atomic_save(addr, flags);
retval = (mask & *adr) != 0;
*adr ^= mask;
local_irq_restore(flags);
cris_atomic_restore(addr, flags);
return retval;
}

/* WARNING: non atomic and it can be reordered! */

extern inline int __test_and_change_bit(int nr, void *addr)
extern inline int __test_and_change_bit(int nr, volatile unsigned long *addr)
{
unsigned int mask, retval;
unsigned int *adr = (unsigned int *)addr;
Expand All @@ -215,7 +214,7 @@ extern inline int __test_and_change_bit(int nr, void *addr)
* This routine doesn't need to be atomic.
*/

extern inline int test_bit(int nr, const void *addr)
extern inline int test_bit(int nr, const volatile unsigned long *addr)
{
unsigned int mask;
unsigned int *adr = (unsigned int *)addr;
Expand Down Expand Up @@ -259,7 +258,7 @@ extern inline int test_bit(int nr, const void *addr)
* @offset: The bitnumber to start searching at
* @size: The maximum size to search
*/
extern inline int find_next_zero_bit (void * addr, int size, int offset)
extern inline int find_next_zero_bit (const unsigned long * addr, int size, int offset)
{
unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
unsigned long result = offset & ~31UL;
Expand Down Expand Up @@ -301,7 +300,7 @@ extern inline int find_next_zero_bit (void * addr, int size, int offset)
* @offset: The bitnumber to start searching at
* @size: The maximum size to search
*/
static __inline__ int find_next_bit(void *addr, int size, int offset)
static __inline__ int find_next_bit(const unsigned long *addr, int size, int offset)
{
unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
unsigned long result = offset & ~31UL;
Expand Down Expand Up @@ -367,7 +366,7 @@ static __inline__ int find_next_bit(void *addr, int size, int offset)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)

extern inline int sched_find_first_bit(unsigned long *b)
extern inline int sched_find_first_bit(const unsigned long *b)
{
if (unlikely(b[0]))
return __ffs(b[0]);
Expand Down
4 changes: 2 additions & 2 deletions include/asm-cris/kmap_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ enum km_type {
KM_PTE1,
KM_IRQ0,
KM_IRQ1,
KM_CRYPTO_USER,
KM_CRYPTO_SOFTIRQ,
KM_SOFTIRQ0,
KM_SOFTIRQ1,
KM_TYPE_NR
};

Expand Down
7 changes: 0 additions & 7 deletions include/asm-cris/page.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,15 @@
*/
#ifndef __ASSEMBLY__
typedef struct { unsigned long pte; } pte_t;
typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t;
#endif

#define pte_val(x) ((x).pte)
#define pmd_val(x) ((x).pmd)
#define pgd_val(x) ((x).pgd)
#define pgprot_val(x) ((x).pgprot)

#define __pte(x) ((pte_t) { (x) } )
#define __pmd(x) ((pmd_t) { (x) } )
#define __pgd(x) ((pgd_t) { (x) } )
#define __pgprot(x) ((pgprot_t) { (x) } )

Expand Down Expand Up @@ -73,10 +70,6 @@ typedef struct { unsigned long pgprot; } pgprot_t;

#ifndef __ASSEMBLY__

#define BUG() do { \
printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
} while (0)

/* Pure 2^n version of get_order */
static inline int get_order(unsigned long size)
{
Expand Down
10 changes: 0 additions & 10 deletions include/asm-cris/pgalloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,6 @@ extern inline void pte_free(struct page *pte)

#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))

/*
* We don't have any real pmd's, and this code never triggers because
* the pgd will always be present..
*/

#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
#define pmd_free(x) do { } while (0)
#define __pmd_free_tlb(tlb,x) do { } while (0)
#define pgd_populate(mm, pmd, pte) BUG()

#define check_pgt_cache() do { } while (0)

#endif
Loading

0 comments on commit 5d01e6c

Please sign in to comment.