qcacmn: Change REO queue descriptor delete sequence
Change REO queue descriptor delete sequence to flush base and extension descriptors separately, since flushing base descriptor alone results in extensions flushed by HW much later, sometimes after freeing descriptor memory, causing use-after-free corruptions. Also increase REO command and status ring sizes since number of commands per RX TID flush has increased with this change. Fix interrupt batch count setting for non pkt/buffer rings, which includes REO status ring. Also remove callbacks during reo command list destroy, done as part of SOC detach. This should not be done since callbacks will access stale data structures that are freed as part of PDEV/SOC detach. Change-Id: I4337454d3f53cc0b3c3014ef07cc2ba13cfebb18 CRs-Fixed: 2175989
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

orang tua
e1d7e0ecc9
melakukan
25f1b0434b
@@ -79,6 +79,9 @@ void hal_reo_qdesc_setup(void *hal_soc, int tid, uint32_t ba_window_size,
|
||||
|
||||
hal_uniform_desc_hdr_setup(reo_queue_desc, HAL_DESC_REO_OWNED,
|
||||
HAL_REO_QUEUE_DESC);
|
||||
/* Fixed pattern in reserved bits for debugging */
|
||||
HAL_DESC_SET_FIELD(reo_queue_desc, UNIFORM_DESCRIPTOR_HEADER_0,
|
||||
RESERVED_0A, 0xDDBEEF);
|
||||
|
||||
/* This a just a SW meta data and will be copied to REO destination
|
||||
* descriptors indicated by hardware.
|
||||
@@ -203,16 +206,25 @@ void hal_reo_qdesc_setup(void *hal_soc, int tid, uint32_t ba_window_size,
|
||||
/* Initialize first reo queue extension descriptor */
|
||||
hal_uniform_desc_hdr_setup(reo_queue_ext_desc,
|
||||
HAL_DESC_REO_OWNED, HAL_REO_QUEUE_EXT_DESC);
|
||||
/* Fixed pattern in reserved bits for debugging */
|
||||
HAL_DESC_SET_FIELD(reo_queue_ext_desc,
|
||||
UNIFORM_DESCRIPTOR_HEADER_0, RESERVED_0A, 0xADBEEF);
|
||||
/* Initialize second reo queue extension descriptor */
|
||||
reo_queue_ext_desc = (uint32_t *)
|
||||
(((struct rx_reo_queue_ext *)reo_queue_ext_desc) + 1);
|
||||
hal_uniform_desc_hdr_setup(reo_queue_ext_desc,
|
||||
HAL_DESC_REO_OWNED, HAL_REO_QUEUE_EXT_DESC);
|
||||
/* Fixed pattern in reserved bits for debugging */
|
||||
HAL_DESC_SET_FIELD(reo_queue_ext_desc,
|
||||
UNIFORM_DESCRIPTOR_HEADER_0, RESERVED_0A, 0xBDBEEF);
|
||||
/* Initialize third reo queue extension descriptor */
|
||||
reo_queue_ext_desc = (uint32_t *)
|
||||
(((struct rx_reo_queue_ext *)reo_queue_ext_desc) + 1);
|
||||
hal_uniform_desc_hdr_setup(reo_queue_ext_desc,
|
||||
HAL_DESC_REO_OWNED, HAL_REO_QUEUE_EXT_DESC);
|
||||
/* Fixed pattern in reserved bits for debugging */
|
||||
HAL_DESC_SET_FIELD(reo_queue_ext_desc,
|
||||
UNIFORM_DESCRIPTOR_HEADER_0, RESERVED_0A, 0xCDBEEF);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user