linux-mips
[Top] [All Lists]

Re: Re: set_except_vector question

To: "linux-mips@oss.sgi.com" <linux-mips@oss.sgi.com>
Subject: Re: Re: set_except_vector question
From: Fuxin Zhang <fxzhang@ict.ac.cn>
Date: Sun, 2 Sep 2001 2:24:39 +0800
Sender: owner-linux-mips@oss.sgi.com
hello,Lars Munch
 2001-09-01 18:10:00:
>What do you mean by "synthesizing a jump"?
I think he means " making a jump instruction"
and yes.
the "j handler" instruction can be made that way:
    _______________________
    |opcode |   target     |
    -----------------------
    opcode for j is 000010,the target pc is computed as 
currentpc[31-28]||target||00
>
>My CPU is a 5Kc and it has a DIVEC which is set to the mipsIRQ function in
>/arch/mips64/mips-boards/generic/mipsIRQ.S to handle interrupts. But I still do
>not understand the address manipulation which is done before storing the
>function pointer (handler).
>
>Thanks
>Lars Munch
>
>On Sat, Sep 01, 2001 at 11:54:26AM -0400, Bradley D. LaRonde wrote:
>> Looks like it is synthesizing a jump (j) instruction to forward interrupt
>> exceptions to the interrupt handler for cpus that have a dedicated interrupt
>> vector (DIVEC).  arch/mips/kernel/setup.c sets the DIVEC option for certain
>> cpus.
>> 
>> Regards,
>> Brad
>> 
>> ----- Original Message -----
>> From: "Lars Munch" <lars@segv.dk>
>> To: <linux-mips@oss.sgi.com>
>> Sent: Saturday, September 01, 2001 10:58 AM
>> Subject: set_except_vector question
>> 
>> 
>> > Hi
>> >
>> > I have been looking at the set_except_vector function in
>> > arch/mips[64]/kernel/traps.c and wondering why the handler
>> > address is changed/recalculated before it is stored:
>> >
>> > *(volatile u32 *)(KSEG0+0x200) = 0x08000000 | (0x03ffffff & (handler >>
>> 2));
>> >
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> >
>> > Could someone please enlighten me?
>> >
>> > Thanks
>> > Lars Munch
>> >
>> 

Regards
            Fuxin Zhang
            fxzhang@ict.ac.cn


<Prev in Thread] Current Thread [Next in Thread>