All of lore.kernel.org
 help / color / mirror / Atom feed
* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
       [not found] <S20037884AbWHMBM7/20060813011259Z+2871@ftp.linux-mips.org>
@ 2006-08-17 21:20 ` Mark E Mason
  2006-08-18  1:51   ` Atsushi Nemoto
  0 siblings, 1 reply; 16+ messages in thread
From: Mark E Mason @ 2006-08-17 21:20 UTC (permalink / raw)
  To: linux-mips

Hello all,

FYI:

The sb1_flash_icache_page change below breaks causes 1480 kernels to
hang after freeing memory:

[4294675.358000] Looking up port of RPC 100003/2 on 192.168.0.151

[4294675.360000] Looking up port of RPC 100005/1 on 192.168.0.151

[4294675.578000] VFS: Mounted root (nfs filesystem) readonly.

[4294675.579000] Freeing unused kernel memory: 212k freed           

The console still echos return characters, but booting doesn't progress
beyond this point.

Right before this change, everything appears to be ok.

/Mark

> -----Original Message-----
> From: linux-git-patches-bounce@linux-mips.org 
> [mailto:linux-git-patches-bounce@linux-mips.org] On Behalf Of 
> linux-mips@linux-mips.org
> Sent: Saturday, August 12, 2006 6:13 PM
> To: git-commits@linux-mips.org
> Subject: [MIPS] SB1: Build fix: delete initialization of 
> flush_icache_page pointer.
> 
> Author: Ralf Baechle <ralf@linux-mips.org> Sun Aug 13 
> 02:00:02 2006 +0100
> Commit: d95bc28e8c0bc1c39ef300ec2bca6ce99245cb50
> Gitweb: http://www.linux-mips.org/g/linux/d95bc28e
> Branch: master
> 
> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
> 
> ---
> 
>  arch/mips/mm/c-sb1.c |    1 -
>  1 files changed, 0 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/mips/mm/c-sb1.c b/arch/mips/mm/c-sb1.c
> index 5df454e..4bd9ad8 100644
> --- a/arch/mips/mm/c-sb1.c
> +++ b/arch/mips/mm/c-sb1.c
> @@ -520,7 +520,6 @@ #endif
>  
>  	/* These routines are for Icache coherence with the Dcache */
>  	flush_icache_range = sb1_flush_icache_range;
> -	flush_icache_page = sb1_flush_icache_page;
>  	__flush_icache_page = sb1_flush_icache_page;
>  	flush_icache_all = __sb1_flush_icache_all; /* local only */
>  
> 
> 
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-08-17 21:20 ` [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer Mark E Mason
@ 2006-08-18  1:51   ` Atsushi Nemoto
  2006-08-21 19:27     ` Manoj Ekbote
  0 siblings, 1 reply; 16+ messages in thread
From: Atsushi Nemoto @ 2006-08-18  1:51 UTC (permalink / raw)
  To: mark.e.mason; +Cc: linux-mips, ralf, ths

On Thu, 17 Aug 2006 14:20:07 -0700, "Mark E Mason" <mark.e.mason@broadcom.com> wrote:
> The sb1_flash_icache_page change below breaks causes 1480 kernels to
> hang after freeing memory:

Does this (untested) patch work for you?

diff --git a/arch/mips/mm/c-sb1.c b/arch/mips/mm/c-sb1.c
index 4bd9ad8..0f5691a 100644
--- a/arch/mips/mm/c-sb1.c
+++ b/arch/mips/mm/c-sb1.c
@@ -253,6 +253,17 @@ void sb1___flush_cache_all(void)
 	__attribute__((alias("local_sb1___flush_cache_all")));
 #endif
 
+static inline void local_sb1_flush_data_cache_page(void * addr)
+{
+	__sb1_writeback_inv_dcache_range((unsigned long)addr,
+					 (unsigned long)addr + PAGE_SIZE);
+}
+
+static void sb1_flush_data_cache_page(unsigned long addr)
+{
+	on_each_cpu(local_sb1_flush_data_cache_page, (void *) addr, 1, 1);
+}
+
 /*
  * When flushing a range in the icache, we have to first writeback
  * the dcache for the same range, so new ifetches will see any
@@ -527,8 +538,8 @@ #endif
 	flush_cache_page = sb1_flush_cache_page;
 
 	flush_cache_sigtramp = sb1_flush_cache_sigtramp;
-	local_flush_data_cache_page = (void *) sb1_nop;
-	flush_data_cache_page = (void *) sb1_nop;
+	local_flush_data_cache_page = local_sb1_flush_data_cache_page;
+	flush_data_cache_page = sb1_flush_data_cache_page;
 
 	/* Full flush */
 	__flush_cache_all = sb1___flush_cache_all;

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-08-18  1:51   ` Atsushi Nemoto
@ 2006-08-21 19:27     ` Manoj Ekbote
  2006-08-23  4:16       ` Atsushi Nemoto
  0 siblings, 1 reply; 16+ messages in thread
