diff mbox

viostor driver. Xp driver performance.

Message ID 4B04F2DA.1080307@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vadim Rozenfeld Nov. 19, 2009, 7:25 a.m. UTC
None
diff mbox

Patch

diff --git a/viostor/virtio_stor.c b/viostor/virtio_stor.c
index c36b85b..e674dff 100644
--- a/viostor/virtio_stor.c
+++ b/viostor/virtio_stor.c
@@ -215,6 +215,7 @@  VirtIoFindAdapter(
      ConfigInfo->Dma32BitAddresses      = TRUE;
      ConfigInfo->Dma64BitAddresses      = TRUE;
      ConfigInfo->WmiDataProvider        = FALSE;
+
  #ifdef USE_STORPORT
      ConfigInfo->MapBuffers             = STOR_MAP_NON_READ_WRITE_BUFFERS;
      ConfigInfo->SynchronizationModel   = StorSynchronizeFullDuplex;
@@ -286,7 +287,7 @@  VirtIoFindAdapter(
      if(adaptExt->dump_mode) {
          ConfigInfo->NumberOfPhysicalBreaks = 8;
      } else {
-        ConfigInfo->NumberOfPhysicalBreaks = 16;
+        ConfigInfo->NumberOfPhysicalBreaks = MAX_PHYS_SEGMENTS-1;
      }

      ConfigInfo->MaximumTransferLength = ConfigInfo->NumberOfPhysicalBreaks * PAGE_SIZE;
@@ -316,7 +317,6 @@  VirtIoFindAdapter(

      InitializeListHead(&adaptExt->list_head);
      InitializeListHead(&adaptExt->complete_list);
-
      return SP_RETURN_FOUND;
  }

@@ -470,9 +470,7 @@  VirtIoStartIo(
  {
      PCDB cdb = (PCDB)&Srb->Cdb[0];

-    PADAPTER_EXTENSION adaptExt;
-
-    adaptExt = (PADAPTER_EXTENSION)DeviceExtension;
+    PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension;

      switch (Srb->Function) {
          case SRB_FUNCTION_EXECUTE_SCSI:
@@ -591,7 +589,6 @@  VirtIoStartIo(
      return TRUE;
  }

-
  BOOLEAN
  VirtIoInterrupt(
      IN PVOID DeviceExtension
@@ -600,12 +597,10 @@  VirtIoInterrupt(
      pblk_req            vbr;
      unsigned int        len;
      unsigned long       flags;
-    PADAPTER_EXTENSION  adaptExt;
+    PADAPTER_EXTENSION  adaptExt = (PADAPTER_EXTENSION)DeviceExtension;
      BOOLEAN             isInterruptServiced = FALSE;
      PSCSI_REQUEST_BLOCK Srb;

-    adaptExt = (PADAPTER_EXTENSION)DeviceExtension;
-
      RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s (%d)\n", __FUNCTION__, KeGetCurrentIrql()));

      if (VirtIODeviceISR(DeviceExtension)>  0) {
@@ -1019,7 +1014,6 @@  RhelGetLba(
      PCDB Cdb
      )
  {
-
      EIGHT_BYTE lba;

      switch (Cdb->CDB6GENERIC.OperationCode) {
@@ -1094,7 +1088,7 @@  CompleteDPC(
  {
      PSCSI_REQUEST_BLOCK Srb = (PSCSI_REQUEST_BLOCK)vbr->req;
      PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension;
-
+    PRHEL_SRB_EXTENSION srbExt   = (PRHEL_SRB_EXTENSION)Srb->SrbExtension;
      RemoveEntryList(&vbr->list_entry);

  #ifdef USE_STORPORT
@@ -1106,13 +1100,22 @@  CompleteDPC(
                           NULL);
          return;
      }
-#endif
      CompleteSRB(DeviceExtension, Srb);
-#ifndef USE_STORPORT
-    --adaptExt->requests;
+#else
+    ScsiPortNotification(RequestComplete,
+                         DeviceExtension,
+                         Srb);
+    if(srbExt->call_next) {
+        ScsiPortNotification(NextLuRequest,
+                         DeviceExtension,
+                         Srb->PathId,
+                         Srb->TargetId,
+                         Srb->Lun);
+    }
  #endif
  }

+
  #ifdef USE_STORPORT
  VOID
  CompleteDpcRoutine(
diff --git a/viostor/virtio_stor.h b/viostor/virtio_stor.h
index c00600c..ac143ea 100644
--- a/viostor/virtio_stor.h
+++ b/viostor/virtio_stor.h
@@ -52,7 +52,7 @@  typedef struct VirtIOBufferDescriptor VIO_SG, *PVIO_SG;
  #define VIRTIO_BLK_S_UNSUPP	2

  #define SECTOR_SIZE             512
-#define MAX_PHYS_SEGMENTS       128
+#define MAX_PHYS_SEGMENTS       17 //128
  #define VIRTIO_MAX_SG	        (3+MAX_PHYS_SEGMENTS)
  #define IO_PORT_LENGTH          0x40

@@ -105,8 +105,6 @@  typedef struct _ADAPTER_EXTENSION {
      LIST_ENTRY            complete_list;
  #ifdef USE_STORPORT
      STOR_DPC              completion_dpc;
-#else
-    ULONG                 requests;
  #endif
      BOOLEAN               has_sn;
      ULONG                 msix_vectors;
@@ -116,6 +114,10 @@  typedef struct _RHEL_SRB_EXTENSION {
      blk_req               vbr;
      ULONG                 out;
      ULONG                 in;
+    PSCSI_REQUEST_BLOCK   srb;
+#ifndef USE_STORPORT
+    BOOLEAN               call_next;
+#endif
  }RHEL_SRB_EXTENSION, *PRHEL_SRB_EXTENSION;

  ULONGLONG