forked from mirrors/linux
		
	mmc: mxcmmc: handle highmem pages
Use kmap_atomic to map the scatterlist entry before using it. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
		
							parent
							
								
									5b4277814e
								
							
						
					
					
						commit
						b189e7589f
					
				
					 1 changed files with 11 additions and 4 deletions
				
			
		|  | @ -291,8 +291,10 @@ static void mxcmci_swap_buffers(struct mmc_data *data) | |||
| 	struct scatterlist *sg; | ||||
| 	int i; | ||||
| 
 | ||||
| 	for_each_sg(data->sg, sg, data->sg_len, i) | ||||
| 		buffer_swap32(sg_virt(sg), sg->length); | ||||
| 	for_each_sg(data->sg, sg, data->sg_len, i) { | ||||
| 		void *buf = kmap_atomic(sg_page(sg) + sg->offset; | ||||
| 		buffer_swap32(buf, sg->length); | ||||
| 		kunmap_atomic(buf); | ||||
| } | ||||
| #else | ||||
| static inline void mxcmci_swap_buffers(struct mmc_data *data) {} | ||||
|  | @ -609,6 +611,7 @@ static int mxcmci_transfer_data(struct mxcmci_host *host) | |||
| { | ||||
| 	struct mmc_data *data = host->req->data; | ||||
| 	struct scatterlist *sg; | ||||
| 	void *buf; | ||||
| 	int stat, i; | ||||
| 
 | ||||
| 	host->data = data; | ||||
|  | @ -616,14 +619,18 @@ static int mxcmci_transfer_data(struct mxcmci_host *host) | |||
| 
 | ||||
| 	if (data->flags & MMC_DATA_READ) { | ||||
| 		for_each_sg(data->sg, sg, data->sg_len, i) { | ||||
| 			stat = mxcmci_pull(host, sg_virt(sg), sg->length); | ||||
| 			buf = kmap_atomic(sg_page(sg) + sg->offset); | ||||
| 			stat = mxcmci_pull(host, buf, sg->length); | ||||
| 			kunmap(buf); | ||||
| 			if (stat) | ||||
| 				return stat; | ||||
| 			host->datasize += sg->length; | ||||
| 		} | ||||
| 	} else { | ||||
| 		for_each_sg(data->sg, sg, data->sg_len, i) { | ||||
| 			stat = mxcmci_push(host, sg_virt(sg), sg->length); | ||||
| 			buf = kmap_atomic(sg_page(sg) + sg->offset); | ||||
| 			stat = mxcmci_push(host, buf, sg->length); | ||||
| 			kunmap(buf); | ||||
| 			if (stat) | ||||
| 				return stat; | ||||
| 			host->datasize += sg->length; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Christoph Hellwig
						Christoph Hellwig