From: Manoj Ekbote @ 2006-08-21 19:27 UTC (permalink / raw)
  To: Atsushi Nemoto, Mark E Mason; +Cc: linux-mips, ralf, ths

The patch doesn't help. The kernel hangs in the same fashion. 



>-----Original Message-----
>From: linux-mips-bounce@linux-mips.org 
>[mailto:linux-mips-bounce@linux-mips.org] On Behalf Of Atsushi Nemoto
>Sent: Thursday, August 17, 2006 6:51 PM
>To: Mark E Mason
>Cc: linux-mips@linux-mips.org; ralf@linux-mips.org; ths@networkno.de
>Subject: Re: [MIPS] SB1: Build fix: delete initialization of 
>flush_icache_page pointer.
>
>On Thu, 17 Aug 2006 14:20:07 -0700, "Mark E Mason" 
><mark.e.mason@broadcom.com> wrote:
>> The sb1_flash_icache_page change below breaks causes 1480 kernels to 
>> hang after freeing memory:
>
>Does this (untested) patch work for you?
>
>diff --git a/arch/mips/mm/c-sb1.c b/arch/mips/mm/c-sb1.c index 
>4bd9ad8..0f5691a 100644
>--- a/arch/mips/mm/c-sb1.c
>+++ b/arch/mips/mm/c-sb1.c
>@@ -253,6 +253,17 @@ void sb1___flush_cache_all(void)
> 	__attribute__((alias("local_sb1___flush_cache_all")));
> #endif
> 
>+static inline void local_sb1_flush_data_cache_page(void * addr) {
>+	__sb1_writeback_inv_dcache_range((unsigned long)addr,
>+					 (unsigned long)addr + 
>PAGE_SIZE); }
>+
>+static void sb1_flush_data_cache_page(unsigned long addr) {
>+	on_each_cpu(local_sb1_flush_data_cache_page, (void *) 
>addr, 1, 1); }
>+
> /*
>  * When flushing a range in the icache, we have to first writeback
>  * the dcache for the same range, so new ifetches will see 
>any @@ -527,8 +538,8 @@ #endif
> 	flush_cache_page = sb1_flush_cache_page;
> 
> 	flush_cache_sigtramp = sb1_flush_cache_sigtramp;
>-	local_flush_data_cache_page = (void *) sb1_nop;
>-	flush_data_cache_page = (void *) sb1_nop;
>+	local_flush_data_cache_page = local_sb1_flush_data_cache_page;
>+	flush_data_cache_page = sb1_flush_data_cache_page;
> 
> 	/* Full flush */
> 	__flush_cache_all = sb1___flush_cache_all;
>
>
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-08-21 19:27     ` Manoj Ekbote
@ 2006-08-23  4:16       ` Atsushi Nemoto
  2006-09-26  3:05         ` Manoj Ekbote
  0 siblings, 1 reply; 16+ messages in thread
From: Atsushi Nemoto @ 2006-08-23  4:16 UTC (permalink / raw)
  To: manoje; +Cc: mark.e.mason, linux-mips, ralf, ths

On Mon, 21 Aug 2006 12:27:47 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> The patch doesn't help. The kernel hangs in the same fashion. 

Thank you for testing.

Then I have no idea why the kernel hangs...


Random thoughts:

Does it still hang on init=/bin/sh?

Does enabling second and third "#if 0" blocks in arch/mips/mm/fault.c
show some useful information?

Finally, I think there is no serious reason separating c-sb1.c from
c-r4k.c.  The c-r4k.c support both vtagged-icache and pindexed-dcache,
therefore SB1 can use it too.

mm/c-r4k.c:probe_pcache()
	switch (c->cputype) {
	case CPU_20KC:
	case CPU_25KF:
	case CPU_SB1:
	case CPU_SB1A:
		c->dcache.flags |= MIPS_CACHE_PINDEX;
	case CPU_R10000:
	case CPU_R12000:
	case CPU_R14000:
		break;

kernel/cpu-probe.c:cpu_probe_sibyte()
#if 0
	c->options &= ~MIPS_CPU_4K_CACHE;
	c->options |= MIPS_CPU_SB1_CACHE;
#endif

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-08-23  4:16       ` Atsushi Nemoto
@ 2006-09-26  3:05         ` Manoj Ekbote
  2006-09-26  9:39           ` Atsushi Nemoto
  0 siblings, 1 reply; 16+ messages in thread
