Skip to content
This repository was archived by the owner on Jul 3, 2018. It is now read-only.

Commit 8ef00ab

Browse files
committed
Merge remote-tracking branch 'caf/LA.BR.1.3.6_rb1.20' into cm-14.1
Change-Id: I4b92560538d10e56e4ffbe989d808dde0d243378
2 parents 3a020d2 + 0d6e8c4 commit 8ef00ab

File tree

32 files changed

+537
-266
lines changed

32 files changed

+537
-266
lines changed

drivers/char/diag/diag_dci.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2703,6 +2703,8 @@ int diag_dci_register_client(struct diag_dci_reg_tbl_t *reg_entry)
27032703
new_entry->num_buffers = 1;
27042704
break;
27052705
}
2706+
2707+
new_entry->buffers = NULL;
27062708
new_entry->real_time = MODE_REALTIME;
27072709
new_entry->in_service = 0;
27082710
INIT_LIST_HEAD(&new_entry->list_write_buf);
@@ -2776,7 +2778,8 @@ int diag_dci_register_client(struct diag_dci_reg_tbl_t *reg_entry)
27762778

27772779
fail_alloc:
27782780
if (new_entry) {
2779-
for (i = 0; i < new_entry->num_buffers; i++) {
2781+
for (i = 0; ((i < new_entry->num_buffers) &&
2782+
new_entry->buffers); i++) {
27802783
proc_buf = &new_entry->buffers[i];
27812784
if (proc_buf) {
27822785
mutex_destroy(&proc_buf->health_mutex);

drivers/char/diag/diag_debugfs.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
1+
/* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
22
*
33
* This program is free software; you can redistribute it and/or modify
44
* it under the terms of the GNU General Public License version 2 and
@@ -256,8 +256,10 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
256256
struct list_head *temp;
257257
struct diag_cmd_reg_t *item = NULL;
258258

259+
mutex_lock(&driver->cmd_reg_mutex);
259260
if (diag_dbgfs_table_index == driver->cmd_reg_count) {
260261
diag_dbgfs_table_index = 0;
262+
mutex_unlock(&driver->cmd_reg_mutex);
261263
return 0;
262264
}
263265

@@ -266,6 +268,7 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
266268
buf = kzalloc(sizeof(char) * buf_size, GFP_KERNEL);
267269
if (ZERO_OR_NULL_PTR(buf)) {
268270
pr_err("diag: %s, Error allocating memory\n", __func__);
271+
mutex_unlock(&driver->cmd_reg_mutex);
269272
return -ENOMEM;
270273
}
271274
buf_size = ksize(buf);
@@ -310,6 +313,7 @@ static ssize_t diag_dbgfs_read_table(struct file *file, char __user *ubuf,
310313
break;
311314
}
312315
diag_dbgfs_table_index = i;
316+
mutex_unlock(&driver->cmd_reg_mutex);
313317

314318
*ppos = 0;
315319
ret = simple_read_from_buffer(ubuf, count, ppos, buf, bytes_in_buffer);

drivers/hid/usbhid/hiddev.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -510,17 +510,18 @@ static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd,
510510
goto inval;
511511

512512
field = report->field[uref->field_index];
513+
}
513514

514-
if (cmd == HIDIOCGCOLLECTIONINDEX) {
515-
if (uref->usage_index >= field->maxusage)
516-
goto inval;
517-
} else if (uref->usage_index >= field->report_count)
515+
if (cmd == HIDIOCGCOLLECTIONINDEX) {
516+
if (uref->usage_index >= field->maxusage)
518517
goto inval;
519-
}
518+
} else if (uref->usage_index >= field->report_count)
519+
goto inval;
520520

521-
if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) &&
522-
(uref_multi->num_values > HID_MAX_MULTI_USAGES ||
523-
uref->usage_index + uref_multi->num_values > field->report_count))
521+
else if ((cmd == HIDIOCGUSAGES || cmd == HIDIOCSUSAGES) &&
522+
(uref_multi->num_values > HID_MAX_MULTI_USAGES ||
523+
uref->usage_index + uref_multi->num_values >
524+
field->report_count))
524525
goto inval;
525526

526527
switch (cmd) {

drivers/media/platform/msm/camera_v2/fd/msm_fd_dev.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -663,9 +663,13 @@ static int msm_fd_s_fmt_vid_out(struct file *file,
663663
static int msm_fd_reqbufs(struct file *file,
664664
void *fh, struct v4l2_requestbuffers *req)
665665
{
666+
int ret;
666667
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
667668

668-
return vb2_reqbufs(&ctx->vb2_q, req);
669+
mutex_lock(&ctx->fd_device->recovery_lock);
670+
ret = vb2_reqbufs(&ctx->vb2_q, req);
671+
mutex_unlock(&ctx->fd_device->recovery_lock);
672+
return ret;
669673
}
670674

671675
/*
@@ -677,9 +681,14 @@ static int msm_fd_reqbufs(struct file *file,
677681
static int msm_fd_qbuf(struct file *file, void *fh,
678682
struct v4l2_buffer *pb)
679683
{
684+
int ret;
680685
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
681686

682-
return vb2_qbuf(&ctx->vb2_q, pb);
687+
mutex_lock(&ctx->fd_device->recovery_lock);
688+
ret = vb2_qbuf(&ctx->vb2_q, pb);
689+
mutex_unlock(&ctx->fd_device->recovery_lock);
690+
return ret;
691+
683692
}
684693

685694
/*
@@ -691,9 +700,13 @@ static int msm_fd_qbuf(struct file *file, void *fh,
691700
static int msm_fd_dqbuf(struct file *file,
692701
void *fh, struct v4l2_buffer *pb)
693702
{
703+
int ret;
694704
struct fd_ctx *ctx = msm_fd_ctx_from_fh(fh);
695705

696-
return vb2_dqbuf(&ctx->vb2_q, pb, file->f_flags & O_NONBLOCK);
706+
mutex_lock(&ctx->fd_device->recovery_lock);
707+
ret = vb2_dqbuf(&ctx->vb2_q, pb, file->f_flags & O_NONBLOCK);
708+
mutex_unlock(&ctx->fd_device->recovery_lock);
709+
return ret;
697710
}
698711

699712
/*
@@ -1198,6 +1211,7 @@ static int fd_probe(struct platform_device *pdev)
11981211

11991212
mutex_init(&fd->lock);
12001213
spin_lock_init(&fd->slock);
1214+
mutex_init(&fd->recovery_lock);
12011215
init_completion(&fd->hw_halt_completion);
12021216
INIT_LIST_HEAD(&fd->buf_queue);
12031217
fd->dev = &pdev->dev;

drivers/media/platform/msm/camera_v2/fd/msm_fd_dev.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ struct msm_fd_device {
213213

214214
struct mutex lock;
215215
spinlock_t slock;
216+
struct mutex recovery_lock;
216217
int ref_count;
217218

218219
int irq_num;

drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,12 @@ int msm_isp_cfg_stats_stream(struct vfe_device *vfe_dev, void *arg)
795795
if (vfe_dev->stats_data.num_active_stream == 0)
796796
vfe_dev->hw_info->vfe_ops.stats_ops.cfg_ub(vfe_dev);
797797

798+
if (stream_cfg_cmd->num_streams > MSM_ISP_STATS_MAX) {
799+
pr_err("%s invalid num_streams %d\n", __func__,
800+
stream_cfg_cmd->num_streams);
801+
return -EINVAL;
802+
}
803+
798804
if (stream_cfg_cmd->enable) {
799805
msm_isp_stats_update_cgc_override(vfe_dev, stream_cfg_cmd);
800806

drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,7 +1258,8 @@ static int msm_isp_send_hw_cmd(struct vfe_device *vfe_dev,
12581258
(UINT_MAX - reg_cfg_cmd->u.rw_info.len)) ||
12591259
((reg_cfg_cmd->u.rw_info.reg_offset +
12601260
reg_cfg_cmd->u.rw_info.len) >
1261-
resource_size(vfe_dev->vfe_mem))) {
1261+
resource_size(vfe_dev->vfe_mem)) ||
1262+
(reg_cfg_cmd->u.rw_info.reg_offset & 0x3)) {
12621263
pr_err("%s:%d reg_offset %d len %d res %d\n",
12631264
__func__, __LINE__,
12641265
reg_cfg_cmd->u.rw_info.reg_offset,
@@ -1359,7 +1360,8 @@ static int msm_isp_send_hw_cmd(struct vfe_device *vfe_dev,
13591360
reg_cfg_cmd->u.mask_info.reg_offset) ||
13601361
(resource_size(vfe_dev->vfe_mem) <
13611362
reg_cfg_cmd->u.mask_info.reg_offset +
1362-
sizeof(temp))) {
1363+
sizeof(temp)) ||
1364+
(reg_cfg_cmd->u.mask_info.reg_offset & 0x3)) {
13631365
pr_err("%s: VFE_CFG_MASK: Invalid length\n", __func__);
13641366
return -EINVAL;
13651367
}

drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ static int msm_ispif_reset(struct ispif_device *ispif)
425425
ispif->base + ISPIF_VFE_m_INTF_CMD_0(i));
426426
msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY,
427427
ispif->base + ISPIF_VFE_m_INTF_CMD_1(i));
428-
pr_debug("%s: base %lx", __func__, (unsigned long)ispif->base);
428+
pr_debug("%s: base %pK", __func__, ispif->base);
429429
msm_camera_io_w(0, ispif->base +
430430
ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 0));
431431
msm_camera_io_w(0, ispif->base +

drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c

100644100755
Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -415,17 +415,11 @@ static int32_t msm_sensor_create_pd_settings(void *setting,
415415

416416
#ifdef CONFIG_COMPAT
417417
if (is_compat_task()) {
418-
int i = 0;
419-
struct msm_sensor_power_setting32 *power_setting_iter =
420-
(struct msm_sensor_power_setting32 *)compat_ptr((
421-
(struct msm_camera_sensor_slave_info32 *)setting)->
422-
power_setting_array.power_setting);
423-
424-
for (i = 0; i < size_down; i++) {
425-
pd[i].config_val = power_setting_iter[i].config_val;
426-
pd[i].delay = power_setting_iter[i].delay;
427-
pd[i].seq_type = power_setting_iter[i].seq_type;
428-
pd[i].seq_val = power_setting_iter[i].seq_val;
418+
rc = msm_sensor_get_pw_settings_compat(
419+
pd, pu, size_down);
420+
if (rc < 0) {
421+
pr_err("failed");
422+
return -EFAULT;
429423
}
430424
} else
431425
#endif

drivers/media/platform/msm/vidc/msm_v4l2_vidc.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,6 @@ static int __init msm_vidc_init(void)
792792
if (rc) {
793793
dprintk(VIDC_ERR,
794794
"Failed to register platform driver\n");
795-
msm_vidc_debugfs_deinit_drv();
796795
debugfs_remove_recursive(vidc_driver->debugfs_root);
797796
kfree(vidc_driver);
798797
vidc_driver = NULL;
@@ -804,7 +803,6 @@ static int __init msm_vidc_init(void)
804803
static void __exit msm_vidc_exit(void)
805804
{
806805
platform_driver_unregister(&msm_vidc_driver);
807-
msm_vidc_debugfs_deinit_drv();
808806
debugfs_remove_recursive(vidc_driver->debugfs_root);
809807
kfree(vidc_driver);
810808
vidc_driver = NULL;

0 commit comments

Comments
 (0)