On 22-12-18, 08:28, Lukas Wunner wrote: > The BCM2835 DMA driver deletes a channel from a list upon termination > without having added it to a list first. Moreover that operation is > protected by a spinlock which isn't taken anywhere else. These appear > to be remnants of an older version of the driver which accidentally > got mainlined. Remove the dead code. > > While at it remove an outdated comment claiming the driver only supports Ditto, whenever you use also, while at it... think if this is a candidate for splitting up. A patch should do one thing only.. > cyclic transactions. The driver has been supporting other transaction > types for more than two years. > > Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx> > Cc: Frank Pavlic <f.pavlic@xxxxxxxxx> > Cc: Martin Sperl <kernel@xxxxxxxxxxxxxxxx> > Cc: Florian Meier <florian.meier@xxxxxxxx> > --- > drivers/dma/bcm2835-dma.c | 13 ------------- > 1 file changed, 13 deletions(-) > > diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c > index e424e232a3d0..633be2ee7f33 100644 > --- a/drivers/dma/bcm2835-dma.c > +++ b/drivers/dma/bcm2835-dma.c > @@ -2,9 +2,6 @@ > /* > * BCM2835 DMA engine support > * > - * This driver only supports cyclic DMA transfers > - * as needed for the I2S module. > - * > * Author: Florian Meier <florian.meier@xxxxxxxx> > * Copyright 2013 > * > @@ -42,7 +39,6 @@ > > struct bcm2835_dmadev { > struct dma_device ddev; > - spinlock_t lock; > void __iomem *base; > struct device_dma_parameters dma_parms; > }; > @@ -64,7 +60,6 @@ struct bcm2835_cb_entry { > > struct bcm2835_chan { > struct virt_dma_chan vc; > - struct list_head node; > > struct dma_slave_config cfg; > unsigned int dreq; > @@ -772,17 +767,11 @@ static int bcm2835_dma_slave_config(struct dma_chan *chan, > static int bcm2835_dma_terminate_all(struct dma_chan *chan) > { > struct bcm2835_chan *c = to_bcm2835_dma_chan(chan); > - struct bcm2835_dmadev *d = to_bcm2835_dma_dev(c->vc.chan.device); > unsigned long flags; > LIST_HEAD(head); > > spin_lock_irqsave(&c->vc.lock, flags); > > - /* Prevent this channel being scheduled */ > - spin_lock(&d->lock); > - list_del_init(&c->node); > - spin_unlock(&d->lock); > - > /* stop DMA activity */ > if (c->desc) { > vchan_terminate_vdesc(&c->desc->vd); > @@ -815,7 +804,6 @@ static int bcm2835_dma_chan_init(struct bcm2835_dmadev *d, int chan_id, > > c->vc.desc_free = bcm2835_dma_desc_free; > vchan_init(&c->vc, &d->ddev); > - INIT_LIST_HEAD(&c->node); > > c->chan_base = BCM2835_DMA_CHANIO(d->base, chan_id); > c->ch = chan_id; > @@ -918,7 +906,6 @@ static int bcm2835_dma_probe(struct platform_device *pdev) > od->ddev.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; > od->ddev.dev = &pdev->dev; > INIT_LIST_HEAD(&od->ddev.channels); > - spin_lock_init(&od->lock); > > platform_set_drvdata(pdev, od); > > -- > 2.19.2 -- ~Vinod