Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc:
mmc: orphan subsystem
imxmmc: Remove unnecessary semicolons
cb710: use SG_MITER_TO_SG/SG_MITER_FROM_SG
sdhci: use SG_MITER_TO_SG/SG_MITER_FROM_SG
lib/scatterlist: add a flags to signalize mapping direction

+30 -42
+1 -2
MAINTAINERS
··· 3420 3420 F: drivers/mfd/ 3421 3421 3422 3422 MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM 3423 - M: Pierre Ossman <pierre@ossman.eu> 3424 - S: Maintained 3423 + S: Orphan 3425 3424 F: drivers/mmc/ 3426 3425 F: include/linux/mmc/ 3427 3426
-4
drivers/misc/cb710/sgbuf2.c
··· 114 114 if (!left) 115 115 return; 116 116 addr += len; 117 - flush_kernel_dcache_page(miter->page); 118 117 } while (sg_dwiter_next(miter)); 119 118 } 120 119 ··· 141 142 return; 142 143 } else 143 144 sg_dwiter_write_slow(miter, data); 144 - 145 - if (miter->length == miter->consumed) 146 - flush_kernel_dcache_page(miter->page); 147 145 } 148 146 EXPORT_SYMBOL_GPL(cb710_sg_dwiter_write_next_block); 149 147
+3 -3
drivers/mmc/host/cb710-mmc.c
··· 278 278 if (unlikely(data->blksz & 15 && (data->blocks != 1 || data->blksz != 8))) 279 279 return -EINVAL; 280 280 281 - sg_miter_start(&miter, data->sg, data->sg_len, 0); 281 + sg_miter_start(&miter, data->sg, data->sg_len, SG_MITER_TO_SG); 282 282 283 283 cb710_modify_port_8(slot, CB710_MMC_CONFIG2_PORT, 284 284 15, CB710_MMC_C2_READ_PIO_SIZE_MASK); ··· 307 307 goto out; 308 308 } 309 309 out: 310 - cb710_sg_miter_stop_writing(&miter); 310 + sg_miter_stop(&miter); 311 311 return err; 312 312 } 313 313 ··· 322 322 if (unlikely(data->blocks > 1 && data->blksz & 15)) 323 323 return -EINVAL; 324 324 325 - sg_miter_start(&miter, data->sg, data->sg_len, 0); 325 + sg_miter_start(&miter, data->sg, data->sg_len, SG_MITER_FROM_SG); 326 326 327 327 cb710_modify_port_8(slot, CB710_MMC_CONFIG2_PORT, 328 328 0, CB710_MMC_C2_READ_PIO_SIZE_MASK);
+1 -1
drivers/mmc/host/imxmmc.c
··· 652 652 set_bit(IMXMCI_PEND_STARTED_b, &host->pending_events); 653 653 tasklet_schedule(&host->tasklet); 654 654 655 - return IRQ_RETVAL(handled);; 655 + return IRQ_RETVAL(handled); 656 656 } 657 657 658 658 static void imxmci_tasklet_fnc(unsigned long data)
+8 -2
drivers/mmc/host/sdhci.c
··· 773 773 } 774 774 775 775 if (!(host->flags & SDHCI_REQ_USE_DMA)) { 776 - sg_miter_start(&host->sg_miter, 777 - data->sg, data->sg_len, SG_MITER_ATOMIC); 776 + int flags; 777 + 778 + flags = SG_MITER_ATOMIC; 779 + if (host->data->flags & MMC_DATA_READ) 780 + flags |= SG_MITER_TO_SG; 781 + else 782 + flags |= SG_MITER_FROM_SG; 783 + sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags); 778 784 host->blocks = data->blocks; 779 785 } 780 786
+3 -26
include/linux/cb710.h
··· 140 140 #include <linux/highmem.h> 141 141 #include <linux/scatterlist.h> 142 142 143 - /** 144 - * cb710_sg_miter_stop_writing - stop mapping iteration after writing 145 - * @miter: sg mapping iter to be stopped 146 - * 147 - * Description: 148 - * Stops mapping iterator @miter. @miter should have been started 149 - * started using sg_miter_start(). A stopped iteration can be 150 - * resumed by calling sg_miter_next() on it. This is useful when 151 - * resources (kmap) need to be released during iteration. 152 - * 153 - * This is a convenience wrapper that will be optimized out for arches 154 - * that don't need flush_kernel_dcache_page(). 155 - * 156 - * Context: 157 - * IRQ disabled if the SG_MITER_ATOMIC is set. Don't care otherwise. 158 - */ 159 - static inline void cb710_sg_miter_stop_writing(struct sg_mapping_iter *miter) 160 - { 161 - if (miter->page) 162 - flush_kernel_dcache_page(miter->page); 163 - sg_miter_stop(miter); 164 - } 165 - 166 143 /* 167 144 * 32-bit PIO mapping sg iterator 168 145 * ··· 148 171 * without DMA support). 149 172 * 150 173 * Best-case reading (transfer from device): 151 - * sg_miter_start(); 174 + * sg_miter_start(, SG_MITER_TO_SG); 152 175 * cb710_sg_dwiter_write_from_io(); 153 - * cb710_sg_miter_stop_writing(); 176 + * sg_miter_stop(); 154 177 * 155 178 * Best-case writing (transfer to device): 156 - * sg_miter_start(); 179 + * sg_miter_start(, SG_MITER_FROM_SG); 157 180 * cb710_sg_dwiter_read_to_io(); 158 181 * sg_miter_stop(); 159 182 */
+2
include/linux/scatterlist.h
··· 242 242 */ 243 243 244 244 #define SG_MITER_ATOMIC (1 << 0) /* use kmap_atomic */ 245 + #define SG_MITER_TO_SG (1 << 1) /* flush back to phys on unmap */ 246 + #define SG_MITER_FROM_SG (1 << 2) /* nop */ 245 247 246 248 struct sg_mapping_iter { 247 249 /* the following three fields can be accessed directly */
+12 -4
lib/scatterlist.c
··· 314 314 miter->__sg = sgl; 315 315 miter->__nents = nents; 316 316 miter->__offset = 0; 317 + WARN_ON(!(flags & (SG_MITER_TO_SG | SG_MITER_FROM_SG))); 317 318 miter->__flags = flags; 318 319 } 319 320 EXPORT_SYMBOL(sg_miter_start); ··· 395 394 if (miter->addr) { 396 395 miter->__offset += miter->consumed; 397 396 397 + if (miter->__flags & SG_MITER_TO_SG) 398 + flush_kernel_dcache_page(miter->page); 399 + 398 400 if (miter->__flags & SG_MITER_ATOMIC) { 399 401 WARN_ON(!irqs_disabled()); 400 402 kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ); ··· 430 426 unsigned int offset = 0; 431 427 struct sg_mapping_iter miter; 432 428 unsigned long flags; 429 + unsigned int sg_flags = SG_MITER_ATOMIC; 433 430 434 - sg_miter_start(&miter, sgl, nents, SG_MITER_ATOMIC); 431 + if (to_buffer) 432 + sg_flags |= SG_MITER_FROM_SG; 433 + else 434 + sg_flags |= SG_MITER_TO_SG; 435 + 436 + sg_miter_start(&miter, sgl, nents, sg_flags); 435 437 436 438 local_irq_save(flags); 437 439 ··· 448 438 449 439 if (to_buffer) 450 440 memcpy(buf + offset, miter.addr, len); 451 - else { 441 + else 452 442 memcpy(miter.addr, buf + offset, len); 453 - flush_kernel_dcache_page(miter.page); 454 - } 455 443 456 444 offset += len; 457 445 }