* Greg KH <[email protected]> [2011-03-21 14:45:01]:

> On Sat, Mar 19, 2011 at 11:46:58PM +0530, Kamalesh Babulal wrote:
> >     powerpc: rtas_flash needs to use rtas_data_buf
> > 
> >     Commit: bd2b64a12bf55bec0d1b949e3dca3f8863409646 upstream
> > 
> >     When trying to flash a machine via the update_flash command, Anton 
> > received the
> >     following error:
> > 
> >         Restarting system.
> >         FLASH: kernel bug...flash list header addr above 4GB
> > 
> >     The code in question has a comment that the flash list should be in
> >     the kernel data and therefore under 4GB:
> > 
> >             /* NOTE: the "first" block list is a global var with no data
> >              * blocks in the kernel data segment.  We do this because
> >              * we want to ensure this block_list addr is under 4GB.
> >              */
> > 
> >     Unfortunately the Kconfig option is marked tristate which means the 
> > variable
> >     may not be in the kernel data and could be above 4GB.
> > 
> >     Instead of relying on the data segment being below 4GB, use the static
> >     data buffer allocated by the kernel for use by rtas.  Since we don't
> >     use the header struct directly anymore, convert it to a simple pointer.
> > 
> >     Reported-By: Anton Blanchard <[email protected]>
> >     Signed-off-by: Milton Miller <[email protected]
> >     Tested-By: Anton Blanchard <[email protected]>
> >     Signed-off-by: Benjamin Herrenschmidt <[email protected]>
> >     Signed-off-by: Kamalesh Babulal <[email protected]>
> > ---
> > arch/powerpc/kernel/rtas_flash.c |   41 
> > ++++++++++++++++++++-----------------
> >  1 files changed, 22 insertions(+), 19 deletions(-)
> 
> This diffstat differs from what the original commit had:
>  arch/powerpc/kernel/rtas_flash.c |   39 
> +++++++++++++++++++++------------------
>  1 file changed, 21 insertions(+), 18 deletions(-)
> 
> So I went with the original commit, ok?
>

Sorry, my bad the mismatch was due to the indentation difference in the hunk

@@ -592,8 +589,8 @@ static void rtas_flash_firmware(int reboot_type)
    unsigned long rtas_block_list;
         int i, status, update_token;
                 
-   if (rtas_firmware_flash_list.next == NULL)
-       return;     /* nothing to do */
+   if (rtas_firmware_flash_list == NULL)
+       return; /* nothing to do */
                  
will make sure, it does not happens again.

> Why are you diverging from the original?
> 
> thanks,
> 
> greg k-h
                        
                        Kamalesh

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to