Re: iop_msg_pool

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Wed, 26 Jun 2013, Geert Uytterhoeven wrote:

arch/m68k/mac/iop.c has:

static struct iop_msg iop_msg_pool[NUM_IOP_MSGS];

As iop_msg_pool consumes 4928 bytes, it should be allocated dynamically, 
especially for multi-platform kernels not running on Mac.

I agree. Though I don't care much for multi-platform kernels: bloat in 
portable code is easily excused when most users of that code run it on 
recent hardware. We don't have that excuse.


Furthermore:

/*
 * Initialize the IOPs, if present.
 */

void __init iop_init(void)
{
        int i;

        if (iop_scc_present) {
                printk("IOP: detected SCC IOP at %p\n", iop_base[IOP_NUM_SCC]);
        }
        if (iop_ism_present) {
                printk("IOP: detected ISM IOP at %p\n", iop_base[IOP_NUM_ISM]);
                iop_start(iop_base[IOP_NUM_ISM]);
                iop_alive(iop_base[IOP_NUM_ISM]); /* clears the alive flag */
        }

Maybe use kcalloc() to allocate iop_msg_pool, iop_send_queue and 
iop_listeners and remove all of the following initialisation. I don't see 
a convenient way to call kfree() though.


        /* Make the whole pool available and empty the queues */

        for (i = 0 ; i < NUM_IOP_MSGS ; i++) {
                iop_msg_pool[i].status = IOP_MSGSTATUS_UNUSED;
        }

        for (i = 0 ; i < NUM_IOP_CHAN ; i++) {
                iop_send_queue[IOP_NUM_SCC][i] = NULL;
                iop_send_queue[IOP_NUM_ISM][i] = NULL;
                iop_listeners[IOP_NUM_SCC][i].devname = NULL;
                iop_listeners[IOP_NUM_SCC][i].handler = NULL;
                iop_listeners[IOP_NUM_ISM][i].devname = NULL;
                iop_listeners[IOP_NUM_ISM][i].handler = NULL;
        }
}

However, despite the comment at the top, all of the above is done
unconditionally?

Seems so. And it is pointless AFAICS with grep.

Do all Macs use the IOP functionality?

No. iop_scc_present and iop_ism_present are accurate.

So far, the only driver to make use of this functionality is 
drivers/macintosh/adb-iop.c:

int adb_iop_probe(void)
{
        if (!iop_ism_present) return -ENODEV;
        return 0;
}

Finn


P.S. Before anyone mentions zorro_autocon: yes, it's on my list ;-)

Gr{oetje,eeting}s,

                        Geert
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux