Merge "ARM: dts: msm: Enable wcnss node for apq8009"
diff --git a/arch/arm/configs/msm8909-perf_defconfig b/arch/arm/configs/msm8909-perf_defconfig
index b4ae846..442bc06 100644
--- a/arch/arm/configs/msm8909-perf_defconfig
+++ b/arch/arm/configs/msm8909-perf_defconfig
@@ -424,6 +424,7 @@
CONFIG_MSM_PIL_SSR_GENERIC=y
CONFIG_MSM_PIL_MSS_QDSP6V5=y
CONFIG_MSM_EVENT_TIMER=y
+CONFIG_QTI_RPM_STATS_LOG=y
CONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=y
CONFIG_MSM_BAM_DMUX=y
CONFIG_WCNSS_CORE=y
@@ -437,6 +438,7 @@
CONFIG_QTI_MPM=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDER_IPC_32BIT=y
CONFIG_STM=y
CONFIG_SENSORS_SSC=y
CONFIG_MSM_TZ_LOG=y
diff --git a/arch/arm/configs/msm8909_defconfig b/arch/arm/configs/msm8909_defconfig
index 4d1bda0..787b38e 100644
--- a/arch/arm/configs/msm8909_defconfig
+++ b/arch/arm/configs/msm8909_defconfig
@@ -479,6 +479,7 @@
CONFIG_QTI_MPM=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDER_IPC_32BIT=y
CONFIG_SENSORS_SSC=y
CONFIG_MSM_TZ_LOG=y
CONFIG_EXT2_FS=y
diff --git a/arch/arm/configs/sdm670-perf_defconfig b/arch/arm/configs/sdm670-perf_defconfig
index eddab29..33d53db 100644
--- a/arch/arm/configs/sdm670-perf_defconfig
+++ b/arch/arm/configs/sdm670-perf_defconfig
@@ -342,9 +342,12 @@
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_MSM_VIDC_V4L2=y
+CONFIG_MSM_VIDC_GOVERNORS=y
CONFIG_MSM_SDE_ROTATOR=y
CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG=y
CONFIG_QCOM_KGSL=y
@@ -528,6 +531,7 @@
CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_INFO=y
+CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
CONFIG_PAGE_EXTENSION=y
CONFIG_DETECT_HUNG_TASK=y
diff --git a/arch/arm/configs/sdm670_defconfig b/arch/arm/configs/sdm670_defconfig
index 949b279..51ca98d 100644
--- a/arch/arm/configs/sdm670_defconfig
+++ b/arch/arm/configs/sdm670_defconfig
@@ -352,9 +352,12 @@
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
CONFIG_VIDEO_ADV_DEBUG=y
CONFIG_VIDEO_FIXED_MINOR_RANGES=y
CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_MSM_VIDC_V4L2=y
+CONFIG_MSM_VIDC_GOVERNORS=y
CONFIG_MSM_SDE_ROTATOR=y
CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG=y
CONFIG_QCOM_KGSL=y
@@ -552,6 +555,7 @@
CONFIG_PRINTK_TIME=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_INFO=y
+CONFIG_FRAME_WARN=2048
CONFIG_PAGE_OWNER=y
CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y
CONFIG_MAGIC_SYSRQ=y
diff --git a/arch/arm64/boot/dts/qcom/msm8917-pmi8940.dtsi b/arch/arm64/boot/dts/qcom/msm8917-pmi8940.dtsi
index 9b9cd47..9212d2d 100644
--- a/arch/arm64/boot/dts/qcom/msm8917-pmi8940.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8917-pmi8940.dtsi
@@ -33,3 +33,13 @@
qcom,switch-source = <&pmi8940_switch>;
};
};
+
+&labibb {
+ status = "ok";
+ qpnp,qpnp-labibb-mode = "lcd";
+};
+
+&mdss_dsi0 {
+ lab-supply = <&lab_regulator>;
+ ibb-supply = <&ibb_regulator>;
+};
diff --git a/arch/arm64/boot/dts/qcom/msm8917-pmi8950.dtsi b/arch/arm64/boot/dts/qcom/msm8917-pmi8950.dtsi
index e86b9d7..95e003b 100644
--- a/arch/arm64/boot/dts/qcom/msm8917-pmi8950.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8917-pmi8950.dtsi
@@ -22,3 +22,13 @@
&usb_otg {
extcon = <&qpnp_smbcharger>;
};
+
+&labibb {
+ status = "ok";
+ qpnp,qpnp-labibb-mode = "lcd";
+};
+
+&mdss_dsi0 {
+ lab-supply = <&lab_regulator>;
+ ibb-supply = <&ibb_regulator>;
+};
diff --git a/arch/arm64/boot/dts/qcom/msm8917.dtsi b/arch/arm64/boot/dts/qcom/msm8917.dtsi
index d5f5243..8494aef 100644
--- a/arch/arm64/boot/dts/qcom/msm8917.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8917.dtsi
@@ -86,19 +86,19 @@
modem_mem: modem_region@0 {
compatible = "removed-dma-pool";
no-map;
- reg = <0x0 0x86800000 0x0 0x5000000>;
+ reg = <0x0 0x86800000 0x0 0x5500000>;
};
adsp_fw_mem: adsp_fw_region@0 {
compatible = "removed-dma-pool";
no-map;
- reg = <0x0 0x8b800000 0x0 0x1100000>;
+ reg = <0x0 0x8bd00000 0x0 0x1100000>;
};
wcnss_fw_mem: wcnss_fw_region@0 {
compatible = "removed-dma-pool";
no-map;
- reg = <0x0 0x8c900000 0x0 0x700000>;
+ reg = <0x0 0x8ce00000 0x0 0x700000>;
};
venus_mem: venus_region@0 {
diff --git a/arch/arm64/boot/dts/qcom/sda845-v2-hdk.dtsi b/arch/arm64/boot/dts/qcom/sda845-v2-hdk.dtsi
index 378c4a1..d89a60e 100644
--- a/arch/arm64/boot/dts/qcom/sda845-v2-hdk.dtsi
+++ b/arch/arm64/boot/dts/qcom/sda845-v2-hdk.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018, 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
@@ -91,3 +91,8 @@
qcom,afe-power-off-delay-us = <6>;
};
};
+
+&qupv3_se5_i2c {
+ status = "disabled";
+};
+
diff --git a/arch/arm64/boot/dts/qcom/sdm439.dtsi b/arch/arm64/boot/dts/qcom/sdm439.dtsi
index 9067bc9..ef8ea1f3 100644
--- a/arch/arm64/boot/dts/qcom/sdm439.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm439.dtsi
@@ -238,6 +238,18 @@
};
};
+&modem_mem {
+ reg = <0x0 0x86800000 0x0 0x5500000>;
+};
+
+&adsp_fw_mem {
+ reg = <0x0 0x8bd00000 0x0 0x1100000>;
+};
+
+&wcnss_fw_mem {
+ reg = <0x0 0x8ce00000 0x0 0x700000>;
+};
+
&soc {
pil_gpu: qcom,kgsl-hyp {
compatible = "qcom,pil-tz-generic";
diff --git a/block/blk-core.c b/block/blk-core.c
index 404629f..ff2e4fd 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1529,6 +1529,7 @@
bio->bi_next = req->bio;
req->bio = bio;
+ WARN_ON(req->__dun || bio->bi_iter.bi_dun);
req->__sector = bio->bi_iter.bi_sector;
req->__data_len += bio->bi_iter.bi_size;
req->ioprio = ioprio_best(req->ioprio, bio_prio(bio));
@@ -1644,6 +1645,7 @@
req->errors = 0;
req->__sector = bio->bi_iter.bi_sector;
+ req->__dun = bio->bi_iter.bi_dun;
req->ioprio = bio_prio(bio);
blk_rq_bio_prep(req->q, req, bio);
}
@@ -2646,8 +2648,11 @@
req->__data_len -= total_bytes;
/* update sector only for requests with clear definition of sector */
- if (req->cmd_type == REQ_TYPE_FS)
+ if (req->cmd_type == REQ_TYPE_FS) {
req->__sector += total_bytes >> 9;
+ if (req->__dun)
+ req->__dun += total_bytes >> 12;
+ }
/* mixed attributes always follow the first bio */
if (req->cmd_flags & REQ_MIXED_MERGE) {
@@ -3048,6 +3053,7 @@
(src->cmd_flags & REQ_CLONE_MASK) | REQ_NOMERGE);
dst->cmd_type = src->cmd_type;
dst->__sector = blk_rq_pos(src);
+ dst->__dun = blk_rq_dun(src);
dst->__data_len = blk_rq_bytes(src);
dst->nr_phys_segments = src->nr_phys_segments;
dst->ioprio = src->ioprio;
diff --git a/block/blk-merge.c b/block/blk-merge.c
index f44daa1..c71d1cb 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -876,6 +876,8 @@
int blk_try_merge(struct request *rq, struct bio *bio)
{
+ if (blk_rq_dun(rq) || bio_dun(bio))
+ return ELEVATOR_NO_MERGE;
if (blk_rq_pos(rq) + blk_rq_sectors(rq) == bio->bi_iter.bi_sector)
return ELEVATOR_BACK_MERGE;
else if (blk_rq_pos(rq) - bio_sectors(bio) == bio->bi_iter.bi_sector)
diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c
index b7e61c8..f60978be 100644
--- a/drivers/char/adsprpc.c
+++ b/drivers/char/adsprpc.c
@@ -61,7 +61,9 @@
#define FASTRPC_ENOSUCH 39
#define VMID_SSC_Q6 5
#define VMID_ADSP_Q6 6
-#define DEBUGFS_SIZE 1024
+#define DEBUGFS_SIZE 3072
+#define UL_SIZE 25
+#define PID_SIZE 10
#define AUDIO_PDR_SERVICE_LOCATION_CLIENT_NAME "audio_pdr_adsprpc"
#define AUDIO_PDR_ADSP_SERVICE_NAME "avs/audio"
@@ -313,6 +315,7 @@
unsigned int latency;
bool glink;
bool legacy;
+ bool secure_flag;
spinlock_t ctxlock;
struct smq_invoke_ctx *ctxtable[FASTRPC_CTX_MAX];
};
@@ -394,6 +397,7 @@
int refcount;
/* Identifies the device (MINOR_NUM_DEV / MINOR_NUM_SECURE_DEV) */
int dev_minor;
+ char *debug_buf;
};
static struct fastrpc_apps gfa;
@@ -2781,6 +2785,7 @@
spin_lock(&fl->apps->hlock);
hlist_del_init(&fl->hn);
spin_unlock(&fl->apps->hlock);
+ kfree(fl->debug_buf);
if (!fl->sctx) {
kfree(fl);
@@ -2966,101 +2971,225 @@
static ssize_t fastrpc_debugfs_read(struct file *filp, char __user *buffer,
size_t count, loff_t *position)
{
+ struct fastrpc_apps *me = &gfa;
struct fastrpc_file *fl = filp->private_data;
struct hlist_node *n;
struct fastrpc_buf *buf = NULL;
struct fastrpc_mmap *map = NULL;
+ struct fastrpc_mmap *gmaps = NULL;
struct smq_invoke_ctx *ictx = NULL;
- struct fastrpc_channel_ctx *chan;
- struct fastrpc_session_ctx *sess;
+ struct fastrpc_channel_ctx *chan = NULL;
unsigned int len = 0;
- int i, j, ret = 0;
+ int i, j, sess_used = 0, ret = 0;
char *fileinfo = NULL;
+ char single_line[UL_SIZE] = "----------------";
+ char title[UL_SIZE] = "=========================";
fileinfo = kzalloc(DEBUGFS_SIZE, GFP_KERNEL);
if (!fileinfo)
goto bail;
if (fl == NULL) {
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n%s %s %s\n", title, " CHANNEL INFO ", title);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-8s|%-9s|%-9s|%-14s|%-9s|%-13s\n",
+ "susbsys", "refcount", "sesscount", "issubsystemup",
+ "ssrcount", "session_used");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "-%s%s%s%s-\n", single_line, single_line,
+ single_line, single_line);
for (i = 0; i < NUM_CHANNELS; i++) {
+ sess_used = 0;
chan = &gcinfo[i];
len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len, "%s\n\n",
- chan->name);
+ DEBUGFS_SIZE - len, "%-8s", chan->subsys);
len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len, "%s %d\n",
- "secure:", chan->secure);
+ DEBUGFS_SIZE - len, "|%-9d",
+ chan->kref.refcount.counter);
len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len, "%s %d\n",
- "sesscount:", chan->sesscount);
+ DEBUGFS_SIZE - len, "|%-9d",
+ chan->sesscount);
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "|%-14d",
+ chan->issubsystemup);
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "|%-9d",
+ chan->ssrcount);
for (j = 0; j < chan->sesscount; j++) {
- sess = &chan->session[j];
- len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len,
- "%s%d\n\n", "SESSION", j);
- len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len,
- "%s %d\n", "sid:",
- sess->smmu.cb);
- len += scnprintf(fileinfo + len,
- DEBUGFS_SIZE - len,
- "%s %d\n", "SECURE:",
- sess->smmu.secure);
- }
+ sess_used += chan->session[j].used;
+ }
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "|%-13d\n", sess_used);
+
+ }
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n%s%s%s\n", "=============",
+ " CMA HEAP ", "==============");
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "%-20s|%-20s\n", "addr", "size");
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "--%s%s---\n",
+ single_line, single_line);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "0x%-18llX", me->range.addr);
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len, "|0x%-18llX\n", me->range.size);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n==========%s %s %s===========\n",
+ title, " GMAPS ", title);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-20s|%-20s|%-20s\n",
+ "fd", "phys", "size", "va");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n", single_line, single_line,
+ single_line, single_line, single_line);
+ hlist_for_each_entry_safe(gmaps, n, &me->maps, hn) {
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20d|0x%-18llX|0x%-18X|0x%-20lX\n\n",
+ gmaps->fd, gmaps->phys,
+ (uint32_t)gmaps->size,
+ gmaps->va);
+ }
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-20s|%-20s|%-20s\n",
+ "len", "refs", "raddr", "flags");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n", single_line, single_line,
+ single_line, single_line, single_line);
+ hlist_for_each_entry_safe(gmaps, n, &me->maps, hn) {
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "0x%-18X|%-20d|%-20lu|%-20u\n",
+ (uint32_t)gmaps->len, gmaps->refs,
+ gmaps->raddr, gmaps->flags);
}
} else {
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %d\n\n",
- "PROCESS_ID:", fl->tgid);
+ "\n%s %13s %d\n", "cid", ":", fl->cid);
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %d\n\n",
- "CHANNEL_ID:", fl->cid);
+ "%s %12s %d\n", "tgid", ":", fl->tgid);
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %d\n\n",
- "SSRCOUNT:", fl->ssrcount);
+ "%s %7s %d\n", "sessionid", ":", fl->sessionid);
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %d\n\n",
- "DEV_MINOR:", fl->dev_minor);
+ "%s %8s %d\n", "ssrcount", ":", fl->ssrcount);
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s\n",
- "LIST OF BUFS:");
- spin_lock(&fl->hlock);
- hlist_for_each_entry_safe(buf, n, &fl->bufs, hn) {
- len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %pK %s %pK %s %llx\n", "buf:",
- buf, "buf->virt:", buf->virt,
- "buf->phys:", buf->phys);
- }
+ "%s %8s %d\n", "refcount", ":", fl->refcount);
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "\n%s\n",
- "LIST OF MAPS:");
+ "%s %14s %d\n", "pd", ":", fl->pd);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %9s %s\n", "spdname", ":", fl->spdname);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %6s %d\n", "file_close", ":", fl->file_close);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %8s %d\n", "sharedcb", ":", fl->sharedcb);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %9s %d\n", "profile", ":", fl->profile);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %3s %d\n", "smmu.coherent", ":",
+ fl->sctx->smmu.coherent);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %4s %d\n", "smmu.enabled", ":",
+ fl->sctx->smmu.enabled);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %9s %d\n", "smmu.cb", ":", fl->sctx->smmu.cb);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %5s %d\n", "smmu.secure", ":",
+ fl->sctx->smmu.secure);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %5s %d\n", "smmu.faults", ":",
+ fl->sctx->smmu.faults);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s %s %d\n", "link.link_state",
+ ":", *&me->channel[fl->cid].link.link_state);
+
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n=======%s %s %s======\n", title,
+ " LIST OF MAPS ", title);
+
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-20s|%-20s\n", "va", "phys", "size");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n",
+ single_line, single_line, single_line,
+ single_line, single_line);
hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
- len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %pK %s %lx %s %llx\n",
- "map:", map,
- "map->va:", map->va,
- "map->phys:", map->phys);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "0x%-20lX|0x%-20llX|0x%-20zu\n\n",
+ map->va, map->phys,
+ map->size);
}
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "\n%s\n",
- "LIST OF PENDING SMQCONTEXTS:");
+ "%-20s|%-20s|%-20s|%-20s\n",
+ "len", "refs",
+ "raddr", "uncached");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n",
+ single_line, single_line, single_line,
+ single_line, single_line);
+ hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20zu|%-20d|0x%-20lX|%-20d\n\n",
+ map->len, map->refs, map->raddr,
+ map->uncached);
+ }
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-20s\n", "secure", "attr");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n",
+ single_line, single_line, single_line,
+ single_line, single_line);
+ hlist_for_each_entry_safe(map, n, &fl->maps, hn) {
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20d|0x%-20lX\n\n",
+ map->secure, map->attr);
+ }
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n======%s %s %s======\n", title,
+ " LIST OF BUFS ", title);
+ spin_lock(&fl->hlock);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-19s|%-19s|%-19s\n",
+ "virt", "phys", "size");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n", single_line, single_line,
+ single_line, single_line, single_line);
+ hlist_for_each_entry_safe(buf, n, &fl->bufs, hn) {
+ len += scnprintf(fileinfo + len,
+ DEBUGFS_SIZE - len,
+ "0x%-17p|0x%-17llX|%-19zu\n",
+ buf->virt, (uint64_t)buf->phys, buf->size);
+ }
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "\n%s %s %s\n", title,
+ " LIST OF PENDING SMQCONTEXTS ", title);
+
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-10s|%-10s|%-10s|%-20s\n",
+ "sc", "pid", "tgid", "used", "ctxid");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n", single_line, single_line,
+ single_line, single_line, single_line);
hlist_for_each_entry_safe(ictx, n, &fl->clst.pending, hn) {
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %pK %s %u %s %u %s %u\n",
- "smqcontext:", ictx,
- "sc:", ictx->sc,
- "tid:", ictx->pid,
- "handle", ictx->rpra->h);
+ "0x%-18X|%-10d|%-10d|%-10zu|0x%-20llX\n\n",
+ ictx->sc, ictx->pid, ictx->tgid,
+ ictx->used, ictx->ctxid);
}
+
len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "\n%s\n",
- "LIST OF INTERRUPTED SMQCONTEXTS:");
+ "\n%s %s %s\n", title,
+ " LIST OF INTERRUPTED SMQCONTEXTS ", title);
+
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20s|%-10s|%-10s|%-10s|%-20s\n",
+ "sc", "pid", "tgid", "used", "ctxid");
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%s%s%s%s%s\n", single_line, single_line,
+ single_line, single_line, single_line);
hlist_for_each_entry_safe(ictx, n, &fl->clst.interrupted, hn) {
- len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
- "%s %pK %s %u %s %u %s %u\n",
- "smqcontext:", ictx,
- "sc:", ictx->sc,
- "tid:", ictx->pid,
- "handle", ictx->rpra->h);
+ len += scnprintf(fileinfo + len, DEBUGFS_SIZE - len,
+ "%-20u|%-20d|%-20d|%-20zu|0x%-20llX\n\n",
+ ictx->sc, ictx->pid, ictx->tgid,
+ ictx->used, ictx->ctxid);
}
spin_unlock(&fl->hlock);
}
@@ -3155,6 +3284,8 @@
struct dentry *debugfs_file;
struct fastrpc_file *fl = NULL;
struct fastrpc_apps *me = &gfa;
+ char strpid[PID_SIZE];
+ int buf_size = 0;
/*
* Indicates the device node opened
@@ -3172,8 +3303,14 @@
VERIFY(err, NULL != (fl = kzalloc(sizeof(*fl), GFP_KERNEL)));
if (err)
return err;
- debugfs_file = debugfs_create_file(current->comm, 0644, debugfs_root,
- fl, &debugfs_fops);
+ snprintf(strpid, PID_SIZE, "%d", current->pid);
+ buf_size = strlen(current->comm) + strlen(strpid) + 1;
+ fl->debug_buf = kzalloc(buf_size, GFP_KERNEL);
+ snprintf(fl->debug_buf, UL_SIZE, "%.10s%s%d",
+ current->comm, "_", current->pid);
+ debugfs_file = debugfs_create_file(fl->debug_buf, 0644,
+ debugfs_root, fl, &debugfs_fops);
+
context_list_ctor(&fl->clst);
spin_lock_init(&fl->hlock);
INIT_HLIST_HEAD(&fl->maps);
@@ -3215,7 +3352,8 @@
if (err)
goto bail;
/* Check to see if the device node is non-secure */
- if (fl->dev_minor == MINOR_NUM_DEV) {
+ if (fl->dev_minor == MINOR_NUM_DEV &&
+ fl->apps->secure_flag == true) {
/*
* For non secure device node check and make sure that
* the channel allows non-secure access
@@ -3863,10 +4001,13 @@
VERIFY(err, !of_property_read_u32(dev->of_node,
"qcom,secure-domains",
&secure_domains));
- if (!err)
+ if (!err) {
+ me->secure_flag = true;
configure_secure_channels(secure_domains);
- else
+ } else {
+ me->secure_flag = false;
pr_info("adsprpc: unable to read the domain configuration from dts\n");
+ }
}
}
if (of_device_is_compatible(dev->of_node,
@@ -4016,11 +4157,12 @@
struct device *secure_dev = NULL;
int err = 0, i;
+ debugfs_root = debugfs_create_dir("adsprpc", NULL);
memset(me, 0, sizeof(*me));
-
fastrpc_init(me);
me->dev = NULL;
me->glink = true;
+ me->secure_flag = false;
VERIFY(err, 0 == platform_driver_register(&fastrpc_driver));
if (err)
goto register_bail;
@@ -4073,12 +4215,11 @@
gcinfo[i].subsys,
&me->channel[i].nb);
}
-
me->client = msm_ion_client_create(DEVICE_NAME);
VERIFY(err, !IS_ERR_OR_NULL(me->client));
if (err)
goto device_create_bail;
- debugfs_root = debugfs_create_dir("adsprpc", NULL);
+
return 0;
device_create_bail:
for (i = 0; i < NUM_CHANNELS; i++) {
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index ddd4607..00f9707 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -80,6 +80,9 @@
{
struct msm_gem_object *msm_obj = to_msm_bo(obj);
+ if (obj->import_attach)
+ return msm_obj->pages;
+
if (!msm_obj->pages) {
struct drm_device *dev = obj->dev;
struct page **p;
@@ -572,8 +575,13 @@
struct page **pages = get_pages(obj);
if (IS_ERR(pages))
return ERR_CAST(pages);
- msm_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT,
+ if (obj->import_attach)
+ msm_obj->vaddr = dma_buf_vmap(
+ obj->import_attach->dmabuf);
+ else
+ msm_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT,
VM_MAP, pgprot_writecombine(PAGE_KERNEL));
+
if (msm_obj->vaddr == NULL)
return ERR_PTR(-ENOMEM);
}
@@ -659,7 +667,11 @@
if (!msm_obj->vaddr || WARN_ON(!is_vunmapable(msm_obj)))
return;
- vunmap(msm_obj->vaddr);
+ if (obj->import_attach)
+ dma_buf_vunmap(obj->import_attach->dmabuf, msm_obj->vaddr);
+ else
+ vunmap(msm_obj->vaddr);
+
msm_obj->vaddr = NULL;
}
@@ -1012,7 +1024,7 @@
struct msm_gem_object *msm_obj;
struct drm_gem_object *obj = NULL;
uint32_t size;
- int ret, npages;
+ int ret;
/* if we don't have IOMMU, don't bother pretending we can import: */
if (!iommu_present(&platform_bus_type)) {
@@ -1033,19 +1045,9 @@
drm_gem_private_object_init(dev, obj, size);
- npages = size / PAGE_SIZE;
-
msm_obj = to_msm_bo(obj);
msm_obj->sgt = sgt;
- msm_obj->pages = drm_malloc_ab(npages, sizeof(struct page *));
- if (!msm_obj->pages) {
- ret = -ENOMEM;
- goto fail;
- }
-
- ret = drm_prime_sg_to_page_addr_arrays(sgt, msm_obj->pages, NULL, npages);
- if (ret)
- goto fail;
+ msm_obj->pages = NULL;
return obj;
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder.c b/drivers/gpu/drm/msm/sde/sde_encoder.c
index 763993c8..e7b7a6e 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder.c
@@ -259,6 +259,7 @@
struct kthread_work input_event_work;
struct kthread_work esd_trigger_work;
struct input_handler *input_handler;
+ bool input_handler_registered;
struct msm_display_topology topology;
bool vblank_enabled;
@@ -743,6 +744,7 @@
if (sde_enc->input_handler) {
kfree(sde_enc->input_handler);
sde_enc->input_handler = NULL;
+ sde_enc->input_handler_registered = false;
}
kfree(sde_enc);
@@ -2634,6 +2636,7 @@
input_handler->private = sde_enc;
sde_enc->input_handler = input_handler;
+ sde_enc->input_handler_registered = false;
return rc;
}
@@ -2755,12 +2758,14 @@
return;
}
- if (sde_enc->input_handler) {
+ if (sde_enc->input_handler && !sde_enc->input_handler_registered) {
ret = _sde_encoder_input_handler_register(
sde_enc->input_handler);
if (ret)
SDE_ERROR(
"input handler registration failed, rc = %d\n", ret);
+ else
+ sde_enc->input_handler_registered = true;
}
ret = sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_KICKOFF);
@@ -2838,8 +2843,11 @@
SDE_EVT32(DRMID(drm_enc));
- if (sde_enc->input_handler)
+ if (sde_enc->input_handler && sde_enc->input_handler_registered) {
input_unregister_handler(sde_enc->input_handler);
+ sde_enc->input_handler_registered = false;
+ }
+
/* wait for idle */
sde_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE);
diff --git a/drivers/power/supply/qcom/smb-lib.c b/drivers/power/supply/qcom/smb-lib.c
index 5b94ff2..6b6bc9c 100644
--- a/drivers/power/supply/qcom/smb-lib.c
+++ b/drivers/power/supply/qcom/smb-lib.c
@@ -3123,7 +3123,9 @@
return 0;
chg->cc2_detach_wa_active = false;
+ chg->in_chg_lock = true;
cancel_work_sync(&chg->rdstd_cc2_detach_work);
+ chg->in_chg_lock = false;
smblib_reg_block_restore(chg, cc2_detach_settings);
return 0;
}
@@ -4757,7 +4759,6 @@
{
int rc;
u8 stat4, stat5;
- bool lock = false;
struct smb_charger *chg = container_of(work, struct smb_charger,
rdstd_cc2_detach_work);
@@ -4826,22 +4827,15 @@
* during pd_hard_reset from the function smblib_cc2_sink_removal_exit
* which is called in the same lock context that we try to acquire in
* this work routine.
- * Check if this work is running during pd_hard_reset and use trylock
- * instead of mutex_lock to prevent any deadlock if mutext is already
- * held.
+ * Check if this work is running during pd_hard_reset and skip holding
+ * mutex if lock is already held.
*/
- if (chg->pd_hard_reset) {
- if (mutex_trylock(&chg->lock))
- lock = true;
- } else {
+ if (!chg->in_chg_lock)
mutex_lock(&chg->lock);
- lock = true;
- }
-
smblib_usb_typec_change(chg);
-
- if (lock)
+ if (!chg->in_chg_lock)
mutex_unlock(&chg->lock);
+
return;
rerun:
diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h
index 729118d..2457ed2 100644
--- a/drivers/power/supply/qcom/smb-lib.h
+++ b/drivers/power/supply/qcom/smb-lib.h
@@ -355,6 +355,7 @@
bool otg_present;
bool is_audio_adapter;
bool disable_stat_sw_override;
+ bool in_chg_lock;
/* workaround flag */
u32 wa_flags;
diff --git a/drivers/soc/qcom/dcc_v2.c b/drivers/soc/qcom/dcc_v2.c
index ac50996..279461d 100644
--- a/drivers/soc/qcom/dcc_v2.c
+++ b/drivers/soc/qcom/dcc_v2.c
@@ -35,8 +35,6 @@
#define dcc_readl(drvdata, off) \
__raw_readl(drvdata->base + off)
-#define dcc_sram_writel(drvdata, val, off) \
- __raw_writel((val), drvdata->ram_base + off)
#define dcc_sram_readl(drvdata, off) \
__raw_readl(drvdata->ram_base + off)
@@ -153,6 +151,17 @@
uint8_t cti_trig;
};
+static int dcc_sram_writel(struct dcc_drvdata *drvdata,
+ uint32_t val, uint32_t off)
+{
+ if (unlikely(off > (drvdata->ram_size - 4)))
+ return -EINVAL;
+
+ __raw_writel((val), drvdata->ram_base + off);
+
+ return 0;
+}
+
static bool dcc_ready(struct dcc_drvdata *drvdata)
{
uint32_t val;
@@ -252,7 +261,10 @@
* processing the list
*/
link |= ((0x1 << 8) & BM(8, 14));
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
/* Reset link and prev_off */
addr = 0x00;
@@ -262,13 +274,21 @@
}
addr = DCC_RD_MOD_WR_DESCRIPTOR;
- dcc_sram_writel(drvdata, addr, sram_offset);
+ ret = dcc_sram_writel(drvdata, addr, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
- dcc_sram_writel(drvdata, entry->mask, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ entry->mask, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
- dcc_sram_writel(drvdata, entry->write_val, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ entry->write_val, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
addr = 0;
break;
@@ -278,7 +298,10 @@
{
/* Check if we need to write link of prev entry */
if (link) {
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
}
@@ -288,7 +311,10 @@
loop |= DCC_LOOP_DESCRIPTOR;
total_len += (total_len - loop_len) * loop_cnt;
- dcc_sram_writel(drvdata, loop, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ loop, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
loop_start = false;
@@ -317,7 +343,10 @@
* processing the list
*/
link |= ((0x1 << 8) & BM(8, 14));
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
/* Reset link and prev_off */
addr = 0x00;
@@ -340,13 +369,20 @@
addr |= DCC_ADDR_DESCRIPTOR | DCC_WRITE_IND
| DCC_AHB_IND;
- dcc_sram_writel(drvdata, addr, sram_offset);
+ ret = dcc_sram_writel(drvdata, addr, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata, link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
- dcc_sram_writel(drvdata, entry->write_val, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ entry->write_val, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
addr = 0x00;
link = 0;
@@ -370,8 +406,10 @@
if (!prev_addr || prev_addr != addr || prev_off > off) {
/* Check if we need to write prev link entry */
if (link) {
- dcc_sram_writel(drvdata,
+ ret = dcc_sram_writel(drvdata,
link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
}
dev_dbg(drvdata->dev,
@@ -379,7 +417,10 @@
sram_offset);
/* Write address */
- dcc_sram_writel(drvdata, addr, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ addr, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
/* Reset link and prev_off */
@@ -422,7 +463,10 @@
link |= DCC_LINK_DESCRIPTOR;
if (pos) {
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata,
+ link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
link = 0;
}
@@ -434,7 +478,9 @@
}
if (link) {
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata, link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
}
@@ -450,13 +496,17 @@
addr = (0xC105E) & BM(0, 27);
addr |= DCC_ADDR_DESCRIPTOR;
- dcc_sram_writel(drvdata, addr, sram_offset);
+ ret = dcc_sram_writel(drvdata, addr, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
}
/* Setting zero to indicate end of the list */
link = DCC_LINK_DESCRIPTOR;
- dcc_sram_writel(drvdata, link, sram_offset);
+ ret = dcc_sram_writel(drvdata, link, sram_offset);
+ if (ret)
+ goto overstep;
sram_offset += 4;
/* Update ram_cfg and check if the data will overstep */
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 32729c6..b5d9131 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -541,8 +541,14 @@
} else if (ret < 0 && ret != -ENOTSUPP) {
pr_err("Failed to wake function %s from suspend state. ret=%d.\n",
func->name ? func->name : "", ret);
+ } else {
+ /*
+ * Return -EAGAIN to queue the request from
+ * function driver wakeup function.
+ */
+ ret = -EAGAIN;
+ goto done;
}
- goto done;
}
if (!func->func_is_suspended)
diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c
index 0c4baf2..5222f79 100644
--- a/drivers/usb/gadget/function/f_gsi.c
+++ b/drivers/usb/gadget/function/f_gsi.c
@@ -96,6 +96,21 @@
return remote_wakeup_allowed;
}
+static void usb_gsi_check_pending_wakeup(struct usb_function *f)
+{
+ struct f_gsi *gsi = func_to_gsi(f);
+
+ /*
+ * If host suspended bus without receiving notification request then
+ * initiate remote-wakeup. As driver won't be able to do it later since
+ * notification request is already queued.
+ */
+ if (gsi->c_port.notify_req_queued && usb_gsi_remote_wakeup_allowed(f)) {
+ mod_timer(&gsi->gsi_rw_timer, jiffies + msecs_to_jiffies(2000));
+ log_event_dbg("%s: pending response, arm rw_timer\n", __func__);
+ }
+}
+
static void post_event(struct gsi_data_port *port, u8 event)
{
unsigned long flags;
@@ -1834,6 +1849,9 @@
gsi->c_port.notify_req_queued = false;
spin_unlock_irqrestore(&gsi->c_port.lock, flags);
+ log_event_dbg("%s: status:%d req_queued:%d",
+ __func__, status, gsi->c_port.notify_req_queued);
+
switch (status) {
case -ECONNRESET:
case -ESHUTDOWN:
@@ -2494,6 +2512,7 @@
*/
if (gsi->prot_id == USB_PROT_GPS_CTRL) {
log_event_dbg("%s: suspend done\n", __func__);
+ usb_gsi_check_pending_wakeup(f);
return;
}
@@ -2503,16 +2522,7 @@
post_event(&gsi->d_port, EVT_SUSPEND);
queue_work(gsi->d_port.ipa_usb_wq, &gsi->d_port.usb_ipa_w);
log_event_dbg("gsi suspended");
-
- /*
- * If host suspended bus without receiving notification request then
- * initiate remote-wakeup. As driver won't be able to do it later since
- * notification request is already queued.
- */
- if (gsi->c_port.notify_req_queued && usb_gsi_remote_wakeup_allowed(f)) {
- mod_timer(&gsi->gsi_rw_timer, jiffies + msecs_to_jiffies(2000));
- log_event_dbg("%s: pending response, arm rw_timer\n", __func__);
- }
+ usb_gsi_check_pending_wakeup(f);
}
static void gsi_resume(struct usb_function *f)
diff --git a/drivers/video/fbdev/msm/mdss_dsi_host.c b/drivers/video/fbdev/msm/mdss_dsi_host.c
index a470656..25a2600 100644
--- a/drivers/video/fbdev/msm/mdss_dsi_host.c
+++ b/drivers/video/fbdev/msm/mdss_dsi_host.c
@@ -1462,6 +1462,11 @@
(mipi->vc << 8) | DTYPE_DCS_LWRITE;
stream_total = pinfo->roi.h << 16 | pinfo->roi.w;
} else {
+ width = width + pdata->panel_info.lcdc.border_left +
+ pdata->panel_info.lcdc.border_right;
+ height = height + pdata->panel_info.lcdc.border_top +
+ pdata->panel_info.lcdc.border_bottom;
+ ystride = width * bpp + 1;
stream_ctrl = (ystride << 16) | (mipi->vc << 8) |
DTYPE_DCS_LWRITE;
stream_total = height << 16 | width;
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 2a20e3d..c850618 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1344,6 +1344,8 @@
seq_printf(seq, ",fsync_mode=%s", "posix");
else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT)
seq_printf(seq, ",fsync_mode=%s", "strict");
+ else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_NOBARRIER)
+ seq_printf(seq, ",fsync_mode=%s", "nobarrier");
return 0;
}
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 211e80b..9f91d48 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -103,6 +103,7 @@
/* the following two fields are internal, NEVER access directly */
unsigned int __data_len; /* total data len */
sector_t __sector; /* sector cursor */
+ u64 __dun; /* dun for UFS */
struct bio *bio;
struct bio *biotail;
@@ -866,6 +867,11 @@
return rq->__sector;
}
+static inline sector_t blk_rq_dun(const struct request *rq)
+{
+ return rq->__dun;
+}
+
static inline unsigned int blk_rq_bytes(const struct request *rq)
{
return rq->__data_len;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 91a909f..335b40e 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -10540,8 +10540,12 @@
rcu_read_lock();
sd = rcu_dereference_check_sched_domain(rq->sd);
if (sd) {
- cpumask_and(&cpumask, nohz.idle_cpus_mask,
- sched_domain_span(sd));
+ if (energy_aware() && rq->misfit_task)
+ cpumask_andnot(&cpumask, nohz.idle_cpus_mask,
+ sched_domain_span(sd));
+ else
+ cpumask_and(&cpumask, nohz.idle_cpus_mask,
+ sched_domain_span(sd));
cpumask_andnot(&cpumask, &cpumask,
cpu_isolated_mask);
ilb = cpumask_first(&cpumask);
@@ -10552,7 +10556,7 @@
if (!energy_aware() ||
(capacity_orig_of(cpu) ==
cpu_rq(cpu)->rd->max_cpu_capacity.val ||
- cpu_overutilized(cpu))) {
+ (cpu_overutilized(cpu) && rq->nr_running > 1))) {
cpumask_andnot(&cpumask, nohz.idle_cpus_mask,
cpu_isolated_mask);
ilb = cpumask_first(&cpumask);
diff --git a/security/pfe/pfk.c b/security/pfe/pfk.c
index 740da32..8ad25cc 100644
--- a/security/pfe/pfk.c
+++ b/security/pfe/pfk.c
@@ -220,11 +220,7 @@
if (!page_mapping(bio->bi_io_vec->bv_page))
return NULL;
- if (!bio->bi_io_vec->bv_page->mapping->host)
-
- return NULL;
-
- return bio->bi_io_vec->bv_page->mapping->host;
+ return page_mapping(bio->bi_io_vec->bv_page)->host;
}
/**