Commit 9fd6966c authored by Mithlesh Thukral's avatar Mithlesh Thukral Committed by Greg Kroah-Hartman

Staging: sxg: Fix memory leak caused by double allocation of rings

* The receive rings were getting allocated twice. Once at probe time
  and once at open time. This leaked huge amounts of memory.
  Fix this leak and now allocation is done only once.
Signed-off-by: default avatarLinSysSoft Sahara Team <saharaproj@linsyssoft.com>
Signed-off-by: default avatarMithlesh Thukral <mithlesh@linsyssoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent bbb18b97
...@@ -613,8 +613,7 @@ static bool sxg_download_microcode(struct adapter_t *adapter, ...@@ -613,8 +613,7 @@ static bool sxg_download_microcode(struct adapter_t *adapter,
*/ */
static int sxg_allocate_resources(struct adapter_t *adapter) static int sxg_allocate_resources(struct adapter_t *adapter)
{ {
int status; int status = STATUS_SUCCESS;
u32 i;
u32 RssIds, IsrCount; u32 RssIds, IsrCount;
/* struct sxg_xmt_ring *XmtRing; */ /* struct sxg_xmt_ring *XmtRing; */
/* struct sxg_rcv_ring *RcvRing; */ /* struct sxg_rcv_ring *RcvRing; */
...@@ -736,30 +735,6 @@ static int sxg_allocate_resources(struct adapter_t *adapter) ...@@ -736,30 +735,6 @@ static int sxg_allocate_resources(struct adapter_t *adapter)
ASSERT(sizeof(struct sxg_rcv_descriptor_block) == ASSERT(sizeof(struct sxg_rcv_descriptor_block) ==
SXG_RCV_DESCRIPTOR_BLOCK_SIZE); SXG_RCV_DESCRIPTOR_BLOCK_SIZE);
/*
* Allocate receive data buffers. We allocate a block of buffers and
* a corresponding descriptor block at once. See sxghw.h:SXG_RCV_BLOCK
*/
for (i = 0; i < SXG_INITIAL_RCV_DATA_BUFFERS;
i += SXG_RCV_DESCRIPTORS_PER_BLOCK) {
status = sxg_allocate_buffer_memory(adapter,
SXG_RCV_BLOCK_SIZE(SXG_RCV_DATA_HDR_SIZE),
SXG_BUFFER_TYPE_RCV);
if (status != STATUS_SUCCESS)
return status;
}
/*
* NBL resource allocation can fail in the 'AllocateComplete' routine,
* which doesn't return status. Make sure we got the number of buffers
* we requested
*/
if (adapter->FreeRcvBufferCount < SXG_INITIAL_RCV_DATA_BUFFERS) {
SXG_TRACE(TRACE_SXG, SxgTraceBuffer, TRACE_NOISY, "XAResF6",
adapter, adapter->FreeRcvBufferCount, SXG_MAX_ENTRIES,
0);
return (STATUS_RESOURCES);
}
DBG_ERROR("%s Allocate EventRings size[%x]\n", __func__, DBG_ERROR("%s Allocate EventRings size[%x]\n", __func__,
(unsigned int)(sizeof(struct sxg_event_ring) * RssIds)); (unsigned int)(sizeof(struct sxg_event_ring) * RssIds));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment