Re: show_mem panics in 2.4.22

From: Jason Baron <jbaron_at_redhat.com>
Date: 2003-10-29 03:45:25
On Tue, 28 Oct 2003, John Marvin wrote:

> > I'm running linux-2.4.22-ia64-030909 on an rx2600.  The show_mem()
> > function always causes a kernel panic.  This is reached when you send
> > 'SysRq m' or serial 'BREAK m' to find out about used memory, etc.
> >
> > The problem seems to be that this function is written assuming that
> > the discontiguous memory scheme is used, but that's not the case in my
> > configuration.  I see that in 2.6.0-test8 there are two versions of
> > the function for the contig/discontig cases.  The crash is on the line
> > that reads through pgdat->node_mem_map.  I'm not sure exactly what is
> > wrong with that.
> 
> 
> I'm not sure why this just started to show up. The problem is that
> the size of struct page doesn't divide into the page size evenly, so
> the structure overlaps holes in the mem_map array. Here is a fix,
> but I am still not sure of the performance implications (extra memory
> dereference). There may be a better fix, although not as simple, if
> this has performance implications.
> 
> The same bug probably exists in 2.6.
> 
> John Marvin
> jsm@fc.hp.com
> 
> 
> --- a/arch/ia64/mm/init.c	Tue Oct 28 01:25:54 2003
> +++ b/arch/ia64/mm/init.c	Tue Oct 28 01:31:26 2003
> @@ -485,7 +485,8 @@ ia64_page_valid (struct page *page)
>  {
>  	char byte;
>  
> -	return __get_user(byte, (char *) page) == 0;
> +	return     (__get_user(byte, (char *) page) == 0)
> +		&& (__get_user(byte, (char *) (page + 1) - 1) == 0);
>  }
>  
>  #define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1))
> -
> To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

The count in show_mem() is not quite accurate, since we might count page
structures that are mapped to valid memory, but are zero filled and do not
correspond to valid memory. show_mem() will no longer oops, though. Since
ia64_page_valid, could be on several hot paths, we might just want to
restrict this check to the show_mem() function. This could have just
cropped up, if struct page had changed in size.

-Jason


-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Tue Oct 28 11:52:44 2003

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:20 EST