From: Manoj Ekbote @ 2006-09-26  3:05 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: Mark E Mason, linux-mips, ralf, ths

Hello,

The latest tip still has problems with booting on Broadcom boards.
I turned on a couple of printk's in the page fault handler and I see the
following messages:

[4294669.578000] VFS: Mounted root (nfs filesystem).
[4294669.579000] Freeing unused kernel memory: 116k freed
[4294669.585000] Cpu0[init:1:0000000010000540:1:ffffffff80214a1c]
[4294669.589000] Cpu0[init:1:000000002ab01a30:1:ffffffff80214a1c]
[4294669.594000] Cpu0[init:1:000000002aaa8b00:0:000000002aaa8b00]
[4294669.595000] Cpu0[init:1:000000002aaa9364:0:000000002aaa9364]
[4294669.596000] Cpu0[init:1:000000002aab3200:0:000000002aab3200]
[4294669.600000] Cpu0[init:1:0000000000000004:0:000000002aab32f4]
[4294669.601000] do_page_fault() #2: sending SIGSEGV to init for invalid
read access from
[4294669.601000] 0000000000000004 (epc == 000000002aab32f4, ra ==
000000002aaa8cbc)
[4294669.602000] Cpu0[init:1:0000000000000004:0:000000002aab32f4]
[4294669.603000] do_page_fault() #2: sending SIGSEGV to init for invalid
read access from
[4294669.603000] 0000000000000004 (epc == 000000002aab32f4, ra ==
000000002aaa8cbc)
[4294669.604000] Cpu0[init:1:0000000000000004:0:000000002aab32f4]
[4294669.605000] do_page_fault() #2: sending SIGSEGV to init for invalid
read access from
[4294669.605000] 0000000000000004 (epc == 000000002aab32f4, ra ==
000000002aaa8cbc)

It looks like a cache corruption issue.  Did the removal of
flush_icache_page
cause this? 

Any thoughts appreciated.

Thx,
/manoj


