提交 7ad388d8 编写于 作者: C Christoph Hellwig 提交者: Martin K. Petersen

scsi: core: add a host / host template field for the virt boundary

This allows drivers setting it up easily instead of branching out to block
layer calls in slave_alloc, and ensures the upgraded max_segment_size
setting gets picked up by the DMA layer.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Acked-by: Kashyap Desai < kashyap.desai@broadcom.com>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 f9b0530f
...@@ -462,6 +462,9 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize) ...@@ -462,6 +462,9 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
else else
shost->dma_boundary = 0xffffffff; shost->dma_boundary = 0xffffffff;
if (sht->virt_boundary_mask)
shost->virt_boundary_mask = sht->virt_boundary_mask;
device_initialize(&shost->shost_gendev); device_initialize(&shost->shost_gendev);
dev_set_name(&shost->shost_gendev, "host%d", shost->host_no); dev_set_name(&shost->shost_gendev, "host%d", shost->host_no);
shost->shost_gendev.bus = &scsi_bus_type; shost->shost_gendev.bus = &scsi_bus_type;
......
...@@ -1791,7 +1791,8 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q) ...@@ -1791,7 +1791,8 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)
dma_set_seg_boundary(dev, shost->dma_boundary); dma_set_seg_boundary(dev, shost->dma_boundary);
blk_queue_max_segment_size(q, shost->max_segment_size); blk_queue_max_segment_size(q, shost->max_segment_size);
dma_set_max_seg_size(dev, shost->max_segment_size); blk_queue_virt_boundary(q, shost->virt_boundary_mask);
dma_set_max_seg_size(dev, queue_max_segment_size(q));
/* /*
* Set a reasonable default alignment: The larger of 32-byte (dword), * Set a reasonable default alignment: The larger of 32-byte (dword),
......
...@@ -369,6 +369,8 @@ struct scsi_host_template { ...@@ -369,6 +369,8 @@ struct scsi_host_template {
*/ */
unsigned long dma_boundary; unsigned long dma_boundary;
unsigned long virt_boundary_mask;
/* /*
* This specifies "machine infinity" for host templates which don't * This specifies "machine infinity" for host templates which don't
* limit the transfer size. Note this limit represents an absolute * limit the transfer size. Note this limit represents an absolute
...@@ -587,6 +589,7 @@ struct Scsi_Host { ...@@ -587,6 +589,7 @@ struct Scsi_Host {
unsigned int max_sectors; unsigned int max_sectors;
unsigned int max_segment_size; unsigned int max_segment_size;
unsigned long dma_boundary; unsigned long dma_boundary;
unsigned long virt_boundary_mask;
/* /*
* In scsi-mq mode, the number of hardware queues supported by the LLD. * In scsi-mq mode, the number of hardware queues supported by the LLD.
* *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册