Merge "ARM: msm: GCC Version change."
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index ac6ccf3b..e96ae14 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -739,7 +739,7 @@
#define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)
#ifdef CONFIG_ENABLE_VMALLOC_SAVING
-void print_vmalloc_lowmem_info(void)
+static void print_vmalloc_lowmem_info(void)
{
int i;
void *va_start, *va_end;
@@ -759,11 +759,21 @@
}
if (i && ((meminfo.bank[i-1].start + meminfo.bank[i-1].size) !=
meminfo.bank[i].start)) {
+ phys_addr_t end_phys;
+
+ if((meminfo.bank[i-1].start + meminfo.bank[i-1].size) > arm_lowmem_limit)
+ continue;
+
+ if(meminfo.bank[i].start > arm_lowmem_limit)
+ end_phys = arm_lowmem_limit;
+ else
+ end_phys = meminfo.bank[i].start;
+
if (meminfo.bank[i-1].start + meminfo.bank[i-1].size
<= MAX_HOLE_ADDRESS) {
va_start = __va(meminfo.bank[i-1].start
+ meminfo.bank[i-1].size);
- va_end = __va(meminfo.bank[i].start);
+ va_end = __va(end_phys);
printk(KERN_NOTICE
" vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n",
MLM((unsigned long)va_start,
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 947e229..a2f5cc5 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1568,9 +1568,11 @@
pmd_t *pmd = NULL;
unsigned long next;
unsigned long pfn = __phys_to_pfn(phys_start);
- bool fixup = false;
+ bool fixup = false, end_fixup = false;
unsigned long saved_start = addr;
+ if (phys_start > arm_lowmem_limit)
+ break;
if (phys_end > arm_lowmem_limit)
end = (unsigned long)__va(arm_lowmem_limit);
if (phys_start >= phys_end)
@@ -1586,8 +1588,10 @@
pmd++;
}
- if (end & SECTION_SIZE)
+ if (end & SECTION_SIZE) {
+ end_fixup = true;
pmd_empty_section_gap(end);
+ }
#endif
do {
@@ -1611,6 +1615,10 @@
pmd = pmd_off_k(saved_start);
pmd[0] = pmd[1] & ~1;
}
+ if (end_fixup) {
+ pmd = pmd_off_k(end);
+ pmd[1] = pmd[0] & ~1;
+ }
}
}
#else
diff --git a/drivers/net/wireless/wcnss/wcnss_wlan.c b/drivers/net/wireless/wcnss/wcnss_wlan.c
index 12e35bf..131c527 100644
--- a/drivers/net/wireless/wcnss/wcnss_wlan.c
+++ b/drivers/net/wireless/wcnss/wcnss_wlan.c
@@ -56,6 +56,7 @@
#define WCNSS_ENABLE_PC_LATENCY PM_QOS_DEFAULT_VALUE
#define WCNSS_PM_QOS_TIMEOUT 15000
#define WAIT_FOR_CBC_IND 2
+#define IS_CAL_DATA_PRESENT 0
/* module params */
#define WCNSS_CONFIG_UNSPECIFIED (-1)
@@ -2254,7 +2255,7 @@
if (!FW_CALDATA_CAPABLE())
goto nv_download;
- if (!penv->fw_cal_available && WCNSS_CONFIG_UNSPECIFIED
+ if (!penv->fw_cal_available && IS_CAL_DATA_PRESENT
!= has_calibrated_data && !penv->user_cal_available) {
while (!penv->user_cal_available && retry++ < 5)
msleep(500);
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c
index e0b066a..aa0754d 100644
--- a/drivers/staging/android/binder.c
+++ b/drivers/staging/android/binder.c
@@ -3590,13 +3590,25 @@
static int binder_proc_show(struct seq_file *m, void *unused)
{
+ struct binder_proc *itr;
struct binder_proc *proc = m->private;
+ struct hlist_node *pos;
int do_lock = !binder_debug_no_lock;
+ bool valid_proc = false;
if (do_lock)
mutex_lock(&binder_lock);
- seq_puts(m, "binder proc state:\n");
- print_binder_proc(m, proc, 1);
+
+ hlist_for_each_entry(itr, pos, &binder_procs, proc_node) {
+ if (itr == proc) {
+ valid_proc = true;
+ break;
+ }
+ }
+ if (valid_proc) {
+ seq_puts(m, "binder proc state:\n");
+ print_binder_proc(m, proc, 1);
+ }
if (do_lock)
mutex_unlock(&binder_lock);
return 0;
diff --git a/drivers/video/msm/mdss/mdss_dsi.h b/drivers/video/msm/mdss/mdss_dsi.h
index 53ae680..e85a9b8 100644
--- a/drivers/video/msm/mdss/mdss_dsi.h
+++ b/drivers/video/msm/mdss/mdss_dsi.h
@@ -239,7 +239,7 @@
#define DSI_EV_PLL_UNLOCKED 0x0001
#define DSI_EV_MDP_FIFO_UNDERFLOW 0x0002
-#define DSI_EV_DSI_FIFO_EMPTY 0x0003
+#define DSI_EV_DSI_FIFO_EMPTY 0x0004
#define DSI_EV_MDP_BUSY_RELEASE 0x80000000
struct mdss_dsi_ctrl_pdata {
diff --git a/drivers/video/msm/mdss/mdss_mdp.h b/drivers/video/msm/mdss/mdss_mdp.h
index 76d9ffe..61f6e37 100644
--- a/drivers/video/msm/mdss/mdss_mdp.h
+++ b/drivers/video/msm/mdss/mdss_mdp.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -197,6 +197,7 @@
struct mdss_mdp_mixer *mixer_right;
struct mutex lock;
struct mutex *shared_lock;
+ struct mutex *wb_lock;
spinlock_t spin_lock;
struct mdss_panel_data *panel_data;
diff --git a/drivers/video/msm/mdss/mdss_mdp_ctl.c b/drivers/video/msm/mdss/mdss_mdp_ctl.c
index 44f645f..f76d65b 100644
--- a/drivers/video/msm/mdss/mdss_mdp_ctl.c
+++ b/drivers/video/msm/mdss/mdss_mdp_ctl.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -2228,6 +2228,7 @@
{
struct mdss_mdp_ctl *head;
struct mutex *shared_lock = NULL;
+ struct mutex *wb_lock = NULL;
u32 i;
u32 size = len;
@@ -2241,6 +2242,14 @@
return -ENOMEM;
}
mutex_init(shared_lock);
+ wb_lock = devm_kzalloc(&mdata->pdev->dev,
+ sizeof(struct mutex),
+ GFP_KERNEL);
+ if (!wb_lock) {
+ pr_err("unable to allocate mem for mutex\n");
+ return -ENOMEM;
+ }
+ mutex_init(wb_lock);
}
head = devm_kzalloc(&mdata->pdev->dev, sizeof(struct mdss_mdp_ctl) *
@@ -2260,6 +2269,7 @@
if (!mdata->has_wfd_blk) {
head[len - 1].shared_lock = shared_lock;
+ head[len - 1].wb_lock = wb_lock;
/*
* Allocate a virtual ctl to be able to perform simultaneous
* line mode and block mode operations on the same
diff --git a/drivers/video/msm/mdss/mdss_mdp_overlay.c b/drivers/video/msm/mdss/mdss_mdp_overlay.c
index 604ab7a..a1d8c322f 100644
--- a/drivers/video/msm/mdss/mdss_mdp_overlay.c
+++ b/drivers/video/msm/mdss/mdss_mdp_overlay.c
@@ -1231,6 +1231,7 @@
mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_BEGIN);
mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_READY);
mutex_lock(ctl->shared_lock);
+ mutex_lock(ctl->wb_lock);
}
mutex_lock(&mdp5_data->ov_lock);
@@ -1334,8 +1335,10 @@
wake_up_all(&mfd->kickoff_wait_q);
}
mutex_unlock(&mdp5_data->ov_lock);
- if (ctl->shared_lock)
+ if (ctl->shared_lock) {
+ mutex_unlock(ctl->wb_lock);
mutex_unlock(ctl->shared_lock);
+ }
ATRACE_END(__func__);
return ret;
}
diff --git a/drivers/video/msm/mdss/mdss_mdp_pp.c b/drivers/video/msm/mdss/mdss_mdp_pp.c
index f434a43..f811174 100644
--- a/drivers/video/msm/mdss/mdss_mdp_pp.c
+++ b/drivers/video/msm/mdss/mdss_mdp_pp.c
@@ -4848,6 +4848,7 @@
base = mdata->ad_off[ad->calc_hw_num].base;
if ((ad->cfg.mode == MDSS_AD_MODE_AUTO_STR) && (ad->last_bl == 0)) {
+ complete(&ad->comp);
mutex_unlock(&ad->lock);
return;
}
diff --git a/drivers/video/msm/mdss/mdss_mdp_rotator.c b/drivers/video/msm/mdss/mdss_mdp_rotator.c
index 64a4020..773142a 100755
--- a/drivers/video/msm/mdss/mdss_mdp_rotator.c
+++ b/drivers/video/msm/mdss/mdss_mdp_rotator.c
@@ -214,6 +214,13 @@
struct mdss_mdp_pipe *pipe)
{
int ret;
+ struct mdss_mdp_pipe *rot_pipe = NULL;
+ struct mdss_mdp_ctl *orig_ctl;
+
+ rot_pipe = rot->pipe;
+ orig_ctl = rot_pipe->mixer->ctl;
+ if (orig_ctl->wb_lock)
+ mutex_lock(orig_ctl->wb_lock);
pipe->flags = rot->flags;
pipe->src_fmt = mdss_mdp_get_format_params(rot->format);
@@ -227,12 +234,12 @@
rot->params_changed = 0;
ret = mdss_mdp_smp_reserve(pipe);
- if (ret) {
+ if (ret)
pr_debug("unable to mdss_mdp_smp_reserve rot data\n");
- return ret;
- }
- return 0;
+ if (orig_ctl->wb_lock)
+ mutex_unlock(orig_ctl->wb_lock);
+ return ret;
}
static int mdss_mdp_rotator_queue_sub(struct mdss_mdp_rotator_session *rot,
diff --git a/security/selinux/ss/avtab.c b/security/selinux/ss/avtab.c
index 2e4ff00..dd7466c 100644
--- a/security/selinux/ss/avtab.c
+++ b/security/selinux/ss/avtab.c
@@ -565,6 +565,9 @@
return rc;
if (cur->key.specified & AVTAB_OP) {
+ rc = put_entry(&cur->datum.u.ops->type, sizeof(u8), 1, fp);
+ if (rc)
+ return rc;
for (i = 0; i < ARRAY_SIZE(cur->datum.u.ops->op.perms); i++)
buf32[i] = cpu_to_le32(cur->datum.u.ops->op.perms[i]);
rc = put_entry(buf32, sizeof(u32),