>-----Original Message-----
>From: Atsushi Nemoto [mailto:anemo@mba.ocn.ne.jp] 
>Sent: Tuesday, August 22, 2006 9:16 PM
>To: Manoj Ekbote
>Cc: Mark E Mason; linux-mips@linux-mips.org; 
>ralf@linux-mips.org; ths@networkno.de
>Subject: Re: [MIPS] SB1: Build fix: delete initialization of 
>flush_icache_page pointer.
>
>On Mon, 21 Aug 2006 12:27:47 -0700, "Manoj Ekbote" 
><manoje@broadcom.com> wrote:
>> The patch doesn't help. The kernel hangs in the same fashion. 
>
>Thank you for testing.
>
>Then I have no idea why the kernel hangs...
>
>
>Random thoughts:
>
>Does it still hang on init=/bin/sh?
>
>Does enabling second and third "#if 0" blocks in 
>arch/mips/mm/fault.c show some useful information?
>
>Finally, I think there is no serious reason separating c-sb1.c 
>from c-r4k.c.  The c-r4k.c support both vtagged-icache and 
>pindexed-dcache, therefore SB1 can use it too.
>
>mm/c-r4k.c:probe_pcache()
>	switch (c->cputype) {
>	case CPU_20KC:
>	case CPU_25KF:
>	case CPU_SB1:
>	case CPU_SB1A:
>		c->dcache.flags |= MIPS_CACHE_PINDEX;
>	case CPU_R10000:
>	case CPU_R12000:
>	case CPU_R14000:
>		break;
>
>kernel/cpu-probe.c:cpu_probe_sibyte()
>#if 0
>	c->options &= ~MIPS_CPU_4K_CACHE;
>	c->options |= MIPS_CPU_SB1_CACHE;
>#endif
>
>---
>Atsushi Nemoto
>
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-26  3:05         ` Manoj Ekbote
@ 2006-09-26  9:39           ` Atsushi Nemoto
  2006-09-27  1:54             ` Manoj Ekbote
  0 siblings, 1 reply; 16+ messages in thread
From: Atsushi Nemoto @ 2006-09-26  9:39 UTC (permalink / raw)
  To: manoje; +Cc: mark.e.mason, linux-mips, ralf, ths

On Mon, 25 Sep 2006 20:05:59 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> The latest tip still has problems with booting on Broadcom boards.
> I turned on a couple of printk's in the page fault handler and I see the
> following messages:
...
> It looks like a cache corruption issue.  Did the removal of
> flush_icache_page
> cause this? 

Yes perhaps.  But flush_icache_page() itself is obsolete API and
should be gone (see Documentation/cachetlb.txt).  So there should be
fault in somewhere else.

I think 

http://www.linux-mips.org/archives/linux-mips/2006-08/msg00184.html

is still needed, but it seems not enough.

If reverting flush_icache_page() worked, then you can debug more.

1. kill part of local_sb1_flush_icache_page().

If killing __sb1_writeback_inv_dcache_phys_range() part was OK, then
it would be dcache issue, if killing drop_mmu_context() part was OK,
then it would be icache issue.

2. kill calls of flush_icache_page().

If is used in only 3 places.

mm/fremap.c:    flush_icache_page(vma, page);
mm/memory.c:    flush_icache_page(vma, page);
mm/memory.c:            flush_icache_page(vma, new_page);

Finding which lines are required might help further investigation.


Another possible approach might be trying c-r4k.c instead of c-sb1.c.

If you wanted to debug with latest git tree, note that
include/asm-mips/hazard.h in current lmo git tree seems broken.  The
fix was already posted to this ML so hopefully we can see in git tree
soon...

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-26  9:39           ` Atsushi Nemoto
@ 2006-09-27  1:54             ` Manoj Ekbote
  2006-09-27 14:58               ` Atsushi Nemoto
  0 siblings, 1 reply; 16+ messages in thread
From: Manoj Ekbote @ 2006-09-27  1:54 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips, ralf, Mark E Mason

Hi,

I tried the patch that you pointed to and UP kernel boots fine. Looks
like that was a icache and dcache coherency problem now that there is no
flush_icache_page implementation.

The SMP kernel still has trouble.Turning on the first printk in fault.c
makes it work..which is interesting.
I added a __sb1_flush_icache_range call with dcache invalidation..still
no help. I don't see a SIGSEGV message now.The kernel hangs with no
response to keystrokes and the soft lockup detect error shows up after
sometime.

Oh, inserting flush_icache_page caused the kernel to panic. I also see
that __flush_icache_page is not used anywhere. Any future use?

Thx.

>-----Original Message-----
>From: Atsushi Nemoto [mailto:anemo@mba.ocn.ne.jp] 
>Sent: Tuesday, September 26, 2006 2:40 AM
>To: Manoj Ekbote
>Cc: Mark E Mason; linux-mips@linux-mips.org; 
>ralf@linux-mips.org; ths@networkno.de
>Subject: Re: [MIPS] SB1: Build fix: delete initialization of 
>flush_icache_page pointer.
>
>On Mon, 25 Sep 2006 20:05:59 -0700, "Manoj Ekbote" 
><manoje@broadcom.com> wrote:
>> The latest tip still has problems with booting on Broadcom boards.
>> I turned on a couple of printk's in the page fault handler and I see 
>> the following messages:
>...
>> It looks like a cache corruption issue.  Did the removal of 
>> flush_icache_page cause this?
>
>Yes perhaps.  But flush_icache_page() itself is obsolete API 
>and should be gone (see Documentation/cachetlb.txt).  So there 
>should be fault in somewhere else.
>
>I think 
>
>http://www.linux-mips.org/archives/linux-mips/2006-08/msg00184.html
>
>is still needed, but it seems not enough.
>
>If reverting flush_icache_page() worked, then you can debug more.
>
>1. kill part of local_sb1_flush_icache_page().
>
>If killing __sb1_writeback_inv_dcache_phys_range() part was 
>OK, then it would be dcache issue, if killing 
>drop_mmu_context() part was OK, then it would be icache issue.
>
>2. kill calls of flush_icache_page().
>
>If is used in only 3 places.
>
>mm/fremap.c:    flush_icache_page(vma, page);
>mm/memory.c:    flush_icache_page(vma, page);
>mm/memory.c:            flush_icache_page(vma, new_page);
>
>Finding which lines are required might help further investigation.
>
>
>Another possible approach might be trying c-r4k.c instead of c-sb1.c.
>
>If you wanted to debug with latest git tree, note that 
>include/asm-mips/hazard.h in current lmo git tree seems 
>broken.  The fix was already posted to this ML so hopefully we 
>can see in git tree soon...
>
>---
>Atsushi Nemoto
>
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-27  1:54             ` Manoj Ekbote
@ 2006-09-27 14:58               ` Atsushi Nemoto
  2006-09-27 15:11                 ` Maciej W. Rozycki
  2006-09-28  2:17                 ` Manoj Ekbote
  0 siblings, 2 replies; 16+ messages in thread
From: Atsushi Nemoto @ 2006-09-27 14:58 UTC (permalink / raw)
  To: manoje; +Cc: linux-mips, ralf, mark.e.mason

On Tue, 26 Sep 2006 18:54:40 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> I tried the patch that you pointed to and UP kernel boots fine. Looks
> like that was a icache and dcache coherency problem now that there is no
> flush_icache_page implementation.

Hmm ... so it might be a SMP kernel problem?

> Oh, inserting flush_icache_page caused the kernel to panic. I also see
> that __flush_icache_page is not used anywhere. Any future use?

I think __flush_icache_page should go away.  Here is a patch.
http://www.linux-mips.org/archives/linux-mips/2006-09/msg00003.html

BTW, what you tried is something like this ?

include/asm-mips/cacheflush.h:
static inline void flush_icache_page(struct vm_area_struct *vma,
	struct page *page)
{
	__flush_icache_page(vma, page);
}

If this caused panic, what is the message?

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-27 14:58               ` Atsushi Nemoto
@ 2006-09-27 15:11                 ` Maciej W. Rozycki
  2006-09-28  2:17                 ` Manoj Ekbote
  1 sibling, 0 replies; 16+ messages in thread
From: Maciej W. Rozycki @ 2006-09-27 15:11 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: manoje, linux-mips, ralf, mark.e.mason

On Wed, 27 Sep 2006, Atsushi Nemoto wrote:

> BTW, what you tried is something like this ?
> 
> include/asm-mips/cacheflush.h:
> static inline void flush_icache_page(struct vm_area_struct *vma,
> 	struct page *page)
> {
> 	__flush_icache_page(vma, page);
> }
> 
> If this caused panic, what is the message?

 I have:

#define flush_icache_page __flush_icache_page

there for the time being while working on something else and it works just 
fine with my SWARM and 2.6.18-20060920.

  Maciej

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-27 14:58               ` Atsushi Nemoto
  2006-09-27 15:11                 ` Maciej W. Rozycki
@ 2006-09-28  2:17                 ` Manoj Ekbote
  2006-09-28  4:27                   ` Atsushi Nemoto
  2006-09-28  9:44                   ` Ralf Baechle
  1 sibling, 2 replies; 16+ messages in thread
From: Manoj Ekbote @ 2006-09-28  2:17 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips, ralf, Mark E Mason


>On Tue, 26 Sep 2006 18:54:40 -0700, "Manoj Ekbote" 
><manoje@broadcom.com> wrote:
>> I tried the patch that you pointed to and UP kernel boots 
>fine. Looks 
>> like that was a icache and dcache coherency problem now that 
>there is 
>> no flush_icache_page implementation.
>
>Hmm ... so it might be a SMP kernel problem?
>
>> Oh, inserting flush_icache_page caused the kernel to panic. 
>I also see 
>> that __flush_icache_page is not used anywhere. Any future use?
>
>I think __flush_icache_page should go away.  Here is a patch.
>http://www.linux-mips.org/archives/linux-mips/2006-09/msg00003.html
>
>BTW, what you tried is something like this ?

I added a line that initializes the flush_icache_page pointer in
sb1_cache_init.
The below method worked. The SMP kernel boots fine now. Removing parts
of local_sb1_flush_icache_page doesn't help. It looks like
flush_icache_page in mm/memory.c:do_no_page is needed. Removing it will
fail the boot process.

I am wondering if people have booted the latest tree on non-Broadcom
boards...curious to know if the removal of flush_icache_page has
affected them.

Thanks.

>include/asm-mips/cacheflush.h:
>static inline void flush_icache_page(struct vm_area_struct *vma,
>	struct page *page)
>{
>	__flush_icache_page(vma, page);
>}
>
>If this caused panic, what is the message?
>
>---
>Atsushi Nemoto
>
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-28  2:17                 ` Manoj Ekbote
@ 2006-09-28  4:27                   ` Atsushi Nemoto
  2006-09-28 10:14                     ` Ralf Baechle
  2006-10-02  3:17                     ` Manoj Ekbote
  2006-09-28  9:44                   ` Ralf Baechle
  1 sibling, 2 replies; 16+ messages in thread
From: Atsushi Nemoto @ 2006-09-28  4:27 UTC (permalink / raw)
  To: manoje; +Cc: linux-mips, ralf, mark.e.mason

On Wed, 27 Sep 2006 19:17:16 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> I added a line that initializes the flush_icache_page pointer in
> sb1_cache_init.
> The below method worked. The SMP kernel boots fine now. Removing parts
> of local_sb1_flush_icache_page doesn't help. It looks like
> flush_icache_page in mm/memory.c:do_no_page is needed. Removing it will
> fail the boot process.

Thank you for testing.

Now I'm wondering why do_no_page() works on SMP.

	if (pte_none(*page_table)) {
		flush_icache_page(vma, new_page);
		entry = mk_pte(new_page, vma->vm_page_prot);
		if (write_access)
			entry = maybe_mkwrite(pte_mkdirty(entry), vma);
		set_pte_at(mm, address, page_table, entry);
...
	} else {
		/* One of our sibling threads was faster, back out. */
		page_cache_release(new_page);
		goto unlock;
	}

	/* no need to invalidate: a not-present page shouldn't be cached */
	update_mmu_cache(vma, address, entry);

Other CPU might be able to load new pte value just after set_ste_at(),
but dcache is not flushed until update_mmu_cache().  Maybe I missed
something...

> I am wondering if people have booted the latest tree on non-Broadcom
> boards...curious to know if the removal of flush_icache_page has
> affected them.

Yes, Ralf and Thiemo said even some SB1 boards can work fine without
flush_icache_page.

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-28  2:17                 ` Manoj Ekbote
  2006-09-28  4:27                   ` Atsushi Nemoto
@ 2006-09-28  9:44                   ` Ralf Baechle
  1 sibling, 0 replies; 16+ messages in thread
From: Ralf Baechle @ 2006-09-28  9:44 UTC (permalink / raw)
  To: Manoj Ekbote; +Cc: Atsushi Nemoto, linux-mips, Mark E Mason

On Wed, Sep 27, 2006 at 07:17:16PM -0700, Manoj Ekbote wrote:

> I am wondering if people have booted the latest tree on non-Broadcom
> boards...curious to know if the removal of flush_icache_page has
> affected them.

I applied that patch only after some positive test feedback ...

  Ralf

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-28  4:27                   ` Atsushi Nemoto
@ 2006-09-28 10:14                     ` Ralf Baechle
  2006-10-02  3:17                     ` Manoj Ekbote
  1 sibling, 0 replies; 16+ messages in thread
From: Ralf Baechle @ 2006-09-28 10:14 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: manoje, linux-mips, mark.e.mason

On Thu, Sep 28, 2006 at 01:27:12PM +0900, Atsushi Nemoto wrote:
> Date:	Thu, 28 Sep 2006 13:27:12 +0900 (JST)
> To:	manoje@broadcom.com
> Cc:	linux-mips@linux-mips.org, ralf@linux-mips.org,
> 	mark.e.mason@broadcom.com
> Subject: Re: [MIPS] SB1: Build fix: delete initialization of
>  flush_icache_page pointer.
> From:	Atsushi Nemoto <anemo@mba.ocn.ne.jp>
> Content-Type: Text/Plain; charset=us-ascii
> 
> On Wed, 27 Sep 2006 19:17:16 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> > I added a line that initializes the flush_icache_page pointer in
> > sb1_cache_init.
> > The below method worked. The SMP kernel boots fine now. Removing parts
> > of local_sb1_flush_icache_page doesn't help. It looks like
> > flush_icache_page in mm/memory.c:do_no_page is needed. Removing it will
> > fail the boot process.
> 
> Thank you for testing.
> 
> Now I'm wondering why do_no_page() works on SMP.
> 
> 	if (pte_none(*page_table)) {
> 		flush_icache_page(vma, new_page);
> 		entry = mk_pte(new_page, vma->vm_page_prot);
> 		if (write_access)
> 			entry = maybe_mkwrite(pte_mkdirty(entry), vma);
> 		set_pte_at(mm, address, page_table, entry);
> ...
> 	} else {
> 		/* One of our sibling threads was faster, back out. */
> 		page_cache_release(new_page);
> 		goto unlock;
> 	}
> 
> 	/* no need to invalidate: a not-present page shouldn't be cached */
> 	update_mmu_cache(vma, address, entry);
> 
> Other CPU might be able to load new pte value just after set_ste_at(),
> but dcache is not flushed until update_mmu_cache().  Maybe I missed
> something...
> 
> > I am wondering if people have booted the latest tree on non-Broadcom
> > boards...curious to know if the removal of flush_icache_page has
> > affected them.
> 
> Yes, Ralf and Thiemo said even some SB1 boards can work fine without
> flush_icache_page.

The have to by definition - flush_icache_page is going to go away.

Note the SB1 cache code is a bizarre beast.  It totally avoids Hit-type
cacheops because those used to have problems on early silicon.  So my
favorite solution would be to dump c-sb1.c and deal with any SB1 issues
that may pop up in c-r4k.c.

  Ralf

^ permalink raw reply	[flat|nested] 16+ messages in thread

* RE: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-09-28  4:27                   ` Atsushi Nemoto
  2006-09-28 10:14                     ` Ralf Baechle
@ 2006-10-02  3:17                     ` Manoj Ekbote
  1 sibling, 0 replies; 16+ messages in thread
From: Manoj Ekbote @ 2006-10-02  3:17 UTC (permalink / raw)
  To: Atsushi Nemoto; +Cc: linux-mips, ralf, Mark E Mason




-----Original Message-----
From: Atsushi Nemoto [mailto:anemo@mba.ocn.ne.jp]
Sent: Wed 9/27/2006 9:27 PM
To: Manoj Ekbote
Cc: linux-mips@linux-mips.org; ralf@linux-mips.org; Mark E Mason
Subject: Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
 
On Wed, 27 Sep 2006 19:17:16 -0700, "Manoj Ekbote" <manoje@broadcom.com> wrote:
> I added a line that initializes the flush_icache_page pointer in
> sb1_cache_init.
> The below method worked. The SMP kernel boots fine now. Removing parts
> of local_sb1_flush_icache_page doesn't help. It looks like
> flush_icache_page in mm/memory.c:do_no_page is needed. Removing it will
> fail the boot process.

Thank you for testing.

Now I'm wondering why do_no_page() works on SMP.

	if (pte_none(*page_table)) {
		flush_icache_page(vma, new_page);
		entry = mk_pte(new_page, vma->vm_page_prot);
		if (write_access)
			entry = maybe_mkwrite(pte_mkdirty(entry), vma);
		set_pte_at(mm, address, page_table, entry);
...
	} else {
		/* One of our sibling threads was faster, back out. */
		page_cache_release(new_page);
		goto unlock;
	}

	/* no need to invalidate: a not-present page shouldn't be cached */
	update_mmu_cache(vma, address, entry);

Other CPU might be able to load new pte value just after set_ste_at(),
but dcache is not flushed until update_mmu_cache().  Maybe I missed
something...

It looks like the page with instructions has to be invalidated.I did a flush_cache_page in __update_cache.That seems to help too.

> I am wondering if people have booted the latest tree on non-Broadcom
> boards...curious to know if the removal of flush_icache_page has
> affected them.

Yes, Ralf and Thiemo said even some SB1 boards can work fine without
flush_icache_page.

---
Atsushi Nemoto

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
  2006-08-13 13:38 ` Atsushi Nemoto
@ 2006-08-16 13:31   ` Atsushi Nemoto
  0 siblings, 0 replies; 16+ messages in thread
From: Atsushi Nemoto @ 2006-08-16 13:31 UTC (permalink / raw)
  To: linux-mips; +Cc: ralf

Yet another build fix.

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>

diff --git a/arch/mips/mm/c-r3k.c b/arch/mips/mm/c-r3k.c
index ccd61f6..e1f35ef 100644
--- a/arch/mips/mm/c-r3k.c
+++ b/arch/mips/mm/c-r3k.c
@@ -335,8 +335,8 @@ void __init r3k_cache_init(void)
 	flush_cache_mm = r3k_flush_cache_mm;
 	flush_cache_range = r3k_flush_cache_range;
 	flush_cache_page = r3k_flush_cache_page;
-	flush_icache_page = r3k_flush_icache_page;
-	__flush_icache_range = r3k_flush_icache_range;
+	__flush_icache_page = r3k_flush_icache_page;
+	flush_icache_range = r3k_flush_icache_range;
 
 	flush_cache_sigtramp = r3k_flush_cache_sigtramp;
 	local_flush_data_cache_page = local_r3k_flush_data_cache_page;

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer.
       [not found] <S20037882AbWHMBM6/20060813011258Z+2870@ftp.linux-mips.org>
@ 2006-08-13 13:38 ` Atsushi Nemoto
  2006-08-16 13:31   ` Atsushi Nemoto
  0 siblings, 1 reply; 16+ messages in thread
From: Atsushi Nemoto @ 2006-08-13 13:38 UTC (permalink / raw)
  To: linux-mips; +Cc: ralf

One more.

[MIPS] missing bits for "Retire flush_icache_page from mm use."

Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>

diff --git a/arch/mips/mm/c-tx39.c b/arch/mips/mm/c-tx39.c
index cdb1942..932a09d 100644
--- a/arch/mips/mm/c-tx39.c
+++ b/arch/mips/mm/c-tx39.c
@@ -408,7 +408,7 @@ void __init tx39_cache_init(void)
 		flush_cache_mm = tx39_flush_cache_mm;
 		flush_cache_range = tx39_flush_cache_range;
 		flush_cache_page = tx39_flush_cache_page;
-		flush_icache_page = tx39_flush_icache_page;
+		__flush_icache_page = tx39_flush_icache_page;
 		flush_icache_range = tx39_flush_icache_range;
 
 		flush_cache_sigtramp = tx39_flush_cache_sigtramp;

^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2006-10-02  3:19 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <S20037884AbWHMBM7/20060813011259Z+2871@ftp.linux-mips.org>
2006-08-17 21:20 ` [MIPS] SB1: Build fix: delete initialization of flush_icache_page pointer Mark E Mason
2006-08-18  1:51   ` Atsushi Nemoto
2006-08-21 19:27     ` Manoj Ekbote
2006-08-23  4:16       ` Atsushi Nemoto
2006-09-26  3:05         ` Manoj Ekbote
2006-09-26  9:39           ` Atsushi Nemoto
2006-09-27  1:54             ` Manoj Ekbote
2006-09-27 14:58               ` Atsushi Nemoto
2006-09-27 15:11                 ` Maciej W. Rozycki
2006-09-28  2:17                 ` Manoj Ekbote
2006-09-28  4:27                   ` Atsushi Nemoto
2006-09-28 10:14                     ` Ralf Baechle
2006-10-02  3:17                     ` Manoj Ekbote
2006-09-28  9:44                   ` Ralf Baechle
     [not found] <S20037882AbWHMBM6/20060813011258Z+2870@ftp.linux-mips.org>
2006-08-13 13:38 ` Atsushi Nemoto
2006-08-16 13:31   ` Atsushi Nemoto

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.