Skip to content

Commit

Permalink
Some more cleanups.
Browse files Browse the repository at this point in the history
  • Loading branch information
wli5 committed Mar 21, 2017
1 parent 4dcccf1 commit 71cc557
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 81 deletions.
107 changes: 71 additions & 36 deletions module/zfs/qat_compress.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,43 @@
#define QAT_MAX_BUF_SIZE (128*1024)

/*
* See qat_compress.h for more information about these fields.
* Used for qat kstat.
*/
typedef struct qat_stats {
/*
* Number of jobs submitted to qat compression engine.
*/
kstat_named_t comp_requests;
/*
* Total bytes sent to qat compression engine.
*/
kstat_named_t comp_total_in_bytes;
/*
* Total bytes output from qat compression engine.
*/
kstat_named_t comp_total_out_bytes;
/*
* Number of jobs submitted to qat de-compression engine.
*/
kstat_named_t decomp_requests;
/*
* Total bytes sent to qat de-compression engine.
*/
kstat_named_t decomp_total_in_bytes;
/*
* Total bytes output from qat de-compression engine.
*/
kstat_named_t decomp_total_out_bytes;
/*
* Number of fails in qat engine.
* Note: when qat fail happens, it doesn't mean a critical hardware
* issue, sometimes it is because the output buffer is not big enough,
* and the compression job will be transfered to gzip software again,
* so the functionality of ZFS is not impacted.
*/
kstat_named_t dc_fails;
} qat_stats_t;

qat_stats_t qat_stats = {
{ "comp_reqests", KSTAT_DATA_UINT64 },
{ "comp_total_in_bytes", KSTAT_DATA_UINT64 },
Expand All @@ -70,7 +105,7 @@ static CpaInstanceHandle dc_inst_handles[MAX_INSTANCES];
static CpaDcSessionHandle session_handles[MAX_INSTANCES];
static CpaBufferList **buffer_array[MAX_INSTANCES];
static Cpa16U num_inst = 0;
static Cpa16U inst = 0;
static Cpa16U inst_num = 0;
static boolean_t qat_init_done = B_FALSE;
int zfs_qat_disable = 0;

Expand All @@ -97,23 +132,23 @@ mem_to_page(void *addr)
static void
qat_dc_callback(void *p_callback, CpaStatus status)
{
if (NULL != p_callback)
if (p_callback != NULL)
complete((struct completion *)p_callback);
}

static inline CpaStatus
mem_alloc_contig(void **pp_mem_addr, Cpa32U size_bytes)
{
*pp_mem_addr = kmalloc(size_bytes, GFP_KERNEL);
if (NULL == *pp_mem_addr)
if (*pp_mem_addr == NULL)
return (CPA_STATUS_RESOURCE);
return (CPA_STATUS_SUCCESS);
}

static inline void
mem_free_contig(void **pp_mem_addr)
{
if (NULL != *pp_mem_addr) {
if (*pp_mem_addr != NULL) {
kfree(*pp_mem_addr);
*pp_mem_addr = NULL;
}
Expand All @@ -124,19 +159,19 @@ qat_clean(void)
{
Cpa16U buff_num = 0;
Cpa16U num_inter_buff_lists = 0;
Cpa16U inst = 0;
Cpa16U i = 0;

for (inst = 0; inst < num_inst; inst++) {
cpaDcStopInstance(dc_inst_handles[inst]);
PHYS_CONTIG_FREE(session_handles[inst]);
for (i = 0; i < num_inst; i++) {
cpaDcStopInstance(dc_inst_handles[i]);
PHYS_CONTIG_FREE(session_handles[i]);
/* free intermediate buffers */
if (buffer_array[inst] != NULL) {
if (buffer_array[i] != NULL) {
cpaDcGetNumIntermediateBuffers(
dc_inst_handles[inst], &num_inter_buff_lists);
dc_inst_handles[i], &num_inter_buff_lists);
for (buff_num = 0; buff_num < num_inter_buff_lists;
buff_num++) {
CpaBufferList *buffer_inter =
buffer_array[inst][buff_num];
buffer_array[i][buff_num];
if (buffer_inter->pBuffers) {
PHYS_CONTIG_FREE(
buffer_inter->pBuffers->pData);
Expand Down Expand Up @@ -164,7 +199,7 @@ qat_init(void)
Cpa16U buff_num = 0;
Cpa32U buff_meta_size = 0;
CpaDcSessionSetupData sd = {0};
Cpa16U inst;
Cpa16U i;

status = cpaDcGetNumInstances(&num_inst);
if (status != CPA_STATUS_SUCCESS || num_inst == 0)
Expand All @@ -177,38 +212,38 @@ qat_init(void)
if (status != CPA_STATUS_SUCCESS)
return (-1);

for (inst = 0; inst < num_inst; inst++) {
cpaDcSetAddressTranslation(dc_inst_handles[inst],
for (i = 0; i < num_inst; i++) {
cpaDcSetAddressTranslation(dc_inst_handles[i],
(void*)virt_to_phys);

status = cpaDcBufferListGetMetaSize(dc_inst_handles[inst],
status = cpaDcBufferListGetMetaSize(dc_inst_handles[i],
1, &buff_meta_size);

if (status == CPA_STATUS_SUCCESS)
status = cpaDcGetNumIntermediateBuffers(
dc_inst_handles[inst], &num_inter_buff_lists);
dc_inst_handles[i], &num_inter_buff_lists);

if (status == CPA_STATUS_SUCCESS && num_inter_buff_lists != 0)
status = PHYS_CONTIG_ALLOC(&buffer_array[inst],
status = PHYS_CONTIG_ALLOC(&buffer_array[i],
num_inter_buff_lists *
sizeof (CpaBufferList *));

for (buff_num = 0; buff_num < num_inter_buff_lists;
buff_num++) {
if (status == CPA_STATUS_SUCCESS)
status = PHYS_CONTIG_ALLOC(
&buffer_array[inst][buff_num],
&buffer_array[i][buff_num],
sizeof (CpaBufferList));

if (status == CPA_STATUS_SUCCESS)
status = PHYS_CONTIG_ALLOC(
&buffer_array[inst][buff_num]->
&buffer_array[i][buff_num]->
pPrivateMetaData,
buff_meta_size);

if (status == CPA_STATUS_SUCCESS)
status = PHYS_CONTIG_ALLOC(
&buffer_array[inst][buff_num]->pBuffers,
&buffer_array[i][buff_num]->pBuffers,
sizeof (CpaFlatBuffer));

if (status == CPA_STATUS_SUCCESS) {
Expand All @@ -219,19 +254,19 @@ qat_init(void)
* size here.
*/
status = PHYS_CONTIG_ALLOC(
&buffer_array[inst][buff_num]->pBuffers->
&buffer_array[i][buff_num]->pBuffers->
pData, 2 * QAT_MAX_BUF_SIZE);
if (status != CPA_STATUS_SUCCESS)
goto fail;

buffer_array[inst][buff_num]->numBuffers = 1;
buffer_array[inst][buff_num]->pBuffers->
buffer_array[i][buff_num]->numBuffers = 1;
buffer_array[i][buff_num]->pBuffers->
dataLenInBytes = 2 * QAT_MAX_BUF_SIZE;
}
}

status = cpaDcStartInstance(dc_inst_handles[inst],
num_inter_buff_lists, buffer_array[inst]);
status = cpaDcStartInstance(dc_inst_handles[i],
num_inter_buff_lists, buffer_array[i]);
if (status != CPA_STATUS_SUCCESS)
goto fail;

Expand All @@ -242,17 +277,17 @@ qat_init(void)
sd.sessState = CPA_DC_STATELESS;
sd.deflateWindowSize = 7;
sd.checksum = CPA_DC_ADLER32;
status = cpaDcGetSessionSize(dc_inst_handles[inst],
status = cpaDcGetSessionSize(dc_inst_handles[i],
&sd, &sess_size, &ctx_size);
if (status != CPA_STATUS_SUCCESS)
goto fail;

PHYS_CONTIG_ALLOC(&session_handles[inst], sess_size);
if (session_handles[inst] == NULL)
PHYS_CONTIG_ALLOC(&session_handles[i], sess_size);
if (session_handles[i] == NULL)
goto fail;

status = cpaDcInitSession(dc_inst_handles[inst],
session_handles[inst],
status = cpaDcInitSession(dc_inst_handles[i],
session_handles[i],
&sd, NULL, qat_dc_callback);
if (status != CPA_STATUS_SUCCESS)
goto fail;
Expand Down Expand Up @@ -319,8 +354,8 @@ qat_compress(qat_compress_dir_t dir, char *src, int src_len,
struct page **out_pages = NULL;
struct completion complete;
size_t ret = -1;
int page_num = 0;
int inst_index;
Cpa16U page_num = 0;
Cpa16U i;

Cpa32U src_buffer_list_mem_size = sizeof (CpaBufferList) +
(num_src_buf * sizeof (CpaFlatBuffer));
Expand All @@ -339,9 +374,9 @@ qat_compress(qat_compress_dir_t dir, char *src, int src_len,
num_dst_buf * sizeof (struct page *)) != CPA_STATUS_SUCCESS)
goto fail;

inst_index = atomic_inc_32_nv(&inst) % num_inst;
dc_inst_handle = dc_inst_handles[inst_index];
session_handle = session_handles[inst_index];
i = atomic_inc_32_nv(&inst_num) % num_inst;
dc_inst_handle = dc_inst_handles[i];
session_handle = session_handles[i];

cpaDcBufferListGetMetaSize(dc_inst_handle, num_src_buf,
&buffer_meta_size);
Expand Down
51 changes: 6 additions & 45 deletions module/zfs/qat_compress.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,62 +26,23 @@
#include <sys/zio.h>
#include "cpa.h"
#include "dc/cpa_dc.h"

typedef enum qat_compress_dir {
QAT_COMPRESS = 0,
QAT_DECOMPRESS = 1,
} qat_compress_dir_t;

extern int qat_init(void);
extern void qat_fini(void);
extern boolean_t qat_use_accel(size_t s_len);
extern int qat_compress(qat_compress_dir_t dir,
char *src, int src_len,
char *dst, int dst_len,
size_t *c_len);
/*
* Used for qat kstat.
*/
typedef struct qat_stats {
/*
* Number of jobs submitted to qat compression engine.
*/
kstat_named_t comp_requests;
/*
* Total bytes sent to qat compression engine.
*/
kstat_named_t comp_total_in_bytes;
/*
* Total bytes output from qat compression engine.
*/
kstat_named_t comp_total_out_bytes;
/*
* Number of jobs submitted to qat de-compression engine.
*/
kstat_named_t decomp_requests;
/*
* Total bytes sent to qat de-compression engine.
*/
kstat_named_t decomp_total_in_bytes;
/*
* Total bytes output from qat de-compression engine.
*/
kstat_named_t decomp_total_out_bytes;
/*
* Number of fails in qat engine.
* Note: when qat fail happens, it doesn't mean a critical hardware
* issue, sometimes it is because the output buffer is not big enough,
* and the compression job will be transfered to gzip software again,
* so the functionality of ZFS is not impacted.
*/
kstat_named_t dc_fails;
} qat_stats_t;

extern qat_stats_t qat_stats;

extern int qat_compress(qat_compress_dir_t dir, char *src, int src_len,
char *dst, int dst_len, size_t *c_len);
#else
#define CPA_STATUS_SUCCESS 0
#define qat_init()
#define qat_fini()
#define qat_use_accel(s_len) 0
#define qat_compress(dir, s, sl, d, dl, cl) 0
#endif
#endif

#endif /* _SYS_QAT_COMPRESS_H */

0 comments on commit 71cc557

Please sign in to comment.