diff mbox

[ovs-dev,v2,1/3] datapath-windows: Move OvsAllocateNBLFromBuffer to BufferMgmt

Message ID 1445903321-7864-2-git-send-email-vsairam@vmware.com
State Accepted
Headers show

Commit Message

Sairam Venugopal Oct. 26, 2015, 11:48 p.m. UTC
Move the functionality around creating an NBL from Buffer to
Buffermanagement. This function will be used for converting the buffer
from user-space to NBL and also by STT - reassembly logic.

Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
---
 datapath-windows/ovsext/BufferMgmt.c | 46 ++++++++++++++++++++++++++++++++++
 datapath-windows/ovsext/BufferMgmt.h |  3 +++
 datapath-windows/ovsext/User.c       | 48 ++----------------------------------
 3 files changed, 51 insertions(+), 46 deletions(-)

Comments

Nithin Raju Oct. 27, 2015, 5:08 p.m. UTC | #1
Acked-by: Nithin Raju <nithin@vmware.com>

-----Original Message-----
From: Sairam Venugopal <vsairam@vmware.com>
Date: Monday, October 26, 2015 at 4:48 PM
To: "dev@openvswitch.org" <dev@openvswitch.org>
Subject: [ovs-dev] [PATCH v2 1/3] datapath-windows:
Move	OvsAllocateNBLFromBuffer to BufferMgmt

>Move the functionality around creating an NBL from Buffer to
>Buffermanagement. This function will be used for converting the buffer
>from user-space to NBL and also by STT - reassembly logic.
>
>Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
>---
> datapath-windows/ovsext/BufferMgmt.c | 46
>++++++++++++++++++++++++++++++++++
> datapath-windows/ovsext/BufferMgmt.h |  3 +++
> datapath-windows/ovsext/User.c       | 48
>++----------------------------------
> 3 files changed, 51 insertions(+), 46 deletions(-)
>
>diff --git a/datapath-windows/ovsext/BufferMgmt.c
>b/datapath-windows/ovsext/BufferMgmt.c
>index 9a1cf96..ab7a18e 100644
>--- a/datapath-windows/ovsext/BufferMgmt.c
>+++ b/datapath-windows/ovsext/BufferMgmt.c
>@@ -1308,6 +1308,52 @@ nblcopy_error:
>     return NULL;
> }
> 
>+/*
>+ * 
>--------------------------------------------------------------------------
>+ * OvsAllocateNBLFromBuffer --
>+ *
>+ * This function allocates all the stuff necessary for creating an NBL
>from the
>+ * input buffer of specified length, namely, a nonpaged data buffer of
>size
>+ * length, an MDL from it, and a NB and NBL from it. It does not
>allocate an NBL
>+ * context yet. It also copies data from the specified buffer to the NBL.
>+ * 
>--------------------------------------------------------------------------
>+ */
>+PNET_BUFFER_LIST
>+OvsAllocateNBLFromBuffer(PVOID context,
>+                         PVOID buffer,
>+                         ULONG length)
>+{
>+    POVS_SWITCH_CONTEXT switchContext = (POVS_SWITCH_CONTEXT)context;
>+    UINT8 *data = NULL;
>+    PNET_BUFFER_LIST nbl = NULL;
>+    PNET_BUFFER nb;
>+    PMDL mdl;
>+
>+    if (length > OVS_DEFAULT_DATA_SIZE) {
>+        nbl = OvsAllocateVariableSizeNBL(switchContext, length,
>+                                         OVS_DEFAULT_HEADROOM_SIZE);
>+
>+    } else {
>+        nbl = OvsAllocateFixSizeNBL(switchContext, length,
>+                                    OVS_DEFAULT_HEADROOM_SIZE);
>+    }
>+    if (nbl == NULL) {
>+        return NULL;
>+    }
>+
>+    nb = NET_BUFFER_LIST_FIRST_NB(nbl);
>+    mdl = NET_BUFFER_CURRENT_MDL(nb);
>+    data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
>+                    NET_BUFFER_CURRENT_MDL_OFFSET(nb);
>+    if (!data) {
>+        OvsCompleteNBL(switchContext, nbl, TRUE);
>+        return NULL;
>+    }
>+
>+    NdisMoveMemory(data, buffer, length);
>+
>+    return nbl;
>+}
> 
> /*
>  * 
>--------------------------------------------------------------------------
>diff --git a/datapath-windows/ovsext/BufferMgmt.h
>b/datapath-windows/ovsext/BufferMgmt.h
>index 915d7f5..79abc3d 100644
>--- a/datapath-windows/ovsext/BufferMgmt.h
>+++ b/datapath-windows/ovsext/BufferMgmt.h
>@@ -113,6 +113,9 @@ PNET_BUFFER_LIST OvsTcpSegmentNBL(PVOID context,
>                                   POVS_PACKET_HDR_INFO hdrInfo,
>                                   UINT32 MSS,
>                                   UINT32 headRoom);
>+PNET_BUFFER_LIST OvsAllocateNBLFromBuffer(PVOID context,
>+                                          PVOID buffer,
>+                                          ULONG length);
> PNET_BUFFER_LIST OvsFullCopyToMultipleNBLs(PVOID context,
>     PNET_BUFFER_LIST nbl, UINT32 headRoom, BOOLEAN copyNblInfo);
> PNET_BUFFER_LIST OvsCompleteNBL(PVOID context, PNET_BUFFER_LIST nbl,
>diff --git a/datapath-windows/ovsext/User.c
>b/datapath-windows/ovsext/User.c
>index e7be904..7828687 100644
>--- a/datapath-windows/ovsext/User.c
>+++ b/datapath-windows/ovsext/User.c
>@@ -258,50 +258,6 @@
>OvsAllocateForwardingContextForNBL(POVS_SWITCH_CONTEXT switchContext,
> }
> 
> /*
>- * 
>--------------------------------------------------------------------------
>- * This function allocates all the stuff necessary for creating an NBL
>from the
>- * input buffer of specified length, namely, a nonpaged data buffer of
>size
>- * length, an MDL from it, and a NB and NBL from it. It does not
>allocate an NBL
>- * context yet. It also copies data from the specified buffer to the NBL.
>- * 
>--------------------------------------------------------------------------
>- */
>-PNET_BUFFER_LIST
>-OvsAllocateNBLForUserBuffer(POVS_SWITCH_CONTEXT switchContext,
>-                            PVOID userBuffer,
>-                            ULONG length)
>-{
>-    UINT8 *data = NULL;
>-    PNET_BUFFER_LIST nbl = NULL;
>-    PNET_BUFFER nb;
>-    PMDL mdl;
>-
>-    if (length > OVS_DEFAULT_DATA_SIZE) {
>-        nbl = OvsAllocateVariableSizeNBL(switchContext, length,
>-                                         OVS_DEFAULT_HEADROOM_SIZE);
>-
>-    } else {
>-        nbl = OvsAllocateFixSizeNBL(switchContext, length,
>-                                    OVS_DEFAULT_HEADROOM_SIZE);
>-    }
>-    if (nbl == NULL) {
>-        return NULL;
>-    }
>-
>-    nb = NET_BUFFER_LIST_FIRST_NB(nbl);
>-    mdl = NET_BUFFER_CURRENT_MDL(nb);
>-    data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
>-                    NET_BUFFER_CURRENT_MDL_OFFSET(nb);
>-    if (!data) {
>-        OvsCompleteNBL(switchContext, nbl, TRUE);
>-        return NULL;
>-    }
>-
>-    NdisMoveMemory(data, userBuffer, length);
>-
>-    return nbl;
>-}
>-
>-/*
>  
>*-------------------------------------------------------------------------
>---
>  *  OvsNlExecuteCmdHandler --
>  *    Handler for OVS_PACKET_CMD_EXECUTE command.
>@@ -454,8 +410,8 @@ OvsExecuteDpIoctl(OvsPacketExecute *execute)
>      * Allocate the NBL, copy the data from the userspace buffer.
>Allocate
>      * also, the forwarding context for the packet.
>      */
>-    pNbl = OvsAllocateNBLForUserBuffer(gOvsSwitchContext,
>execute->packetBuf,
>-                                       execute->packetLen);
>+    pNbl = OvsAllocateNBLFromBuffer(gOvsSwitchContext,
>execute->packetBuf,
>+                                    execute->packetLen);
>     if (pNbl == NULL) {
>         status = STATUS_NO_MEMORY;
>         goto exit;
>-- 
>1.9.5.msysgit.0
>
>_______________________________________________
>dev mailing list
>dev@openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=BQIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN
>HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=jZ8HjspFyDiBmgEMY14C-0033lA2z7
>Eu1KTN0Ok4C9E&s=3flOhDCB5ddtDSQT2SxbMKsjlizQXZ7nMcWC8q8mBa4&e=
diff mbox

Patch

diff --git a/datapath-windows/ovsext/BufferMgmt.c b/datapath-windows/ovsext/BufferMgmt.c
index 9a1cf96..ab7a18e 100644
--- a/datapath-windows/ovsext/BufferMgmt.c
+++ b/datapath-windows/ovsext/BufferMgmt.c
@@ -1308,6 +1308,52 @@  nblcopy_error:
     return NULL;
 }
 
+/*
+ * --------------------------------------------------------------------------
+ * OvsAllocateNBLFromBuffer --
+ *
+ * This function allocates all the stuff necessary for creating an NBL from the
+ * input buffer of specified length, namely, a nonpaged data buffer of size
+ * length, an MDL from it, and a NB and NBL from it. It does not allocate an NBL
+ * context yet. It also copies data from the specified buffer to the NBL.
+ * --------------------------------------------------------------------------
+ */
+PNET_BUFFER_LIST
+OvsAllocateNBLFromBuffer(PVOID context,
+                         PVOID buffer,
+                         ULONG length)
+{
+    POVS_SWITCH_CONTEXT switchContext = (POVS_SWITCH_CONTEXT)context;
+    UINT8 *data = NULL;
+    PNET_BUFFER_LIST nbl = NULL;
+    PNET_BUFFER nb;
+    PMDL mdl;
+
+    if (length > OVS_DEFAULT_DATA_SIZE) {
+        nbl = OvsAllocateVariableSizeNBL(switchContext, length,
+                                         OVS_DEFAULT_HEADROOM_SIZE);
+
+    } else {
+        nbl = OvsAllocateFixSizeNBL(switchContext, length,
+                                    OVS_DEFAULT_HEADROOM_SIZE);
+    }
+    if (nbl == NULL) {
+        return NULL;
+    }
+
+    nb = NET_BUFFER_LIST_FIRST_NB(nbl);
+    mdl = NET_BUFFER_CURRENT_MDL(nb);
+    data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
+                    NET_BUFFER_CURRENT_MDL_OFFSET(nb);
+    if (!data) {
+        OvsCompleteNBL(switchContext, nbl, TRUE);
+        return NULL;
+    }
+
+    NdisMoveMemory(data, buffer, length);
+
+    return nbl;
+}
 
 /*
  * --------------------------------------------------------------------------
diff --git a/datapath-windows/ovsext/BufferMgmt.h b/datapath-windows/ovsext/BufferMgmt.h
index 915d7f5..79abc3d 100644
--- a/datapath-windows/ovsext/BufferMgmt.h
+++ b/datapath-windows/ovsext/BufferMgmt.h
@@ -113,6 +113,9 @@  PNET_BUFFER_LIST OvsTcpSegmentNBL(PVOID context,
                                   POVS_PACKET_HDR_INFO hdrInfo,
                                   UINT32 MSS,
                                   UINT32 headRoom);
+PNET_BUFFER_LIST OvsAllocateNBLFromBuffer(PVOID context,
+                                          PVOID buffer,
+                                          ULONG length);
 PNET_BUFFER_LIST OvsFullCopyToMultipleNBLs(PVOID context,
     PNET_BUFFER_LIST nbl, UINT32 headRoom, BOOLEAN copyNblInfo);
 PNET_BUFFER_LIST OvsCompleteNBL(PVOID context, PNET_BUFFER_LIST nbl,
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
index e7be904..7828687 100644
--- a/datapath-windows/ovsext/User.c
+++ b/datapath-windows/ovsext/User.c
@@ -258,50 +258,6 @@  OvsAllocateForwardingContextForNBL(POVS_SWITCH_CONTEXT switchContext,
 }
 
 /*
- * --------------------------------------------------------------------------
- * This function allocates all the stuff necessary for creating an NBL from the
- * input buffer of specified length, namely, a nonpaged data buffer of size
- * length, an MDL from it, and a NB and NBL from it. It does not allocate an NBL
- * context yet. It also copies data from the specified buffer to the NBL.
- * --------------------------------------------------------------------------
- */
-PNET_BUFFER_LIST
-OvsAllocateNBLForUserBuffer(POVS_SWITCH_CONTEXT switchContext,
-                            PVOID userBuffer,
-                            ULONG length)
-{
-    UINT8 *data = NULL;
-    PNET_BUFFER_LIST nbl = NULL;
-    PNET_BUFFER nb;
-    PMDL mdl;
-
-    if (length > OVS_DEFAULT_DATA_SIZE) {
-        nbl = OvsAllocateVariableSizeNBL(switchContext, length,
-                                         OVS_DEFAULT_HEADROOM_SIZE);
-
-    } else {
-        nbl = OvsAllocateFixSizeNBL(switchContext, length,
-                                    OVS_DEFAULT_HEADROOM_SIZE);
-    }
-    if (nbl == NULL) {
-        return NULL;
-    }
-
-    nb = NET_BUFFER_LIST_FIRST_NB(nbl);
-    mdl = NET_BUFFER_CURRENT_MDL(nb);
-    data = (PUINT8)MmGetSystemAddressForMdlSafe(mdl, LowPagePriority) +
-                    NET_BUFFER_CURRENT_MDL_OFFSET(nb);
-    if (!data) {
-        OvsCompleteNBL(switchContext, nbl, TRUE);
-        return NULL;
-    }
-
-    NdisMoveMemory(data, userBuffer, length);
-
-    return nbl;
-}
-
-/*
  *----------------------------------------------------------------------------
  *  OvsNlExecuteCmdHandler --
  *    Handler for OVS_PACKET_CMD_EXECUTE command.
@@ -454,8 +410,8 @@  OvsExecuteDpIoctl(OvsPacketExecute *execute)
      * Allocate the NBL, copy the data from the userspace buffer. Allocate
      * also, the forwarding context for the packet.
      */
-    pNbl = OvsAllocateNBLForUserBuffer(gOvsSwitchContext, execute->packetBuf,
-                                       execute->packetLen);
+    pNbl = OvsAllocateNBLFromBuffer(gOvsSwitchContext, execute->packetBuf,
+                                    execute->packetLen);
     if (pNbl == NULL) {
         status = STATUS_NO_MEMORY;
         goto exit;