qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Chris Metcalf <cmetcalf@ezchip.com>
To: Richard Henderson <rth@twiddle.net>,
	gang.chen.5i5j@gmail.com, peter.maydell@linaro.org
Cc: qemu-devel@nongnu.org, xili_gchen_5257@hotmail.com
Subject: Re: [Qemu-devel] [PATCH v3] target-tilegx: Support iret instruction and related special registers
Date: Thu, 1 Oct 2015 21:31:57 -0400	[thread overview]
Message-ID: <560DDE8D.8040202@ezchip.com> (raw)
In-Reply-To: <560DD1AB.7080808@twiddle.net>

On 10/1/2015 8:36 PM, Richard Henderson wrote:
> On 10/01/2015 10:37 PM, gang.chen.5i5j@gmail.com wrote:
>>           {
>>            mtspr INTERRUPT_CRITICAL_SECTION, r3
>>            shli r2, r2, SPR_EX_CONTEXT_0_1__ICS_SHIFT
>>           }
>>
>>           {
>>            mtspr EX_CONTEXT_0_0, lr
>>            ori r2, r2, RETURN_PL
>>           }
>>
>>           {
>>            or r0, r1, r0
>>            mtspr EX_CONTEXT_0_1, r2
>>           }
>>
>>           iret
>>
>>           jrp lr
>>
>> Until now, EX_CONTEXT_0_0 and EX_CONTEXT_0_1 are only used in mtspr, so
>> just skip them, at present. "jrp lr" in __longjmp is for historical
>> reasons, and might get removed in the future.
>
> So, really, iret is supposed to branch to EX_CONTEXT_0_0, and (presumably) validate the privilege level in EX_CONTEXT_0_1 continues to be user-mode.

Yes, I gave the same feedback earlier today.  EX_CONTEXT_0_1 should be either 0 or 1 to set INTERRUPT_CRITICAL_SECTION appropriately, and raise GPV for any other value.  (Obviously it's more complex if you're really emulating system software, but for now that's out of scope, I think.)

>
>> +    case OE_RR_X1(IRET):
>> +        if (srca) {
>> +            return TILEGX_EXCP_OPCODE_UNIMPLEMENTED;
>> +        }
>> +        srca = TILEGX_R_LR;
>> +        mnemonic = "iret";
>> +        goto do_jr;
>
> which means this is wrong, but just happens to work for __longjmp.
>
> It appears that the entire point of this iret path is to atomically branch and set INTERRUPT_CRITICAL_SECTION at the same time.  So, this isn't complete.
>
> What INTERRUPT_CRITICAL_SECTION is supposed to *do* at user mode, I don't know.

It disables interrupts from being delivered.  This means asynchronous interrupts get deferred until ICS is set back to zero, and synchronous interrupts (page fault, etc) cause a double-fault instead.  ICS is automatically set on entry to interrupt handlers, so the handler has time to acquire any information about the interrupt from SPRs, and it is expected that ICS is cleared as soon as possible.  ICS can also be used before returning from interrupts if you need to do something like adjust the interrupt mask prior to returning.

-- 
Chris Metcalf, EZChip Semiconductor
http://www.ezchip.com

  parent reply	other threads:[~2015-10-02  1:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-01 12:37 [Qemu-devel] [PATCH v3] target-tilegx: Support iret instruction and related special registers gang.chen.5i5j
2015-10-02  0:36 ` Richard Henderson
     [not found]   ` <560DDC06.9060002@hotmail.com>
2015-10-02  1:19     ` Chen Gang
2015-10-02  1:31   ` Chris Metcalf [this message]
2015-10-02  2:02     ` Chen Gang
2015-10-02  2:26     ` Richard Henderson
2015-10-02 14:37       ` Chris Metcalf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=560DDE8D.8040202@ezchip.com \
    --to=cmetcalf@ezchip.com \
    --cc=gang.chen.5i5j@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=xili_gchen_5257@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).