[BUG] flash failure with CONFIG_RTAS_FLASH=m

3 messages, 3 authors, 2007-01-08 · open the first message on its own page

[BUG] flash failure with CONFIG_RTAS_FLASH=m

From: Nathan Lynch <hidden>
Date: 2007-01-04 23:50:00

Hi-

Was trying to flash firmware on a JS20 with the rtas flash code built
modular and I got the "kernel bug" printk in rtas_flash_firmware:

        /* 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.
         */
        rtas_firmware_flash_list.num_blocks = 0;
        flist = (struct flash_block_list *)&rtas_firmware_flash_list;
        rtas_block_list = virt_to_abs(flist);
        if (rtas_block_list >= 4UL*1024*1024*1024) {
                printk(KERN_ALERT "FLASH: kernel bug...flash list
        header addr above 4GB\n");
                return;
        }

The problem doesn't happen if CONFIG_RTAS_FLASH=y.

What's the best way to fix this?  Should rtas_firmware_flash_list be
defined in some non-modular code and exported?

Re: [BUG] flash failure with CONFIG_RTAS_FLASH=m

From: Olof Johansson <hidden>
Date: 2007-01-05 00:04:51

On Thu, 4 Jan 2007 17:49:51 -0600 Nathan Lynch [off-list ref] wrote:
The problem doesn't happen if CONFIG_RTAS_FLASH=y.

What's the best way to fix this?  Should rtas_firmware_flash_list be
defined in some non-modular code and exported?
Makes sense to me.

You could allocate it dynamically really early (i.e. lmb_alloc) since
that's the only allocator that we can give limits to where in the
address range it can allocate. It seems to be overkill in this case
though, it's just a page worth of data.


-Olof

Re: [BUG] flash failure with CONFIG_RTAS_FLASH=m

From: Michael Ellerman <hidden>
Date: 2007-01-08 01:09:04

On Thu, 2007-01-04 at 18:04 -0600, Olof Johansson wrote:
On Thu, 4 Jan 2007 17:49:51 -0600 Nathan Lynch [off-list ref] wrote:
quoted
The problem doesn't happen if CONFIG_RTAS_FLASH=y.

What's the best way to fix this?  Should rtas_firmware_flash_list be
defined in some non-modular code and exported?
Makes sense to me.

You could allocate it dynamically really early (i.e. lmb_alloc) since
that's the only allocator that we can give limits to where in the
address range it can allocate. It seems to be overkill in this case
though, it's just a page worth of data.
There's the ZONE stuff, but it doesn't help us because our ZONE_DMA ==
all of ram - we'd need to add another ZONE below that, which is generic
code :/

cheers

-- 
Michael Ellerman
OzLabs, IBM Australia Development Lab

wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help