Acked-by: Nithin Raju <nit...@vmware.com> -----Original Message----- From: Sairam Venugopal <vsai...@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 <vsai...@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= _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev