mirror of https://gitee.com/openkylin/linux.git
[PARISC] Kill off broken irqstack code
It's been unfinished and broken long enough, and I have some ideas on how to do it more cleanly. Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
This commit is contained in:
parent
873d50e2e5
commit
6cc4525d29
|
@ -98,7 +98,6 @@
|
||||||
* The "get_stack" macros are responsible for determining the
|
* The "get_stack" macros are responsible for determining the
|
||||||
* kernel stack value.
|
* kernel stack value.
|
||||||
*
|
*
|
||||||
* For Faults:
|
|
||||||
* If sr7 == 0
|
* If sr7 == 0
|
||||||
* Already using a kernel stack, so call the
|
* Already using a kernel stack, so call the
|
||||||
* get_stack_use_r30 macro to push a pt_regs structure
|
* get_stack_use_r30 macro to push a pt_regs structure
|
||||||
|
@ -110,26 +109,6 @@
|
||||||
* task pointer pointed to by cr30. Set the stack
|
* task pointer pointed to by cr30. Set the stack
|
||||||
* pointer to point to the end of the task structure.
|
* pointer to point to the end of the task structure.
|
||||||
*
|
*
|
||||||
* For Interrupts:
|
|
||||||
* If sr7 == 0
|
|
||||||
* Already using a kernel stack, check to see if r30
|
|
||||||
* is already pointing to the per processor interrupt
|
|
||||||
* stack. If it is, call the get_stack_use_r30 macro
|
|
||||||
* to push a pt_regs structure on the stack, and store
|
|
||||||
* registers there. Otherwise, call get_stack_use_cr31
|
|
||||||
* to get a pointer to the base of the interrupt stack
|
|
||||||
* and push a pt_regs structure on that stack.
|
|
||||||
* else
|
|
||||||
* Need to set up a kernel stack, so call the
|
|
||||||
* get_stack_use_cr30 macro to set up a pointer
|
|
||||||
* to the pt_regs structure contained within the
|
|
||||||
* task pointer pointed to by cr30. Set the stack
|
|
||||||
* pointer to point to the end of the task structure.
|
|
||||||
* N.B: We don't use the interrupt stack for the
|
|
||||||
* first interrupt from userland, because signals/
|
|
||||||
* resched's are processed when returning to userland,
|
|
||||||
* and we can sleep in those cases.
|
|
||||||
*
|
|
||||||
* Note that we use shadowed registers for temps until
|
* Note that we use shadowed registers for temps until
|
||||||
* we can save %r26 and %r29. %r26 is used to preserve
|
* we can save %r26 and %r29. %r26 is used to preserve
|
||||||
* %r8 (a shadowed register) which temporarily contained
|
* %r8 (a shadowed register) which temporarily contained
|
||||||
|
@ -1086,23 +1065,13 @@ intr_do_preempt:
|
||||||
|
|
||||||
intr_extint:
|
intr_extint:
|
||||||
CMPIB=,n 0,%r16,1f
|
CMPIB=,n 0,%r16,1f
|
||||||
|
|
||||||
get_stack_use_cr30
|
get_stack_use_cr30
|
||||||
b,n 3f
|
b,n 2f
|
||||||
|
|
||||||
1:
|
1:
|
||||||
#if 0 /* Interrupt Stack support not working yet! */
|
|
||||||
mfctl %cr31,%r1
|
|
||||||
copy %r30,%r17
|
|
||||||
/* FIXME! depi below has hardcoded idea of interrupt stack size (32k)*/
|
|
||||||
DEPI 0,31,15,%r17
|
|
||||||
CMPB=,n %r1,%r17,2f
|
|
||||||
get_stack_use_cr31
|
|
||||||
b,n 3f
|
|
||||||
#endif
|
|
||||||
2:
|
|
||||||
get_stack_use_r30
|
get_stack_use_r30
|
||||||
|
2:
|
||||||
3:
|
|
||||||
save_specials %r29
|
save_specials %r29
|
||||||
virt_map
|
virt_map
|
||||||
save_general %r29
|
save_general %r29
|
||||||
|
|
|
@ -128,10 +128,6 @@ $pgt_fill_loop:
|
||||||
/* And the stack pointer too */
|
/* And the stack pointer too */
|
||||||
ldo THREAD_SZ_ALGN(%r6),%sp
|
ldo THREAD_SZ_ALGN(%r6),%sp
|
||||||
|
|
||||||
/* And the interrupt stack */
|
|
||||||
load32 interrupt_stack,%r6
|
|
||||||
mtctl %r6,%cr31
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
/* Set the smp rendevous address into page zero.
|
/* Set the smp rendevous address into page zero.
|
||||||
** It would be safer to do this in init_smp_config() but
|
** It would be safer to do this in init_smp_config() but
|
||||||
|
|
|
@ -49,7 +49,6 @@ EXPORT_SYMBOL(init_mm);
|
||||||
* way process stacks are handled. This is done by having a special
|
* way process stacks are handled. This is done by having a special
|
||||||
* "init_task" linker map entry..
|
* "init_task" linker map entry..
|
||||||
*/
|
*/
|
||||||
unsigned char interrupt_stack[ISTACK_SIZE] __attribute__ ((section("init_istack"), aligned(PAGE_SIZE)));
|
|
||||||
union thread_union init_thread_union
|
union thread_union init_thread_union
|
||||||
__attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
|
__attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
|
||||||
{ INIT_THREAD_INFO(init_task) };
|
{ INIT_THREAD_INFO(init_task) };
|
||||||
|
|
|
@ -432,22 +432,10 @@ smp_cpu_init(int cpunum)
|
||||||
void __init smp_callin(void)
|
void __init smp_callin(void)
|
||||||
{
|
{
|
||||||
int slave_id = cpu_now_booting;
|
int slave_id = cpu_now_booting;
|
||||||
#if 0
|
|
||||||
void *istack;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
smp_cpu_init(slave_id);
|
smp_cpu_init(slave_id);
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|
||||||
#if 0 /* NOT WORKING YET - see entry.S */
|
|
||||||
istack = (void *)__get_free_pages(GFP_KERNEL,ISTACK_ORDER);
|
|
||||||
if (istack == NULL) {
|
|
||||||
printk(KERN_CRIT "Failed to allocate interrupt stack for cpu %d\n",slave_id);
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
mtctl(istack,31);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
flush_cache_all_local(); /* start with known state */
|
flush_cache_all_local(); /* start with known state */
|
||||||
flush_tlb_all_local(NULL);
|
flush_tlb_all_local(NULL);
|
||||||
|
|
||||||
|
|
|
@ -153,14 +153,6 @@ SECTIONS
|
||||||
*(.data.init_task)
|
*(.data.init_task)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The interrupt stack is currently partially coded, but not yet
|
|
||||||
* implemented
|
|
||||||
*/
|
|
||||||
. = ALIGN(16384);
|
|
||||||
init_istack : {
|
|
||||||
*(init_istack)
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
. = ALIGN(16);
|
. = ALIGN(16);
|
||||||
/* Linkage tables */
|
/* Linkage tables */
|
||||||
|
|
|
@ -49,14 +49,6 @@
|
||||||
#define pgd_ERROR(e) \
|
#define pgd_ERROR(e) \
|
||||||
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
|
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
|
||||||
|
|
||||||
/* Note: If you change ISTACK_SIZE, you need to change the corresponding
|
|
||||||
* values in vmlinux.lds and vmlinux64.lds (init_istack section). Also,
|
|
||||||
* the "order" and size need to agree.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define ISTACK_SIZE 32768 /* Interrupt Stack Size */
|
|
||||||
#define ISTACK_ORDER 3
|
|
||||||
|
|
||||||
/* This is the size of the initially mapped kernel memory */
|
/* This is the size of the initially mapped kernel memory */
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
#define KERNEL_INITIAL_ORDER 24 /* 0 to 1<<24 = 16MB */
|
#define KERNEL_INITIAL_ORDER 24 /* 0 to 1<<24 = 16MB */
|
||||||
|
|
Loading…
Reference in New Issue