Loading drivers/char/diag/diagchar_core.c +10 −15 Original line number Diff line number Diff line Loading @@ -220,6 +220,10 @@ static void diag_drain_apps_data(struct diag_apps_data_t *data) return; spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->flushed) { spin_unlock_irqrestore(&driver->diagmem_lock, flags); return; } data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading Loading @@ -3069,8 +3073,8 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, wait_event_interruptible(driver->hdlc_wait_q, (data->flushed == 0)); 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); Loading @@ -3081,11 +3085,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_encoded_size) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3107,13 +3109,11 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + max_encoded_size); diag_hdlc_encode(&send, &enc); /* * This is to check if after HDLC encoding, we are still within * the limits of aggregation buffer. If not, we write out the Loading @@ -3122,7 +3122,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, */ if ((uintptr_t)enc.dest >= (uintptr_t)(data->buf + DIAG_MAX_HDLC_BUF_SIZE)) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3144,7 +3143,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + Loading @@ -3158,7 +3156,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, DIAG_MAX_HDLC_BUF_SIZE; if (pkt_type == DATA_TYPE_RESPONSE) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3167,8 +3164,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, ret = -EIO; goto fail_free_buf; } return PKT_ALLOC; } spin_unlock_irqrestore(&driver->diagmem_lock, flags); return PKT_ALLOC; fail_free_buf: Loading Loading @@ -3206,8 +3204,8 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } wait_event_interruptible(driver->hdlc_wait_q, (data->flushed == 0)); 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); Loading @@ -3218,10 +3216,8 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_pkt_size) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3244,7 +3240,6 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } header.start = CONTROL_CHAR; Loading @@ -3257,7 +3252,6 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, *(uint8_t *)(data->buf + data->len) = CONTROL_CHAR; data->len += sizeof(uint8_t); if (pkt_type == DATA_TYPE_RESPONSE) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3266,8 +3260,9 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, ret = -EIO; goto fail_free_buf; } return PKT_ALLOC; } spin_unlock_irqrestore(&driver->diagmem_lock, flags); return PKT_ALLOC; fail_free_buf: Loading Loading
drivers/char/diag/diagchar_core.c +10 −15 Original line number Diff line number Diff line Loading @@ -220,6 +220,10 @@ static void diag_drain_apps_data(struct diag_apps_data_t *data) return; spin_lock_irqsave(&driver->diagmem_lock, flags); if (data->flushed) { spin_unlock_irqrestore(&driver->diagmem_lock, flags); return; } data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading Loading @@ -3069,8 +3073,8 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, wait_event_interruptible(driver->hdlc_wait_q, (data->flushed == 0)); 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); Loading @@ -3081,11 +3085,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_encoded_size) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3107,13 +3109,11 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + max_encoded_size); diag_hdlc_encode(&send, &enc); /* * This is to check if after HDLC encoding, we are still within * the limits of aggregation buffer. If not, we write out the Loading @@ -3122,7 +3122,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, */ if ((uintptr_t)enc.dest >= (uintptr_t)(data->buf + DIAG_MAX_HDLC_BUF_SIZE)) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3144,7 +3143,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); enc.dest = data->buf + data->len; enc.dest_last = (void *)(data->buf + data->len + Loading @@ -3158,7 +3156,6 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, DIAG_MAX_HDLC_BUF_SIZE; if (pkt_type == DATA_TYPE_RESPONSE) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3167,8 +3164,9 @@ static int diag_process_apps_data_hdlc(unsigned char *buf, int len, ret = -EIO; goto fail_free_buf; } return PKT_ALLOC; } spin_unlock_irqrestore(&driver->diagmem_lock, flags); return PKT_ALLOC; fail_free_buf: Loading Loading @@ -3206,8 +3204,8 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } wait_event_interruptible(driver->hdlc_wait_q, (data->flushed == 0)); 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); Loading @@ -3218,10 +3216,8 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } if ((DIAG_MAX_HDLC_BUF_SIZE - data->len) <= max_pkt_size) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3244,7 +3240,6 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, } data->allocated = 1; data->flushed = 0; spin_unlock_irqrestore(&driver->diagmem_lock, flags); } header.start = CONTROL_CHAR; Loading @@ -3257,7 +3252,6 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, *(uint8_t *)(data->buf + data->len) = CONTROL_CHAR; data->len += sizeof(uint8_t); if (pkt_type == DATA_TYPE_RESPONSE) { spin_lock_irqsave(&driver->diagmem_lock, flags); data->flushed = 1; spin_unlock_irqrestore(&driver->diagmem_lock, flags); err = diag_mux_write(DIAG_LOCAL_PROC, data->buf, data->len, Loading @@ -3266,8 +3260,9 @@ static int diag_process_apps_data_non_hdlc(unsigned char *buf, int len, ret = -EIO; goto fail_free_buf; } return PKT_ALLOC; } spin_unlock_irqrestore(&driver->diagmem_lock, flags); return PKT_ALLOC; fail_free_buf: Loading