Re: [PATCH 0/4] Use of new scsi_allocate_command

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 01 2008 at 19:02 +0300, James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:
> On Thu, 2008-05-01 at 18:59 +0300, Boaz Harrosh wrote:
>> On Thu, May 01 2008 at 18:47 +0300, James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:
>>> On Thu, 2008-05-01 at 18:36 +0300, Boaz Harrosh wrote:
>>>> On Thu, May 01 2008 at 18:22 +0300, James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:
>>>>> On Thu, 2008-05-01 at 17:56 +0300, Boaz Harrosh wrote:
>>>>>> The call to pci_map_page() on an ISA case will it not bounce the
>>>>>> buffer?
>>>>> Only if the system isn't a PCI_DMA_BUS_IS_PHYS one.
>>>>>
>>>>> That means basically either has an iommu/gart or has some silly swiotlb
>>>>> to emulate one.
>>>>>
>>>>> That means for standard x86 isa systems the answer is no: the buffer has
>>>>> to be allocated within the isa region because pci_map is simply a
>>>>> virt_to_phys.
>>>>>
>>>>> James
>>>>>
>>>> OK Thanks, so the second patch then. That will solve it.
>>> Um, your second patch is only changing isd200; it's hard to see how that
>>> can fix a gdth problem ...
>>>
>>> James
>>>
>>>
>> Sorry I meant the second version of the patch that uses scsi_get_command()
>>
>> http://marc.info/?l=linux-scsi&m=120965483126936&w=2
> 
> No ... it still needs to use scsi_allocate_command() and pass the gfp
> flags for DMA if necessary.
> 
> James
> 
> 

But I'm removing all that very soon.

Here is a patch that fixes that ISA thing. Please submit it before the 
original [PATCH 4/4].

--
From: Boaz Harrosh <bharrosh@xxxxxxxxxxx>
Subject: [PATCH 3.5/4] gdth: Fix sense handling in the ISA case

Allocate the 16 bytes buffer from host space which is of the right mask
in the ISA case.

Signed-off-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx>
---
 drivers/scsi/gdth.c |   11 ++++++++---
 drivers/scsi/gdth.h |    1 +
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index 3cfbab6..fb61c79 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -2647,8 +2647,8 @@ static int gdth_fill_raw_cmd(gdth_ha_str *ha, Scsi_Cmnd *scp, unchar b)
         }
 
     } else {
-        page = virt_to_page(scp->sense_buffer);
-        offset = (ulong)scp->sense_buffer & ~PAGE_MASK;
+        page = virt_to_page(cmndinfo->sense);
+        offset = (ulong)cmndinfo->sense & ~PAGE_MASK;
         sense_paddr = pci_map_page(ha->pdev,page,offset,
                                    16,PCI_DMA_FROMDEVICE);
 
@@ -3317,9 +3317,14 @@ static int gdth_sync_event(gdth_ha_str *ha, int service, unchar index,
             pci_unmap_sg(ha->pdev, scsi_sglist(scp), scsi_sg_count(scp),
                          cmndinfo->dma_dir);
 
-        if (cmndinfo->sense_paddr)
+        if (cmndinfo->sense_paddr) {
             pci_unmap_page(ha->pdev, cmndinfo->sense_paddr, 16,
                                                            PCI_DMA_FROMDEVICE);
+            /* this here is called before gdth_next so it will not
+             * overwrite fake sense returned there.
+             */
+            memcpy(scp->sense_buffer, cmndinfo->sense, 16);
+	}
 
         if (ha->status == S_OK) {
             cmndinfo->status = S_OK;
diff --git a/drivers/scsi/gdth.h b/drivers/scsi/gdth.h
index ca92476..445ea7f 100644
--- a/drivers/scsi/gdth.h
+++ b/drivers/scsi/gdth.h
@@ -914,6 +914,7 @@ typedef struct {
         int index;
         int internal_command;                   /* don't call scsi_done */
         gdth_cmd_str *internal_cmd_str;         /* crier for internal messages*/
+        u8 sense[16];                           /* 16 is used allover */
         dma_addr_t sense_paddr;                 /* sense dma-addr */
         unchar priority;
         int timeout;
-- 
1.5.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux