At Thu, 26 Sep 2013 10:25:13 +0200, Takashi Iwai wrote: > > At Thu, 26 Sep 2013 08:54:25 +0100, > Russell King - ARM Linux wrote: > > > > On Thu, Sep 26, 2013 at 09:51:23AM +0200, Takashi Iwai wrote: > > > Hi, > > > > > > sorry for the lat response, as I've been traveling in the last weeks. > > > > > > At Thu, 19 Sep 2013 22:53:02 +0100, > > > Russell King wrote: > > > > > > > > This code sequence is unsafe in modules: > > > > > > > > static u64 mask = DMA_BIT_MASK(something); > > > > ... > > > > if (!dev->dma_mask) > > > > dev->dma_mask = &mask; > > > > > > > > as if a module is reloaded, the mask will be pointing at the original > > > > module's mask address, and this can lead to oopses. Moreover, they > > > > all follow this with: > > > > > > > > if (!dev->coherent_dma_mask) > > > > dev->coherent_dma_mask = mask; > > > > > > > > where 'mask' is the same value as the statically defined mask, and this > > > > bypasses the architecture's check on whether the DMA mask is possible. > > > > > > > > Fix these issues by using the new dma_coerce_coherent_and_mask() > > > > function. > > > > > > > > Signed-off-by: Russell King <[email protected]> > > > > > > Applied with Mark's ack now. > > > > Which is a very stupid thing to do because you won't have > > dma_coerce_coherent_and_mask() in your tree, so all these drivers > > will fail to build for you. > > Ah, silly me, I missed the very first thing. Reverted it now... > > FWIW, below is the missing piece. Please apply it in your side if > necessary.
Oh, and feel free to add my ack, if any: Acked-by: Takashi Iwai <[email protected]> thanks, Takashi > > > Takashi > > --- > sound/soc/fsl/imx-pcm-fiq.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/sound/soc/fsl/imx-pcm-fiq.c b/sound/soc/fsl/imx-pcm-fiq.c > index 34043c5..fd5f2fb 100644 > --- a/sound/soc/fsl/imx-pcm-fiq.c > +++ b/sound/soc/fsl/imx-pcm-fiq.c > @@ -272,18 +272,16 @@ static int imx_pcm_preallocate_dma_buffer(struct > snd_pcm *pcm, int stream) > return 0; > } > > -static u64 imx_pcm_dmamask = DMA_BIT_MASK(32); > - > static int imx_pcm_new(struct snd_soc_pcm_runtime *rtd) > { > struct snd_card *card = rtd->card->snd_card; > struct snd_pcm *pcm = rtd->pcm; > - int ret = 0; > + int ret; > + > + ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32)); > + if (ret) > + return ret; > > - if (!card->dev->dma_mask) > - card->dev->dma_mask = &imx_pcm_dmamask; > - if (!card->dev->coherent_dma_mask) > - card->dev->coherent_dma_mask = DMA_BIT_MASK(32); > if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { > ret = imx_pcm_preallocate_dma_buffer(pcm, > SNDRV_PCM_STREAM_PLAYBACK); > -- > 1.8.4 ------------------------------------------------------------------------------ October Webinars: Code for Performance Free Intel webinars can help you accelerate application performance. Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from the latest Intel processors and coprocessors. See abstracts and register > http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk _______________________________________________ E1000-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
