mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge branch 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block: [SCSI] Remove full sg table memset() [SCSI] ide-scsi: remove usage of sg_last() Fix loop terminating conditions in fill_sg(). [BLOCK] Clear sg entry before filling in blk_rq_map_sg() IA64: iommu uses sg_next with an invalid sg element cciss: disable DMA refetch on Smart Array P600 swiotlb: fix map_sg failure handling SPARC64: fix iommu sg chaining [SCSI] ide-scsi: use scsi_sg_count() instead of ->use_sg
This commit is contained in:
commit
b6257a9036
10 changed files with 62 additions and 47 deletions
|
|
@ -3076,15 +3076,20 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* Disabling DMA prefetch for the P600
|
||||
* An ASIC bug may result in a prefetch beyond
|
||||
* physical memory.
|
||||
/* Disabling DMA prefetch and refetch for the P600.
|
||||
* An ASIC bug may result in accesses to invalid memory addresses.
|
||||
* We've disabled prefetch for some time now. Testing with XEN
|
||||
* kernels revealed a bug in the refetch if dom0 resides on a P600.
|
||||
*/
|
||||
if(board_id == 0x3225103C) {
|
||||
__u32 dma_prefetch;
|
||||
__u32 dma_refetch;
|
||||
dma_prefetch = readl(c->vaddr + I2O_DMA1_CFG);
|
||||
dma_prefetch |= 0x8000;
|
||||
writel(dma_prefetch, c->vaddr + I2O_DMA1_CFG);
|
||||
pci_read_config_dword(pdev, PCI_COMMAND_PARITY, &dma_refetch);
|
||||
dma_refetch |= 0x1;
|
||||
pci_write_config_dword(pdev, PCI_COMMAND_PARITY, dma_refetch);
|
||||
}
|
||||
|
||||
#ifdef CCISS_DEBUG
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ typedef struct idescsi_pc_s {
|
|||
u8 *buffer; /* Data buffer */
|
||||
u8 *current_position; /* Pointer into the above buffer */
|
||||
struct scatterlist *sg; /* Scatter gather table */
|
||||
struct scatterlist *last_sg; /* Last sg element */
|
||||
unsigned int sg_cnt; /* Number of entries in sg */
|
||||
int b_count; /* Bytes transferred from current entry */
|
||||
struct scsi_cmnd *scsi_cmd; /* SCSI command */
|
||||
void (*done)(struct scsi_cmnd *); /* Scsi completion routine */
|
||||
|
|
@ -192,7 +192,7 @@ static void idescsi_input_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsigne
|
|||
}
|
||||
bcount -= count; pc->b_count += count;
|
||||
if (pc->b_count == pc->sg->length) {
|
||||
if (pc->sg == pc->last_sg)
|
||||
if (!--pc->sg_cnt)
|
||||
break;
|
||||
pc->sg = sg_next(pc->sg);
|
||||
pc->b_count = 0;
|
||||
|
|
@ -229,7 +229,7 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
|
|||
}
|
||||
bcount -= count; pc->b_count += count;
|
||||
if (pc->b_count == pc->sg->length) {
|
||||
if (pc->sg == pc->last_sg)
|
||||
if (!--pc->sg_cnt)
|
||||
break;
|
||||
pc->sg = sg_next(pc->sg);
|
||||
pc->b_count = 0;
|
||||
|
|
@ -807,7 +807,7 @@ static int idescsi_queue (struct scsi_cmnd *cmd,
|
|||
memcpy (pc->c, cmd->cmnd, cmd->cmd_len);
|
||||
pc->buffer = NULL;
|
||||
pc->sg = scsi_sglist(cmd);
|
||||
pc->last_sg = sg_last(pc->sg, cmd->use_sg);
|
||||
pc->sg_cnt = scsi_sg_count(cmd);
|
||||
pc->b_count = 0;
|
||||
pc->request_transfer = pc->buffer_size = scsi_bufflen(cmd);
|
||||
pc->scsi_cmd = cmd;
|
||||
|
|
|
|||
|
|
@ -764,8 +764,6 @@ struct scatterlist *scsi_alloc_sgtable(struct scsi_cmnd *cmd, gfp_t gfp_mask)
|
|||
if (unlikely(!sgl))
|
||||
goto enomem;
|
||||
|
||||
memset(sgl, 0, sizeof(*sgl) * sgp->size);
|
||||
|
||||
/*
|
||||
* first loop through, set initial index and return value
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue