Loading drivers/char/diag/diagchar.h +0 −10 Original line number Diff line number Diff line Loading @@ -723,16 +723,6 @@ extern struct diagchar_dev *driver; extern int wrap_enabled; extern uint16_t wrap_count; struct diag_apps_data_t { void *buf; uint32_t len; int ctxt; uint8_t allocated; }; extern struct diag_apps_data_t hdlc_data; extern struct diag_apps_data_t non_hdlc_data; void diag_get_timestamp(char *time_str); void check_drain_timer(void); int diag_get_remote(int remote_info); Loading drivers/char/diag/diagchar_core.c +15 −37 Original line number Diff line number Diff line Loading @@ -156,8 +156,14 @@ static int timer_in_progress; static int diag_mask_clear_param = 1; module_param(diag_mask_clear_param, int, 0644); struct diag_apps_data_t hdlc_data; struct diag_apps_data_t non_hdlc_data; struct diag_apps_data_t { void *buf; uint32_t len; int ctxt; }; static struct diag_apps_data_t hdlc_data; static struct diag_apps_data_t non_hdlc_data; static struct mutex apps_data_mutex; #define DIAGPKT_MAX_DELAYED_RSP 0xFFFF Loading Loading @@ -226,7 +232,6 @@ static void diag_drain_apps_data(struct diag_apps_data_t *data) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } Loading Loading @@ -2920,19 +2925,14 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, send.last = (void *)(buf + len - 1); send.terminate = 1; if (!data->buf) { spin_lock_irqsave(&driver->diagmem_lock, flags); if (!data->buf) data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_encoded_size) { err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -2943,17 +2943,13 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } enc.dest = data->buf + data->len; Loading @@ -2976,17 +2972,13 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + Loading Loading @@ -3014,11 +3006,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, fail_free_buf: spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->allocated) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); fail_ret: return ret; Loading Loading @@ -3046,17 +3036,13 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } if (!data->buf) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_pkt_size) { Loading @@ -3068,17 +3054,13 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } header.start = CONTROL_CHAR; Loading @@ -3105,11 +3087,9 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, fail_free_buf: spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->allocated) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); fail_ret: return ret; Loading Loading @@ -4190,10 +4170,8 @@ static int __init diagchar_init(void) driver->rsp_buf_ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_CMD, TYPE_CMD); hdlc_data.ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_DATA, 1); hdlc_data.len = 0; hdlc_data.allocated = 0; non_hdlc_data.ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_DATA, 1); non_hdlc_data.len = 0; non_hdlc_data.allocated = 0; mutex_init(&driver->hdlc_disable_mutex); mutex_init(&driver->diagchar_mutex); mutex_init(&driver->diag_notifier_mutex); Loading drivers/char/diag/diagfwd.c +3 −14 Original line number Diff line number Diff line Loading @@ -1772,7 +1772,6 @@ static int diagfwd_mux_write_done(unsigned char *buf, int len, int buf_ctxt, int peripheral = -1; int type = -1; int num = -1; struct diag_apps_data_t *temp = NULL; if (!buf || len < 0) return -EINVAL; Loading @@ -1791,19 +1790,9 @@ static int diagfwd_mux_write_done(unsigned char *buf, int len, int buf_ctxt, diag_ws_on_copy(DIAG_WS_MUX); } else if (peripheral == APPS_DATA) { spin_lock_irqsave(&driver->diagmem_lock, flags); if (hdlc_data.allocated) temp = &hdlc_data; else if (non_hdlc_data.allocated) temp = &non_hdlc_data; else DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "No apps data buffer is allocated to be freed\n"); if (temp) { diagmem_free(driver, temp->buf, POOL_TYPE_HDLC); temp->buf = NULL; temp->len = 0; temp->allocated = 0; } diagmem_free(driver, (unsigned char *)buf, POOL_TYPE_HDLC); buf = NULL; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } else { pr_err_ratelimited("diag: Invalid peripheral %d in %s, type: %d\n", Loading Loading
drivers/char/diag/diagchar.h +0 −10 Original line number Diff line number Diff line Loading @@ -723,16 +723,6 @@ extern struct diagchar_dev *driver; extern int wrap_enabled; extern uint16_t wrap_count; struct diag_apps_data_t { void *buf; uint32_t len; int ctxt; uint8_t allocated; }; extern struct diag_apps_data_t hdlc_data; extern struct diag_apps_data_t non_hdlc_data; void diag_get_timestamp(char *time_str); void check_drain_timer(void); int diag_get_remote(int remote_info); Loading
drivers/char/diag/diagchar_core.c +15 −37 Original line number Diff line number Diff line Loading @@ -156,8 +156,14 @@ static int timer_in_progress; static int diag_mask_clear_param = 1; module_param(diag_mask_clear_param, int, 0644); struct diag_apps_data_t hdlc_data; struct diag_apps_data_t non_hdlc_data; struct diag_apps_data_t { void *buf; uint32_t len; int ctxt; }; static struct diag_apps_data_t hdlc_data; static struct diag_apps_data_t non_hdlc_data; static struct mutex apps_data_mutex; #define DIAGPKT_MAX_DELAYED_RSP 0xFFFF Loading Loading @@ -226,7 +232,6 @@ static void diag_drain_apps_data(struct diag_apps_data_t *data) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } Loading Loading @@ -2920,19 +2925,14 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, send.last = (void *)(buf + len - 1); send.terminate = 1; if (!data->buf) { spin_lock_irqsave(&driver->diagmem_lock, flags); if (!data->buf) data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_encoded_size) { err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -2943,17 +2943,13 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } enc.dest = data->buf + data->len; Loading @@ -2976,17 +2972,13 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + Loading Loading @@ -3014,11 +3006,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, fail_free_buf: spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->allocated) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); fail_ret: return ret; Loading Loading @@ -3046,17 +3036,13 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } if (!data->buf) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_pkt_size) { Loading @@ -3068,17 +3054,13 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->buf = NULL; data->len = 0; spin_lock_irqsave(&driver->diagmem_lock, flags); data->buf = diagmem_alloc(driver, DIAG_MAX_HDLC_BUF_SIZE + APF_DIAG_PADDING, POOL_TYPE_HDLC); if (!data->buf) { ret = PKT_DROP; spin_unlock_irqrestore(&driver->diagmem_lock, flags); goto fail_ret; } data->allocated = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } header.start = CONTROL_CHAR; Loading @@ -3105,11 +3087,9 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, fail_free_buf: spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->allocated) diagmem_free(driver, data->buf, POOL_TYPE_HDLC); data->buf = NULL; data->len = 0; data->allocated = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); fail_ret: return ret; Loading Loading @@ -4190,10 +4170,8 @@ static int __init diagchar_init(void) driver->rsp_buf_ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_CMD, TYPE_CMD); hdlc_data.ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_DATA, 1); hdlc_data.len = 0; hdlc_data.allocated = 0; non_hdlc_data.ctxt = SET_BUF_CTXT(APPS_DATA, TYPE_DATA, 1); non_hdlc_data.len = 0; non_hdlc_data.allocated = 0; mutex_init(&driver->hdlc_disable_mutex); mutex_init(&driver->diagchar_mutex); mutex_init(&driver->diag_notifier_mutex); Loading
drivers/char/diag/diagfwd.c +3 −14 Original line number Diff line number Diff line Loading @@ -1772,7 +1772,6 @@ static int diagfwd_mux_write_done(unsigned char *buf, int len, int buf_ctxt, int peripheral = -1; int type = -1; int num = -1; struct diag_apps_data_t *temp = NULL; if (!buf || len < 0) return -EINVAL; Loading @@ -1791,19 +1790,9 @@ static int diagfwd_mux_write_done(unsigned char *buf, int len, int buf_ctxt, diag_ws_on_copy(DIAG_WS_MUX); } else if (peripheral == APPS_DATA) { spin_lock_irqsave(&driver->diagmem_lock, flags); if (hdlc_data.allocated) temp = &hdlc_data; else if (non_hdlc_data.allocated) temp = &non_hdlc_data; else DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "No apps data buffer is allocated to be freed\n"); if (temp) { diagmem_free(driver, temp->buf, POOL_TYPE_HDLC); temp->buf = NULL; temp->len = 0; temp->allocated = 0; } diagmem_free(driver, (unsigned char *)buf, POOL_TYPE_HDLC); buf = NULL; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } else { pr_err_ratelimited("diag: Invalid peripheral %d in %s, type: %d\n", Loading