On Wed, Sep 25, 2013 at 06:31:05PM +0530, Jayachandran C wrote: The patch was missing the required Signed-off-by, added below. > The check cpu_needs_post_dma_flush() in mips_dma_sync_sg_for_cpu() and > the check !plat_device_is_coherent() in mips_dma_sync_sg_for_device() > can be moved outside the for loop. > > As a side effect, this also avoids a GCC bug that caused kernel compile > to fail with the error: > > arch/mips/mm/dma-default.c: In function 'mips_dma_sync_sg_for_cpu': > arch/mips/mm/dma-default.c:316:1: internal compiler error: in add_insn_before, at emit-rtl.c:3852 > > This gcc failure is seen in Code Sourcery toolchains [e.g. gcc version > 4.7.2 (Sourcery CodeBench Lite 2012.09-99)] after commit "MIPS: Optimize > current_cpu_type() for better code." Signed-off-by: Jayachandran C <jchandra@xxxxxxxxxxxx> > --- > arch/mips/mm/dma-default.c | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c > index e45e4b0..2e94185 100644 > --- a/arch/mips/mm/dma-default.c > +++ b/arch/mips/mm/dma-default.c > @@ -307,12 +307,10 @@ static void mips_dma_sync_sg_for_cpu(struct device *dev, > { > int i; > > - /* Make sure that gcc doesn't leave the empty loop body. */ > - for (i = 0; i < nelems; i++, sg++) { > - if (cpu_needs_post_dma_flush(dev)) > + if (cpu_needs_post_dma_flush(dev)) > + for (i = 0; i < nelems; i++, sg++) > __dma_sync(sg_page(sg), sg->offset, sg->length, > direction); > - } > } > > static void mips_dma_sync_sg_for_device(struct device *dev, > @@ -320,12 +318,10 @@ static void mips_dma_sync_sg_for_device(struct device *dev, > { > int i; > > - /* Make sure that gcc doesn't leave the empty loop body. */ > - for (i = 0; i < nelems; i++, sg++) { > - if (!plat_device_is_coherent(dev)) > + if (!plat_device_is_coherent(dev)) > + for (i = 0; i < nelems; i++, sg++) > __dma_sync(sg_page(sg), sg->offset, sg->length, > direction); > - } > } > > int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr) JC.