cb710: use SG_MITER_TO_SG/SG_MITER_FROM_SG
Sebastian Andrzej Siewior [Mon, 22 Jun 2009 07:18:05 +0000 (09:18 +0200)]
the code allready uses flush_kernel_dcache_page(). This patch updates the
driver to the recent sg API changes which require that either SG_MITER_TO_SG
or SG_MITER_FROM_SG is set. SG_MITER_TO_SG calls flush_kernel_dcache_page()
in sg_mitter_stop()

Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Acked-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: Pierre Ossman <pierre@ossman.eu>

drivers/misc/cb710/sgbuf2.c
drivers/mmc/host/cb710-mmc.c
include/linux/cb710.h

index d38a7ac..d019746 100644 (file)
@@ -114,7 +114,6 @@ static void sg_dwiter_write_slow(struct sg_mapping_iter *miter, uint32_t data)
                if (!left)
                        return;
                addr += len;
-               flush_kernel_dcache_page(miter->page);
        } while (sg_dwiter_next(miter));
 }
 
@@ -142,9 +141,6 @@ void cb710_sg_dwiter_write_next_block(struct sg_mapping_iter *miter, uint32_t da
                        return;
        } else
                sg_dwiter_write_slow(miter, data);
-
-       if (miter->length == miter->consumed)
-               flush_kernel_dcache_page(miter->page);
 }
 EXPORT_SYMBOL_GPL(cb710_sg_dwiter_write_next_block);
 
index 11efefb..4e72964 100644 (file)
@@ -278,7 +278,7 @@ static int cb710_mmc_receive(struct cb710_slot *slot, struct mmc_data *data)
        if (unlikely(data->blksz & 15 && (data->blocks != 1 || data->blksz != 8)))
                return -EINVAL;
 
-       sg_miter_start(&miter, data->sg, data->sg_len, 0);
+       sg_miter_start(&miter, data->sg, data->sg_len, SG_MITER_TO_SG);
 
        cb710_modify_port_8(slot, CB710_MMC_CONFIG2_PORT,
                15, CB710_MMC_C2_READ_PIO_SIZE_MASK);
@@ -307,7 +307,7 @@ static int cb710_mmc_receive(struct cb710_slot *slot, struct mmc_data *data)
                        goto out;
        }
 out:
-       cb710_sg_miter_stop_writing(&miter);
+       sg_miter_stop(&miter);
        return err;
 }
 
@@ -322,7 +322,7 @@ static int cb710_mmc_send(struct cb710_slot *slot, struct mmc_data *data)
        if (unlikely(data->blocks > 1 && data->blksz & 15))
                return -EINVAL;
 
-       sg_miter_start(&miter, data->sg, data->sg_len, 0);
+       sg_miter_start(&miter, data->sg, data->sg_len, SG_MITER_FROM_SG);
 
        cb710_modify_port_8(slot, CB710_MMC_CONFIG2_PORT,
                0, CB710_MMC_C2_READ_PIO_SIZE_MASK);
index 63bc9a4..8cc1041 100644 (file)
@@ -140,29 +140,6 @@ void cb710_dump_regs(struct cb710_chip *chip, unsigned dump);
 #include <linux/highmem.h>
 #include <linux/scatterlist.h>
 
-/**
- * cb710_sg_miter_stop_writing - stop mapping iteration after writing
- * @miter: sg mapping iter to be stopped
- *
- * Description:
- *   Stops mapping iterator @miter.  @miter should have been started
- *   started using sg_miter_start().  A stopped iteration can be
- *   resumed by calling sg_miter_next() on it.  This is useful when
- *   resources (kmap) need to be released during iteration.
- *
- *   This is a convenience wrapper that will be optimized out for arches
- *   that don't need flush_kernel_dcache_page().
- *
- * Context:
- *   IRQ disabled if the SG_MITER_ATOMIC is set.  Don't care otherwise.
- */
-static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter)
-{
-       if (miter->page)
-               flush_kernel_dcache_page(miter->page);
-       sg_miter_stop(miter);
-}
-
 /*
  * 32-bit PIO mapping sg iterator
  *
@@ -171,12 +148,12 @@ static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter)
  * without DMA support).
  *
  * Best-case reading (transfer from device):
- *   sg_miter_start();
+ *   sg_miter_start(, SG_MITER_TO_SG);
  *   cb710_sg_dwiter_write_from_io();
- *   cb710_sg_miter_stop_writing();
+ *   sg_miter_stop();
  *
  * Best-case writing (transfer to device):
- *   sg_miter_start();
+ *   sg_miter_start(, SG_MITER_FROM_SG);
  *   cb710_sg_dwiter_read_to_io();
  *   sg_miter_stop();
  */