On Mon, Mar 16, 2009 at 7:20 PM, Atsushi Nemoto <anemo@xxxxxxxxxxxxx> wrote: > On Mon, 16 Mar 2009 14:50:46 -0700, Dan Williams <dan.j.williams@xxxxxxxxx> wrote: >> > And above "continue" looks buggy anyway. Keeping incomplete channels >> > in device->channels list looks very dangerous... >> >> Yes it does. Here is the proposed fix: >> -----> >> dmaengine: fail device registration if channel registration fails >> >> From: Dan Williams <dan.j.williams@xxxxxxxxx> >> >> Atsushi points out: >> "If alloc_percpu or kzalloc failed, chan_id does not match with its >> position in device->channels list. >> >> And above "continue" looks buggy anyway. Keeping incomplete channels >> in device->channels list looks very dangerous..." >> >> Reported-by: Atsushi Nemoto <anemo@xxxxxxxxxxxxx> >> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> > > Thanks, but it seems a hole sill exists. If alloc_percpu or kzalloc > for the first channel failed, when idr_ref will be freed ? > True, we need a check like the following: /* if we never registered a channel just release the idr */ if (atomic_read(idr_ref) == 0) { mutex_lock(&dma_list_mutex); idr_remove(&dma_idr, device->dev_id); mutex_unlock(&dma_list_mutex); kfree(idr_ref); return rc; } > Hmm.. why idr_ref is dynamically allocated? Just putting it in > dma_device makes thing more simple, no? > The sysfs device has a longer lifetime than dma_device. See commit 41d5e59c [1]. -- Dan [1] http://git.kernel.org/?p=linux/kernel/git/djbw/async_tx.git;a=commitdiff;h=41d5e59c > --- > Atsushi Nemoto > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ >