On Fri, Sep 04, 2009 at 05:18:11PM +0530, C.A, Subramaniam wrote: > @@ -70,31 +89,37 @@ static inline void mbox_write_reg(u32 val, size_t ofs) > static int omap2_mbox_startup(struct omap_mbox *mbox) > { > unsigned int l; > + if (!mbox_configured) { > + mbox_ick_handle = clk_get(NULL, "mailboxes_ick"); > + if (IS_ERR(mbox_ick_handle)) { > + printk(KERN_ERR "Could not get mailboxes_ick\n"); > + return -ENODEV; > + } > + clk_enable(mbox_ick_handle); > > - mbox_ick_handle = clk_get(NULL, "mailboxes_ick"); > - if (IS_ERR(mbox_ick_handle)) { > - printk("Could not get mailboxes_ick\n"); > - return -ENODEV; > - } > - clk_enable(mbox_ick_handle); > - > - l = mbox_read_reg(MAILBOX_REVISION); > - pr_info("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, (l & 0x0f)); > - > - /* set smart-idle & autoidle */ > - l = mbox_read_reg(MAILBOX_SYSCONFIG); > - l |= 0x00000011; > - mbox_write_reg(l, MAILBOX_SYSCONFIG); > + l = mbox_read_reg(MAILBOX_REVISION); > + pr_info("omap mailbox rev %d.%d\n", (l & 0xf0) >> 4, > + (l & 0x0f)); > > + /* set smart-idle & autoidle */ > + l = mbox_read_reg(MAILBOX_SYSCONFIG); > + l |= 0x00000011; > + mbox_write_reg(l, MAILBOX_SYSCONFIG); > + } > + mbox_configured++;
I assume you're doing this because this function can be called multiple times. What protects this against races? > omap2_mbox_enable_irq(mbox, IRQ_RX); > > return 0; > } > > static void omap2_mbox_shutdown(struct omap_mbox *mbox) > -{ > - clk_disable(mbox_ick_handle); > - clk_put(mbox_ick_handle); > +{ if (mbox_configured > 0) > + mbox_configured--; > + if (!mbox_configured) { > + clk_disable(mbox_ick_handle); > + clk_put(mbox_ick_handle); > + mbox_ick_handle = NULL; > + } Same concern - what protects mbox_configured and the associated code against races? -- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html