From: Gabriel Paubert <paubert@iram.es>
To: "wilbur.chan" <wilbur512@gmail.com>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: Problem when disabled interrupt in system call (ppc8270)
Date: Fri, 16 Oct 2009 09:25:15 +0200 [thread overview]
Message-ID: <20091016072515.GA30367@iram.es> (raw)
In-Reply-To: <e997b7420910151812m3de16f67hdb756bcd1f40ddc@mail.gmail.com>
On Fri, Oct 16, 2009 at 09:12:34AM +0800, wilbur.chan wrote:
> ppc 8270, kernel 2.6.21.7
>
> I took the following steps:
>
>
> In a system call function , say , sys_reboot, interrupt was disabled
> by local_irq_disable.
>
> Then , value at the address of 0xc000050 was set to a value , say ,
> 0x1234. Code was like this :
>
> sys_reboot()
> {
> local_irq_disable();
> *(volatile unsigned long * )0xc1000050 = 0x1234;
> while(1)
> {
> ;
> }
> }
>
> Finally, I reset the board (with power still on) into uboot,using
> 'md 0x1000050' to display the content at physical address 0x1000050,
> and found that , it was not 0x1234.
>
>
> However, if I delete the local_irq_disable() in sys_reboot, everything
> went well---After I reset the board, 'md 0x1000050' return the value
> 0x1234.
>
>
> So, this really puzzled me , could someone explain why this happed? Thank you.
The 0x1234 stays in the data cache and is not written to memory. The hard reset
invalidates the caches and you read the previous value from memory.
If you don't disable interrupts, the cache line is ultimately written
back to memory and you see it after reset.
Just try inserting a dcbst (or dcbf) instruction for the address
of the 0x1234 value just after.
Something like asm volatile("dcbst 0,%0": : "r" (address) : "memory");
(Not even tried to compile it, but you get the idea).
Gabriel
prev parent reply other threads:[~2009-10-16 7:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-16 1:12 Problem when disabled interrupt in system call (ppc8270) wilbur.chan
2009-10-16 4:43 ` Benjamin Herrenschmidt
2009-10-16 5:14 ` wilbur.chan
2009-10-16 7:25 ` Gabriel Paubert [this message]
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=20091016072515.GA30367@iram.es \
--to=paubert@iram.es \
--cc=linuxppc-dev@ozlabs.org \
--cc=wilbur512@gmail.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).