update
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
From 7020bcb82838006e23d058ff07b063b393ed3f10 Mon Sep 17 00:00:00 2001
|
||||
From: Zhang Rui <rui.zhang@intel.com>
|
||||
Date: Tue, 29 Nov 2016 23:19:46 +0100
|
||||
Subject: [PATCH] ACPI: do not warn if _BQC does not exist
|
||||
|
||||
Starting from ACPI spec 3.0, it's only clarified that _BCM control
|
||||
method is required if _BCL is implemented. There is no word
|
||||
saying _BQC is required.
|
||||
|
||||
And in ACPI spec 6.1 B.5.4, for _BQC, it is explicitly stated that
|
||||
"This optional method returns the current brightness level of a
|
||||
built-in display output device. If present, it must be set by
|
||||
the platform for initial brightness."
|
||||
|
||||
Thus remove the obsolete warning message.
|
||||
|
||||
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/scan.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
|
||||
index 3d1856f..07aa2e6 100644
|
||||
--- a/drivers/acpi/scan.c
|
||||
+++ b/drivers/acpi/scan.c
|
||||
@@ -1119,9 +1119,6 @@ acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found generic backlight "
|
||||
"support\n"));
|
||||
*cap |= ACPI_VIDEO_BACKLIGHT;
|
||||
- if (!acpi_has_method(handle, "_BQC"))
|
||||
- printk(KERN_WARNING FW_BUG PREFIX "No _BQC method, "
|
||||
- "cannot determine initial brightness\n");
|
||||
/* We have backlight support, no need to scan further */
|
||||
return AE_CTRL_TERMINATE;
|
||||
}
|
||||
--
|
||||
2.10.2
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+1101
File diff suppressed because it is too large
Load Diff
+103
@@ -0,0 +1,103 @@
|
||||
From 465ed48c05de63f5bdd34d83915f1b8998a62134 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@unimore.it>
|
||||
Date: Tue, 7 Apr 2015 13:39:12 +0200
|
||||
Subject: [PATCH 1/4] block: cgroups, kconfig, build bits for BFQ-v7r11-4.5.0
|
||||
|
||||
Update Kconfig.iosched and do the related Makefile changes to include
|
||||
kernel configuration options for BFQ. Also increase the number of
|
||||
policies supported by the blkio controller so that BFQ can add its
|
||||
own.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@unimore.it>
|
||||
Signed-off-by: Arianna Avanzini <avanzini@google.com>
|
||||
---
|
||||
block/Kconfig.iosched | 32 ++++++++++++++++++++++++++++++++
|
||||
block/Makefile | 1 +
|
||||
include/linux/blkdev.h | 2 +-
|
||||
3 files changed, 34 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched
|
||||
index 421bef9..0ee5f0f 100644
|
||||
--- a/block/Kconfig.iosched
|
||||
+++ b/block/Kconfig.iosched
|
||||
@@ -39,6 +39,27 @@ config CFQ_GROUP_IOSCHED
|
||||
---help---
|
||||
Enable group IO scheduling in CFQ.
|
||||
|
||||
+config IOSCHED_BFQ
|
||||
+ tristate "BFQ I/O scheduler"
|
||||
+ default n
|
||||
+ ---help---
|
||||
+ The BFQ I/O scheduler tries to distribute bandwidth among
|
||||
+ all processes according to their weights.
|
||||
+ It aims at distributing the bandwidth as desired, independently of
|
||||
+ the disk parameters and with any workload. It also tries to
|
||||
+ guarantee low latency to interactive and soft real-time
|
||||
+ applications. If compiled built-in (saying Y here), BFQ can
|
||||
+ be configured to support hierarchical scheduling.
|
||||
+
|
||||
+config CGROUP_BFQIO
|
||||
+ bool "BFQ hierarchical scheduling support"
|
||||
+ depends on CGROUPS && IOSCHED_BFQ=y
|
||||
+ default n
|
||||
+ ---help---
|
||||
+ Enable hierarchical scheduling in BFQ, using the cgroups
|
||||
+ filesystem interface. The name of the subsystem will be
|
||||
+ bfqio.
|
||||
+
|
||||
choice
|
||||
prompt "Default I/O scheduler"
|
||||
default DEFAULT_CFQ
|
||||
@@ -52,6 +73,16 @@ choice
|
||||
config DEFAULT_CFQ
|
||||
bool "CFQ" if IOSCHED_CFQ=y
|
||||
|
||||
+ config DEFAULT_BFQ
|
||||
+ bool "BFQ" if IOSCHED_BFQ=y
|
||||
+ help
|
||||
+ Selects BFQ as the default I/O scheduler which will be
|
||||
+ used by default for all block devices.
|
||||
+ The BFQ I/O scheduler aims at distributing the bandwidth
|
||||
+ as desired, independently of the disk parameters and with
|
||||
+ any workload. It also tries to guarantee low latency to
|
||||
+ interactive and soft real-time applications.
|
||||
+
|
||||
config DEFAULT_NOOP
|
||||
bool "No-op"
|
||||
|
||||
@@ -61,6 +92,7 @@ config DEFAULT_IOSCHED
|
||||
string
|
||||
default "deadline" if DEFAULT_DEADLINE
|
||||
default "cfq" if DEFAULT_CFQ
|
||||
+ default "bfq" if DEFAULT_BFQ
|
||||
default "noop" if DEFAULT_NOOP
|
||||
|
||||
endmenu
|
||||
diff --git a/block/Makefile b/block/Makefile
|
||||
index 36acdd7..736e91a 100644
|
||||
--- a/block/Makefile
|
||||
+++ b/block/Makefile
|
||||
@@ -18,6 +18,7 @@ obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o
|
||||
obj-$(CONFIG_IOSCHED_NOOP) += noop-iosched.o
|
||||
obj-$(CONFIG_IOSCHED_DEADLINE) += deadline-iosched.o
|
||||
obj-$(CONFIG_IOSCHED_CFQ) += cfq-iosched.o
|
||||
+obj-$(CONFIG_IOSCHED_BFQ) += bfq-iosched.o
|
||||
|
||||
obj-$(CONFIG_BLOCK_COMPAT) += compat_ioctl.o
|
||||
obj-$(CONFIG_BLK_CMDLINE_PARSER) += cmdline-parser.o
|
||||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
|
||||
index c47c358..1047d99 100644
|
||||
--- a/include/linux/blkdev.h
|
||||
+++ b/include/linux/blkdev.h
|
||||
@@ -45,7 +45,7 @@ struct pr_ops;
|
||||
* Maximum number of blkcg policies allowed to be registered concurrently.
|
||||
* Defined here to simplify include dependency.
|
||||
*/
|
||||
-#define BLKCG_MAX_POLS 2
|
||||
+#define BLKCG_MAX_POLS 3
|
||||
|
||||
typedef void (rq_end_io_fn)(struct request *, int);
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
||||
+7109
File diff suppressed because it is too large
Load Diff
+115
@@ -0,0 +1,115 @@
|
||||
From bc33c5df710c0aae6db396146194108634ef6f60 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Mon, 12 Sep 2016 16:04:19 +0300
|
||||
Subject: [PATCH] tmp/tpm_crb: fix Intel PTT hw bug during idle state
|
||||
|
||||
There is a HW bug in Skylake, and Broxton PCH Intel PTT device, where
|
||||
most of the registers in the control area except START, REQUEST, CANCEL,
|
||||
and LOC_CTRL lost retention when the device is in the idle state. Hence
|
||||
we need to bring the device to ready state before accessing the other
|
||||
registers. The fix brings device to ready state before trying to read
|
||||
command and response buffer addresses in order to remap the for access.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinn@linux.intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinn@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 47 ++++++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 39 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index 8dd0f20..ff0d505 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -315,6 +315,7 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
struct list_head resources;
|
||||
struct resource io_res;
|
||||
struct device *dev = &device->dev;
|
||||
+ u32 pa_high, pa_low;
|
||||
u64 cmd_pa;
|
||||
u32 cmd_size;
|
||||
u64 rsp_pa;
|
||||
@@ -342,12 +343,27 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
if (IS_ERR(priv->cca))
|
||||
return PTR_ERR(priv->cca);
|
||||
|
||||
- cmd_pa = ((u64) ioread32(&priv->cca->cmd_pa_high) << 32) |
|
||||
- (u64) ioread32(&priv->cca->cmd_pa_low);
|
||||
+ /*
|
||||
+ * PTT HW bug w/a: wake up the device to access
|
||||
+ * possibly not retained registers.
|
||||
+ */
|
||||
+ ret = crb_cmd_ready(dev, priv);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pa_high = ioread32(&priv->cca->cmd_pa_high);
|
||||
+ pa_low = ioread32(&priv->cca->cmd_pa_low);
|
||||
+ cmd_pa = ((u64)pa_high << 32) | pa_low;
|
||||
cmd_size = ioread32(&priv->cca->cmd_size);
|
||||
+
|
||||
+ dev_dbg(dev, "cmd_hi = %X cmd_low = %X cmd_size %X\n",
|
||||
+ pa_high, pa_low, cmd_size);
|
||||
+
|
||||
priv->cmd = crb_map_res(dev, priv, &io_res, cmd_pa, cmd_size);
|
||||
- if (IS_ERR(priv->cmd))
|
||||
- return PTR_ERR(priv->cmd);
|
||||
+ if (IS_ERR(priv->cmd)) {
|
||||
+ ret = PTR_ERR(priv->cmd);
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
memcpy_fromio(&rsp_pa, &priv->cca->rsp_pa, 8);
|
||||
rsp_pa = le64_to_cpu(rsp_pa);
|
||||
@@ -355,7 +371,8 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
|
||||
if (cmd_pa != rsp_pa) {
|
||||
priv->rsp = crb_map_res(dev, priv, &io_res, rsp_pa, rsp_size);
|
||||
- return PTR_ERR_OR_ZERO(priv->rsp);
|
||||
+ ret = PTR_ERR_OR_ZERO(priv->rsp);
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* According to the PTP specification, overlapping command and response
|
||||
@@ -363,12 +380,18 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
*/
|
||||
if (cmd_size != rsp_size) {
|
||||
dev_err(dev, FW_BUG "overlapping command and response buffer sizes are not identical");
|
||||
- return -EINVAL;
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
+
|
||||
priv->cmd_size = cmd_size;
|
||||
|
||||
priv->rsp = priv->cmd;
|
||||
- return 0;
|
||||
+
|
||||
+out:
|
||||
+ crb_go_idle(dev, priv);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int crb_acpi_add(struct acpi_device *device)
|
||||
@@ -412,7 +435,15 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
- return crb_init(device, priv);
|
||||
+ rc = crb_cmd_ready(dev, priv);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ rc = crb_init(device, priv);
|
||||
+ if (rc)
|
||||
+ crb_go_idle(dev, priv);
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int crb_acpi_remove(struct acpi_device *device)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
From e74f2f76c13770bb8e004475a933923e9c92723d Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Sat, 8 Oct 2016 14:59:39 +0300
|
||||
Subject: [PATCH] tmp/tpm_crb: implement runtime pm for tpm_crb
|
||||
|
||||
Utilize runtime_pm for driving tpm crb idle states.
|
||||
The framework calls cmd_ready from the pm_runtime_resume handler
|
||||
and go idle from the pm_runtime_suspend handler.
|
||||
The TPM framework should wake the device before transmit and receive.
|
||||
In case the runtime_pm framework is not compiled in or enabled, the device
|
||||
will be in the permanent ready state.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm-interface.c | 5 +++++
|
||||
drivers/char/tpm/tpm_crb.c | 42 ++++++++++++++++++++++++++++++++++++----
|
||||
2 files changed, 43 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
|
||||
index 3a9149c..cb0e57e 100644
|
||||
--- a/drivers/char/tpm/tpm-interface.c
|
||||
+++ b/drivers/char/tpm/tpm-interface.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/freezer.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
|
||||
#include "tpm.h"
|
||||
#include "tpm_eventlog.h"
|
||||
@@ -356,6 +357,8 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
|
||||
if (!(flags & TPM_TRANSMIT_UNLOCKED))
|
||||
mutex_lock(&chip->tpm_mutex);
|
||||
|
||||
+ pm_runtime_get_sync(chip->dev.parent);
|
||||
+
|
||||
rc = chip->ops->send(chip, (u8 *) buf, count);
|
||||
if (rc < 0) {
|
||||
dev_err(&chip->dev,
|
||||
@@ -397,6 +400,8 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
|
||||
dev_err(&chip->dev,
|
||||
"tpm_transmit: tpm_recv: error %zd\n", rc);
|
||||
out:
|
||||
+ pm_runtime_put_sync(chip->dev.parent);
|
||||
+
|
||||
if (!(flags & TPM_TRANSMIT_UNLOCKED))
|
||||
mutex_unlock(&chip->tpm_mutex);
|
||||
return rc;
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index f579f1a..717b6b4 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
#include "tpm.h"
|
||||
|
||||
#define ACPI_SIG_TPM2 "TPM2"
|
||||
@@ -149,8 +150,6 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
|
||||
-
|
||||
static u8 crb_status(struct tpm_chip *chip)
|
||||
{
|
||||
struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
@@ -433,11 +432,21 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
+ pm_runtime_get_noresume(dev);
|
||||
+ pm_runtime_set_active(dev);
|
||||
+ pm_runtime_enable(dev);
|
||||
+
|
||||
rc = tpm_chip_register(chip);
|
||||
- if (rc)
|
||||
+ if (rc) {
|
||||
crb_go_idle(dev, priv);
|
||||
+ pm_runtime_put_noidle(dev);
|
||||
+ pm_runtime_disable(dev);
|
||||
+ return rc;
|
||||
+ }
|
||||
|
||||
- return rc;
|
||||
+ pm_runtime_put(dev);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int crb_acpi_remove(struct acpi_device *device)
|
||||
@@ -447,9 +456,34 @@ static int crb_acpi_remove(struct acpi_device *device)
|
||||
|
||||
tpm_chip_unregister(chip);
|
||||
|
||||
+ pm_runtime_disable(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_PM
|
||||
+static int crb_pm_runtime_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
+ struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
+
|
||||
+ return crb_go_idle(dev, priv);
|
||||
+}
|
||||
+
|
||||
+static int crb_pm_runtime_resume(struct device *dev)
|
||||
+{
|
||||
+ struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
+ struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
+
|
||||
+ return crb_cmd_ready(dev, priv);
|
||||
+}
|
||||
+#endif /* CONFIG_PM */
|
||||
+
|
||||
+static const struct dev_pm_ops crb_pm = {
|
||||
+ SET_SYSTEM_SLEEP_PM_OPS(tpm_pm_suspend, tpm_pm_resume)
|
||||
+ SET_RUNTIME_PM_OPS(crb_pm_runtime_suspend, crb_pm_runtime_resume, NULL)
|
||||
+};
|
||||
+
|
||||
static struct acpi_device_id crb_device_ids[] = {
|
||||
{"MSFT0101", 0},
|
||||
{"", 0},
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
From ba5287b6ef6a2ee91dc6cc0829649cecf7b70253 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Thu, 15 Sep 2016 10:27:38 +0300
|
||||
Subject: [PATCH] tpm/tpm_crb: implement tpm crb idle state
|
||||
|
||||
The register TPM_CRB_CTRL_REQ_x contains bits goIdle and cmdReady for
|
||||
SW to indicate that the device can enter or should exit the idle state.
|
||||
|
||||
The legacy ACPI-start (SMI + DMA) based devices do not support these
|
||||
bits and the idle state management is not exposed to the host SW.
|
||||
Thus, this functionality only is enabled only for a CRB start (MMIO)
|
||||
based devices.
|
||||
|
||||
Based on Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
original patch:
|
||||
'tpm_crb: implement power tpm crb power management'
|
||||
|
||||
To keep the implementation local to the hw we don't use wait_for_tpm_stat
|
||||
for polling the TPM_CRB_CTRL_REQ.
|
||||
|
||||
[jarkko.sakkinen@linux.intel.com: removed cmdReady debug trace on a
|
||||
success case due the heavy amount of log traffic it causes.]
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 66 insertions(+)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index a7c870a..8dd0f20 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -83,6 +83,72 @@ struct crb_priv {
|
||||
u32 cmd_size;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * crb_go_idle - request tpm crb device to go the idle state
|
||||
+ *
|
||||
+ * @dev: crb device
|
||||
+ * @priv: crb private data
|
||||
+ *
|
||||
+ * Write CRB_CTRL_REQ_GO_IDLE to TPM_CRB_CTRL_REQ
|
||||
+ * The device should respond within TIMEOUT_C by clearing the bit.
|
||||
+ * Anyhow, we do not wait here as a consequent CMD_READY request
|
||||
+ * will be handled correctly even if idle was not completed.
|
||||
+ *
|
||||
+ * The function does nothing for devices with ACPI-start method.
|
||||
+ *
|
||||
+ * Return: 0 always
|
||||
+ */
|
||||
+static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
|
||||
+{
|
||||
+ if (priv->flags & CRB_FL_ACPI_START)
|
||||
+ return 0;
|
||||
+
|
||||
+ iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->cca->req);
|
||||
+ /* we don't really care when this settles */
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * crb_cmd_ready - request tpm crb device to enter ready state
|
||||
+ *
|
||||
+ * @dev: crb device
|
||||
+ * @priv: crb private data
|
||||
+ *
|
||||
+ * Write CRB_CTRL_REQ_CMD_READY to TPM_CRB_CTRL_REQ
|
||||
+ * and poll till the device acknowledge it by clearing the bit.
|
||||
+ * The device should respond within TIMEOUT_C.
|
||||
+ *
|
||||
+ * The function does nothing for devices with ACPI-start method
|
||||
+ *
|
||||
+ * Return: 0 on success -ETIME on timeout;
|
||||
+ */
|
||||
+static int __maybe_unused crb_cmd_ready(struct device *dev,
|
||||
+ struct crb_priv *priv)
|
||||
+{
|
||||
+ ktime_t stop, start;
|
||||
+
|
||||
+ if (priv->flags & CRB_FL_ACPI_START)
|
||||
+ return 0;
|
||||
+
|
||||
+ iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->cca->req);
|
||||
+
|
||||
+ start = ktime_get();
|
||||
+ stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
|
||||
+ do {
|
||||
+ if (!(ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY))
|
||||
+ return 0;
|
||||
+ usleep_range(50, 100);
|
||||
+ } while (ktime_before(ktime_get(), stop));
|
||||
+
|
||||
+ if (ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY) {
|
||||
+ dev_warn(dev, "cmdReady timed out\n");
|
||||
+ return -ETIME;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
|
||||
|
||||
static u8 crb_status(struct tpm_chip *chip)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
From c58bd34cec4c05f8e3362a79ae94de9f405c39b5 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Mon, 12 Sep 2016 16:04:20 +0300
|
||||
Subject: [PATCH] tpm/tpm_crb: open code the crb_init into acpi_add
|
||||
|
||||
This is preparation step for implementing tpm crb
|
||||
runtime pm. We need to have tpm chip allocated
|
||||
and populated before we access the runtime handlers.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 26 ++++++++++----------------
|
||||
1 file changed, 10 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index ff0d505..f579f1a 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -262,21 +262,6 @@ static const struct tpm_class_ops tpm_crb = {
|
||||
.req_complete_val = CRB_DRV_STS_COMPLETE,
|
||||
};
|
||||
|
||||
-static int crb_init(struct acpi_device *device, struct crb_priv *priv)
|
||||
-{
|
||||
- struct tpm_chip *chip;
|
||||
-
|
||||
- chip = tpmm_chip_alloc(&device->dev, &tpm_crb);
|
||||
- if (IS_ERR(chip))
|
||||
- return PTR_ERR(chip);
|
||||
-
|
||||
- dev_set_drvdata(&chip->dev, priv);
|
||||
- chip->acpi_dev_handle = device->handle;
|
||||
- chip->flags = TPM_CHIP_FLAG_TPM2;
|
||||
-
|
||||
- return tpm_chip_register(chip);
|
||||
-}
|
||||
-
|
||||
static int crb_check_resource(struct acpi_resource *ares, void *data)
|
||||
{
|
||||
struct resource *io_res = data;
|
||||
@@ -398,6 +383,7 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_table_tpm2 *buf;
|
||||
struct crb_priv *priv;
|
||||
+ struct tpm_chip *chip;
|
||||
struct device *dev = &device->dev;
|
||||
acpi_status status;
|
||||
u32 sm;
|
||||
@@ -435,11 +421,19 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
+ chip = tpmm_chip_alloc(dev, &tpm_crb);
|
||||
+ if (IS_ERR(chip))
|
||||
+ return PTR_ERR(chip);
|
||||
+
|
||||
+ dev_set_drvdata(&chip->dev, priv);
|
||||
+ chip->acpi_dev_handle = device->handle;
|
||||
+ chip->flags = TPM_CHIP_FLAG_TPM2;
|
||||
+
|
||||
rc = crb_cmd_ready(dev, priv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
- rc = crb_init(device, priv);
|
||||
+ rc = tpm_chip_register(chip);
|
||||
if (rc)
|
||||
crb_go_idle(dev, priv);
|
||||
|
||||
--
|
||||
2.10.2
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
|
||||
fs/aufs/Kconfig | 2 +-
|
||||
fs/dcache.c | 2 ++
|
||||
fs/exec.c | 1 +
|
||||
fs/fcntl.c | 1 +
|
||||
fs/file_table.c | 4 ++++
|
||||
fs/inode.c | 1 +
|
||||
fs/namespace.c | 2 ++
|
||||
fs/notify/group.c | 4 ++++
|
||||
fs/notify/mark.c | 4 ++++
|
||||
fs/open.c | 2 ++
|
||||
fs/read_write.c | 2 ++
|
||||
fs/splice.c | 2 ++
|
||||
fs/xattr.c | 1 +
|
||||
kernel/task_work.c | 1 +
|
||||
security/commoncap.c | 2 ++
|
||||
security/device_cgroup.c | 2 ++
|
||||
security/security.c | 10 ++++++++++
|
||||
17 files changed, 42 insertions(+), 1 deletion(-)
|
||||
|
||||
diff -Nurp linux-4.9-aufs/fs/aufs/Kconfig linux-4.9-aufs-mod/fs/aufs/Kconfig
|
||||
--- linux-4.9-aufs/fs/aufs/Kconfig 2016-12-31 00:31:52.367789380 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/aufs/Kconfig 2016-12-31 00:32:35.153785422 +0200
|
||||
@@ -1,5 +1,5 @@
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
+ tristate "Aufs (Advanced multi layered unification filesystem) support"
|
||||
help
|
||||
Aufs is a stackable unification filesystem such as Unionfs,
|
||||
which unifies several directories and provides a merged single
|
||||
diff -Nurp linux-4.9-aufs/fs/dcache.c linux-4.9-aufs-mod/fs/dcache.c
|
||||
--- linux-4.9-aufs/fs/dcache.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/dcache.c 2016-12-31 01:49:12.324360147 +0200
|
||||
@@ -1272,6 +1272,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_walk);
|
||||
|
||||
/*
|
||||
* Search for at least 1 mount point in the dentry's subdirs.
|
||||
@@ -2855,6 +2856,7 @@ void d_exchange(struct dentry *dentry1,
|
||||
|
||||
write_sequnlock(&rename_lock);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_exchange);
|
||||
|
||||
/**
|
||||
* d_ancestor - search for an ancestor
|
||||
diff -Nurp linux-4.9-aufs/fs/exec.c linux-4.9-aufs-mod/fs/exec.c
|
||||
--- linux-4.9-aufs/fs/exec.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/exec.c 2016-12-31 00:32:35.153785422 +0200
|
||||
@@ -104,6 +104,7 @@ bool path_noexec(const struct path *path
|
||||
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(path_noexec);
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff -Nurp linux-4.9-aufs/fs/fcntl.c linux-4.9-aufs-mod/fs/fcntl.c
|
||||
--- linux-4.9-aufs/fs/fcntl.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/fcntl.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, un
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(setfl);
|
||||
|
||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||
int force)
|
||||
diff -Nurp linux-4.9-aufs/fs/file_table.c linux-4.9-aufs-mod/fs/file_table.c
|
||||
--- linux-4.9-aufs/fs/file_table.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/file_table.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -147,6 +147,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(get_empty_filp);
|
||||
|
||||
/**
|
||||
* alloc_file - allocate and initialize a 'struct file'
|
||||
@@ -258,6 +259,7 @@ void flush_delayed_fput(void)
|
||||
{
|
||||
delayed_fput(NULL);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(flush_delayed_fput);
|
||||
|
||||
static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput);
|
||||
|
||||
@@ -300,6 +302,7 @@ void __fput_sync(struct file *file)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(fput);
|
||||
+EXPORT_SYMBOL_GPL(__fput_sync);
|
||||
|
||||
void put_filp(struct file *file)
|
||||
{
|
||||
@@ -308,6 +311,7 @@ void put_filp(struct file *file)
|
||||
file_free(file);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(put_filp);
|
||||
|
||||
void __init files_init(void)
|
||||
{
|
||||
diff -Nurp linux-4.9-aufs/fs/inode.c linux-4.9-aufs-mod/fs/inode.c
|
||||
--- linux-4.9-aufs/fs/inode.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/inode.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -1651,6 +1651,7 @@ int update_time(struct inode *inode, str
|
||||
|
||||
return update_time(inode, time, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(update_time);
|
||||
|
||||
/**
|
||||
* touch_atime - update the access time
|
||||
diff -Nurp linux-4.9-aufs/fs/namespace.c linux-4.9-aufs-mod/fs/namespace.c
|
||||
--- linux-4.9-aufs/fs/namespace.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/namespace.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -466,6 +466,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__mnt_drop_write);
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -1823,6 +1824,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(iterate_mounts);
|
||||
|
||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
||||
{
|
||||
diff -Nurp linux-4.9-aufs/fs/notify/group.c linux-4.9-aufs-mod/fs/notify/group.c
|
||||
--- linux-4.9-aufs/fs/notify/group.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/notify/group.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/wait.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <linux/fsnotify_backend.h>
|
||||
#include "fsnotify.h"
|
||||
@@ -100,6 +101,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
{
|
||||
atomic_inc(&group->refcnt);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_get_group);
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
@@ -109,6 +111,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
if (atomic_dec_and_test(&group->refcnt))
|
||||
fsnotify_final_destroy_group(group);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_put_group);
|
||||
|
||||
/*
|
||||
* Create a new fsnotify_group and hold a reference for the group returned.
|
||||
@@ -137,6 +140,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
|
||||
return group;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_alloc_group);
|
||||
|
||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
diff -Nurp linux-4.9-aufs/fs/notify/mark.c linux-4.9-aufs-mod/fs/notify/mark.c
|
||||
--- linux-4.9-aufs/fs/notify/mark.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/notify/mark.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_m
|
||||
mark->free_mark(mark);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_put_mark);
|
||||
|
||||
/* Calculate mask of events for a list of marks */
|
||||
u32 fsnotify_recalc_mask(struct hlist_head *head)
|
||||
@@ -230,6 +231,7 @@ void fsnotify_destroy_mark(struct fsnoti
|
||||
mutex_unlock(&group->mark_mutex);
|
||||
fsnotify_free_mark(mark);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_destroy_mark);
|
||||
|
||||
void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
|
||||
{
|
||||
@@ -415,6 +417,7 @@ err:
|
||||
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_add_mark);
|
||||
|
||||
int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
|
||||
struct inode *inode, struct vfsmount *mnt, int allow_dups)
|
||||
@@ -521,6 +524,7 @@ void fsnotify_duplicate_mark(struct fsno
|
||||
new->mask = old->mask;
|
||||
new->free_mark = old->free_mark;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_init_mark);
|
||||
|
||||
/*
|
||||
* Nothing fancy, just initialize lists and locks and counters.
|
||||
diff -Nurp linux-4.9-aufs/fs/open.c linux-4.9-aufs-mod/fs/open.c
|
||||
--- linux-4.9-aufs/fs/open.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/open.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_truncate);
|
||||
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
@@ -695,6 +696,7 @@ int open_check_o_direct(struct file *f)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(open_check_o_direct);
|
||||
|
||||
static int do_dentry_open(struct file *f,
|
||||
struct inode *inode,
|
||||
diff -Nurp linux-4.9-aufs/fs/read_write.c linux-4.9-aufs-mod/fs/read_write.c
|
||||
--- linux-4.9-aufs/fs/read_write.c 2016-12-31 00:31:52.380789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/read_write.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
return new_sync_read;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_readf);
|
||||
|
||||
vfs_writef_t vfs_writef(struct file *file)
|
||||
{
|
||||
@@ -536,6 +537,7 @@ vfs_writef_t vfs_writef(struct file *fil
|
||||
return new_sync_write;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_writef);
|
||||
|
||||
ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
|
||||
{
|
||||
diff -Nurp linux-4.9-aufs/fs/splice.c linux-4.9-aufs-mod/fs/splice.c
|
||||
--- linux-4.9-aufs/fs/splice.c 2016-12-31 00:31:52.380789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/splice.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -868,6 +868,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
|
||||
return splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_from);
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -897,6 +898,7 @@ long do_splice_to(struct file *in, loff_
|
||||
|
||||
return splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_splice_to);
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-4.9-aufs/fs/xattr.c linux-4.9-aufs-mod/fs/xattr.c
|
||||
--- linux-4.9-aufs/fs/xattr.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/xattr.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -296,6 +296,7 @@ vfs_getxattr_alloc(struct dentry *dentry
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
|
||||
|
||||
ssize_t
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
diff -Nurp linux-4.9-aufs/kernel/task_work.c linux-4.9-aufs-mod/kernel/task_work.c
|
||||
--- linux-4.9-aufs/kernel/task_work.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/kernel/task_work.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -119,3 +119,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff -Nurp linux-4.9-aufs/security/commoncap.c linux-4.9-aufs-mod/security/commoncap.c
|
||||
--- linux-4.9-aufs/security/commoncap.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/commoncap.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(cap_mmap_addr);
|
||||
|
||||
int cap_mmap_file(struct file *file, unsigned long reqprot,
|
||||
unsigned long prot, unsigned long flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(cap_mmap_file);
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
diff -Nurp linux-4.9-aufs/security/device_cgroup.c linux-4.9-aufs-mod/security/device_cgroup.c
|
||||
--- linux-4.9-aufs/security/device_cgroup.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/device_cgroup.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/device_cgroup.h>
|
||||
#include <linux/cgroup.h>
|
||||
#include <linux/ctype.h>
|
||||
+#include <linux/export.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/seq_file.h>
|
||||
@@ -849,6 +850,7 @@ int __devcgroup_inode_permission(struct
|
||||
return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
|
||||
access);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__devcgroup_inode_permission);
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff -Nurp linux-4.9-aufs/security/security.c linux-4.9-aufs-mod/security/security.c
|
||||
--- linux-4.9-aufs/security/security.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/security.c 2016-12-31 00:32:35.157785422 +0200
|
||||
@@ -443,6 +443,7 @@ int security_path_rmdir(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_rmdir);
|
||||
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -459,6 +460,7 @@ int security_path_symlink(const struct p
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_symlink);
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -467,6 +469,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_link);
|
||||
|
||||
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||
const struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -494,6 +497,7 @@ int security_path_truncate(const struct
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_truncate);
|
||||
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -501,6 +505,7 @@ int security_path_chmod(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -508,6 +513,7 @@ int security_path_chown(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chown);
|
||||
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -593,6 +599,7 @@ int security_inode_readlink(struct dentr
|
||||
return 0;
|
||||
return call_int_hook(inode_readlink, 0, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_readlink);
|
||||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
|
||||
bool rcu)
|
||||
@@ -608,6 +615,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_inode_permission);
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -779,6 +787,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_file_permission);
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -838,6 +847,7 @@ int security_mmap_file(struct file *file
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_mmap_file);
|
||||
|
||||
int security_mmap_addr(unsigned long addr)
|
||||
{
|
||||
File diff suppressed because it is too large
Load Diff
+44
@@ -0,0 +1,44 @@
|
||||
From e522751d605d99a81508e58390a8f51ee96fb662 Mon Sep 17 00:00:00 2001
|
||||
From: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
|
||||
Date: Tue, 29 Nov 2016 15:18:20 +0100
|
||||
Subject: [PATCH] seq_file: reset iterator to first record for zero offset
|
||||
|
||||
If kernfs file is empty on a first read, successive read operations
|
||||
using the same file descriptor will return no data, even when data is
|
||||
available. Default kernfs 'seq_next' implementation advances iterator
|
||||
position even when next object is not there. Kernfs 'seq_start' for
|
||||
following requests will not return iterator as position is already on
|
||||
the second object.
|
||||
|
||||
This defect doesn't allow to monitor badblocks sysfs files from MD raid.
|
||||
They are initially empty but if data appears at some stage, userspace is
|
||||
not able to read it.
|
||||
|
||||
Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
||||
---
|
||||
fs/seq_file.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/fs/seq_file.c b/fs/seq_file.c
|
||||
index 368bfb9..a11f271 100644
|
||||
--- a/fs/seq_file.c
|
||||
+++ b/fs/seq_file.c
|
||||
@@ -190,6 +190,13 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
|
||||
*/
|
||||
m->version = file->f_version;
|
||||
|
||||
+ /*
|
||||
+ * if request is to read from zero offset, reset iterator to first
|
||||
+ * record as it might have been already advanced by previous requests
|
||||
+ */
|
||||
+ if (*ppos == 0)
|
||||
+ m->index = 0;
|
||||
+
|
||||
/* Don't assume *ppos is where we left it */
|
||||
if (unlikely(*ppos != m->read_pos)) {
|
||||
while ((err = traverse(m, *ppos)) == -EAGAIN)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
From 8726f2faa371514fba2f594d799db95203dfeee0 Mon Sep 17 00:00:00 2001
|
||||
From: Francisco Jerez <currojerez@riseup.net>
|
||||
Date: Thu, 12 Jan 2017 12:44:54 +0200
|
||||
Subject: drm/i915: Remove WaDisableLSQCROPERFforOCL KBL workaround.
|
||||
|
||||
The WaDisableLSQCROPERFforOCL workaround has the side effect of
|
||||
disabling an L3SQ optimization that has huge performance implications
|
||||
and is unlikely to be necessary for the correct functioning of usual
|
||||
graphic workloads. Userspace is free to re-enable the workaround on
|
||||
demand, and is generally in a better position to determine whether the
|
||||
workaround is necessary than the DRM is (e.g. only during the
|
||||
execution of compute kernels that rely on both L3 fences and HDC R/W
|
||||
requests).
|
||||
|
||||
The same workaround seems to apply to BDW (at least to production
|
||||
stepping G1) and SKL as well (the internal workaround database claims
|
||||
that it does for all steppings, while the BSpec workaround table only
|
||||
mentions pre-production steppings), but the DRM doesn't do anything
|
||||
beyond whitelisting the L3SQCREG4 register so userspace can enable it
|
||||
when it sees fit. Do the same on KBL platforms.
|
||||
|
||||
Improves performance of the GFXBench4 gl_manhattan31 benchmark by 60%,
|
||||
and gl_4 (AKA car chase) by 14% on a KBL GT2 running Mesa master --
|
||||
This is followed by a regression of 35% and 10% respectively for the
|
||||
same benchmarks and platform caused by my recent patch series
|
||||
switching userspace to use the dataport constant cache instead of the
|
||||
sampler to implement uniform pull constant loads, which caused us to
|
||||
hit more heavily the L3 cache (and on platforms other than KBL had the
|
||||
opposite effect of improving performance of the same two benchmarks).
|
||||
The overall effect on KBL of this change combined with the recent
|
||||
userspace change is respectively 4.6% and 2.6%. SynMark2 OglShMapPcf
|
||||
was affected by the constant cache changes (though it improved as it
|
||||
did on other platforms rather than regressing), but is not
|
||||
significantly affected by this patch (with statistical significance of
|
||||
5% and sample size 20).
|
||||
|
||||
v2: Drop some more code to avoid unused variable warning.
|
||||
|
||||
Fixes: 738fa1b3123f ("drm/i915/kbl: Add WaDisableLSQCROPERFforOCL")
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99256
|
||||
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
|
||||
Cc: Matthew Auld <matthew.william.auld@gmail.com>
|
||||
Cc: Eero Tamminen <eero.t.tamminen@intel.com>
|
||||
Cc: Jani Nikula <jani.nikula@intel.com>
|
||||
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Cc: beignet@lists.freedesktop.org
|
||||
Cc: <stable@vger.kernel.org> # v4.7+
|
||||
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
[Removed double Fixes tag]
|
||||
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1484217894-20505-1-git-send-email-mika.kuoppala@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index db714dc..8acab87 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -970,18 +970,8 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t *batch,
|
||||
uint32_t index)
|
||||
{
|
||||
- struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
- /*
|
||||
- * WaDisableLSQCROPERFforOCL:kbl
|
||||
- * This WA is implemented in skl_init_clock_gating() but since
|
||||
- * this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
- * set this bit here to retain the WA during flush.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
-
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
MI_SRM_LRM_GLOBAL_GTT));
|
||||
wa_ctx_emit_reg(batch, index, GEN8_L3SQCREG4);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index ab83fc2..49fa800 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1095,14 +1095,6 @@ static int kbl_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
HDC_FENCE_DEST_SLM_DISABLE);
|
||||
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:kbl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaToEnableHwFixForPushConstHWBug:kbl */
|
||||
if (IS_KBL_REVID(dev_priv, KBL_REVID_C0, REVID_FOREVER))
|
||||
WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
From a117f378f44150e6d13d2f19740fb757425b651f Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:44 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for A0 and B0 revisions
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/7929af62a68504c84038a8db1625bd96ebaa9e6f.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 0568fb5..57da2b7 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1299,10 +1299,6 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
|
||||
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
|
||||
struct drm_device *dev = dig_port->base.base.dev;
|
||||
|
||||
- /* WaDisableHBR2:skl */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0))
|
||||
- return false;
|
||||
-
|
||||
if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
(INTEL_INFO(dev)->gen >= 9))
|
||||
return true;
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
index c438b02..0048b52 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
@@ -225,9 +225,6 @@ static u32 intel_dp_training_pattern(struct intel_dp *intel_dp)
|
||||
* Intel platforms that support HBR2 also support TPS3. TPS3 support is
|
||||
* also mandatory for downstream devices that support HBR2. However, not
|
||||
* all sinks follow the spec.
|
||||
- *
|
||||
- * Due to WaDisableHBR2 SKL < B0 is the only exception where TPS3 is
|
||||
- * supported in source but still not enabled.
|
||||
*/
|
||||
source_tps3 = intel_dp_source_supports_hbr2(intel_dp);
|
||||
sink_tps3 = drm_dp_tps3_supported(intel_dp->dpcd);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
index 6fd39ef..acc1dbd 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
@@ -375,9 +375,8 @@ static int guc_ucode_xfer(struct drm_i915_private *dev_priv)
|
||||
/* Enable MIA caching. GuC clock gating is disabled. */
|
||||
I915_WRITE(GUC_SHIM_CONTROL, GUC_SHIM_CONTROL_VALUE);
|
||||
|
||||
- /* WaDisableMinuteIaClockGating:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
+ /* WaDisableMinuteIaClockGating:bxt */
|
||||
+ if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GUC_SHIM_CONTROL, (I915_READ(GUC_SHIM_CONTROL) &
|
||||
~GUC_ENABLE_MIA_CLOCK_GATING));
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 39417b7..47f7afa 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -269,8 +269,7 @@ logical_ring_init_platform_invariants(struct intel_engine_cs *engine)
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
|
||||
engine->disable_lite_restore_wa =
|
||||
- (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) &&
|
||||
+ IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1) &&
|
||||
(engine->id == VCS || engine->id == VCS2);
|
||||
|
||||
engine->ctx_desc_template = GEN8_CTX_VALID;
|
||||
@@ -1068,9 +1067,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
{
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
wa_ctx_emit(batch, index, MI_LOAD_REGISTER_IMM(1));
|
||||
wa_ctx_emit_reg(batch, index, GEN9_SLICE_COMMON_ECO_CHICKEN0);
|
||||
wa_ctx_emit(batch, index,
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 7a74750..2faf64f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -851,15 +851,13 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
|
||||
GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC);
|
||||
|
||||
- /* WaDisableDgMirrorFixInHalfSliceChicken5:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableDgMirrorFixInHalfSliceChicken5:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5,
|
||||
GEN9_DG_MIRROR_FIX_ENABLE);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
WA_SET_BIT_MASKED(GEN7_COMMON_SLICE_CHICKEN1,
|
||||
GEN9_RHWO_OPTIMIZATION_DISABLE);
|
||||
/*
|
||||
@@ -1023,15 +1021,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
GEN8_LQSC_RO_PERF_DIS);
|
||||
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
- GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* WaDisablePowerCompilerClockGating:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_B0, SKL_REVID_B0))
|
||||
- WA_SET_BIT_MASKED(HIZ_CHICKEN,
|
||||
- BDW_HIZ_POWER_COMPILER_CLOCK_GATING_DISABLE);
|
||||
+ I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
+ GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
/* WaBarrierPerformanceFixDisable:skl */
|
||||
if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
From 9fc736e833d226853fd53843e35d6a1d542394ed Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:46 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for D0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/d28d21ceddeec226b5d1a20a7382bee9a72709a4.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 47f7afa..ca649cc 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -994,9 +994,8 @@ static int gen9_init_indirectctx_bb(struct intel_engine_cs *engine,
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_DISABLE);
|
||||
|
||||
/* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt */
|
||||
@@ -1095,9 +1094,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
wa_ctx_emit(batch, index, MI_NOOP);
|
||||
}
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_ENABLE);
|
||||
|
||||
wa_ctx_emit(batch, index, MI_BATCH_BUFFER_END);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 2df06b7..a860c40 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -5335,8 +5335,7 @@ static void gen9_enable_rc6(struct drm_i915_private *dev_priv)
|
||||
rc6_mask = GEN6_RC_CTL_RC6_ENABLE;
|
||||
DRM_INFO("RC6 %s\n", onoff(rc6_mask & GEN6_RC_CTL_RC6_ENABLE));
|
||||
/* WaRsUseTimeoutMode */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GEN6_RC6_THRESHOLD, 625); /* 800us */
|
||||
I915_WRITE(GEN6_RC_CONTROL, GEN6_RC_CTL_HW_ENABLE |
|
||||
GEN7_RC_CTL_TO_MODE |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 474ce84..6880082 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1000,10 +1000,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
* until D0 which is the default case so this is equivalent to
|
||||
* !WaDisablePerCtxtPreemptionGranularityControl:skl
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_E0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
- _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
- }
|
||||
+ I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
+ _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
/* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
@@ -1023,12 +1021,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
- /* WaBarrierPerformanceFixDisable:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
- WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
- HDC_FENCE_DEST_SLM_DISABLE |
|
||||
- HDC_BARRIER_PERFORMANCE_DISABLE);
|
||||
-
|
||||
/* WaDisableSbeCacheDispatchPortSharing:skl */
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_F0))
|
||||
WA_SET_BIT_MASKED(
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
From 3be192e92ddcad15f7bf6b4b9e3f195eb8c1fe76 Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:47 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for E0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/0633a02177195703502ef2396aab03efc0314334.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index ca649cc..2d8eb2e 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -845,13 +845,12 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
/*
|
||||
- * WaDisableLSQCROPERFforOCL:skl,kbl
|
||||
+ * WaDisableLSQCROPERFforOCL:kbl
|
||||
* This WA is implemented in skl_init_clock_gating() but since
|
||||
* this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
* set this bit here to retain the WA during flush.
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0) ||
|
||||
- IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
+ if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 6880082..68dc27f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1003,20 +1003,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
_MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
- /* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
- I915_WRITE(FF_SLICE_CS_CHICKEN2,
|
||||
- _MASKED_BIT_ENABLE(GEN9_TSG_BARRIER_ACK_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:skl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
|
||||
Make defines psd specific so they dont redefine in-kernel defines like
|
||||
HASH_SIZE.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
|
||||
include/linux/netfilter_ipv4/ipt_psd.h | 14 +++++++-------
|
||||
net/ipv4/netfilter/ipt_psd.c | 14 +++++++-------
|
||||
2 files changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff -Nurp linux-4.9.5-psd/include/linux/netfilter_ipv4/ipt_psd.h linux-4.9.5-psd-fix/include/linux/netfilter_ipv4/ipt_psd.h
|
||||
--- linux-4.9.5-psd/include/linux/netfilter_ipv4/ipt_psd.h 2017-01-20 21:47:19.788931403 +0200
|
||||
+++ linux-4.9.5-psd-fix/include/linux/netfilter_ipv4/ipt_psd.h 2017-01-20 21:58:09.995871253 +0200
|
||||
@@ -21,14 +21,14 @@
|
||||
#define SCAN_DELAY_THRESHOLD (300) /* old usage of HZ here was erroneously and broke under uml */
|
||||
|
||||
/*
|
||||
- * Keep track of up to LIST_SIZE source addresses, using a hash table of
|
||||
- * HASH_SIZE entries for faster lookups, but limiting hash collisions to
|
||||
- * HASH_MAX source addresses per the same hash value.
|
||||
+ * Keep track of up to PSD_LIST_SIZE source addresses, using a hash table of
|
||||
+ * PSD_HASH_SIZE entries for faster lookups, but limiting hash collisions to
|
||||
+ * PSD_HASH_MAX source addresses per the same hash value.
|
||||
*/
|
||||
-#define LIST_SIZE 0x100
|
||||
-#define HASH_LOG 9
|
||||
-#define HASH_SIZE (1 << HASH_LOG)
|
||||
-#define HASH_MAX 0x10
|
||||
+#define PSD_LIST_SIZE 0x100
|
||||
+#define PSD_HASH_LOG 9
|
||||
+#define PSD_HASH_SIZE (1 << PSD_HASH_LOG)
|
||||
+#define PSD_HASH_MAX 0x10
|
||||
|
||||
struct ipt_psd_info {
|
||||
unsigned int weight_threshold;
|
||||
diff -Nurp linux-4.9.5-psd/net/ipv4/netfilter/ipt_psd.c linux-4.9.5-psd-fix/net/ipv4/netfilter/ipt_psd.c
|
||||
--- linux-4.9.5-psd/net/ipv4/netfilter/ipt_psd.c 2017-01-20 21:47:19.792931402 +0200
|
||||
+++ linux-4.9.5-psd-fix/net/ipv4/netfilter/ipt_psd.c 2017-01-20 21:58:09.998871253 +0200
|
||||
@@ -74,8 +74,8 @@ struct host {
|
||||
*/
|
||||
static struct {
|
||||
spinlock_t lock;
|
||||
- struct host list[LIST_SIZE]; /* List of source addresses */
|
||||
- struct host *hash[HASH_SIZE]; /* Hash: pointers into the list */
|
||||
+ struct host list[PSD_LIST_SIZE]; /* List of source addresses */
|
||||
+ struct host *hash[PSD_HASH_SIZE]; /* Hash: pointers into the list */
|
||||
int index; /* Oldest entry to be replaced */
|
||||
} state;
|
||||
|
||||
@@ -91,9 +91,9 @@ static inline int hashfunc(struct in_add
|
||||
hash = 0;
|
||||
do {
|
||||
hash ^= value;
|
||||
- } while ((value >>= HASH_LOG));
|
||||
+ } while ((value >>= PSD_HASH_LOG));
|
||||
|
||||
- return hash & (HASH_SIZE - 1);
|
||||
+ return hash & (PSD_HASH_SIZE - 1);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -245,11 +245,11 @@ ipt_psd_match(const struct sk_buff *pskb
|
||||
/* Got too many source addresses with the same hash value? Then remove the
|
||||
* oldest one from the hash table, so that they can't take too much of our
|
||||
* CPU time even with carefully chosen spoofed IP addresses. */
|
||||
- if (count >= HASH_MAX && last) last->next = NULL;
|
||||
+ if (count >= PSD_HASH_MAX && last) last->next = NULL;
|
||||
|
||||
/* We're going to re-use the oldest list entry, so remove it from the hash
|
||||
* table first (if it is really already in use, and isn't removed from the
|
||||
- * hash table already because of the HASH_MAX check above). */
|
||||
+ * hash table already because of the PSD_HASH_MAX check above). */
|
||||
|
||||
/* First, find it */
|
||||
if (state.list[state.index].src_addr.s_addr)
|
||||
@@ -273,7 +273,7 @@ ipt_psd_match(const struct sk_buff *pskb
|
||||
|
||||
/* Get our list entry */
|
||||
curr = &state.list[state.index++];
|
||||
- if (state.index >= LIST_SIZE) state.index = 0;
|
||||
+ if (state.index >= PSD_LIST_SIZE) state.index = 0;
|
||||
|
||||
/* Link it into the hash table */
|
||||
head = &state.hash[hash];
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
|
||||
From: Gavin Li <git@thegavinli.com>
|
||||
|
||||
brcmf_sdio_fromevntchan() was being called on the the data frame
|
||||
rather than the software header, causing some frames to be
|
||||
mischaracterized as on the event channel rather than the data channel.
|
||||
|
||||
This fixes a major performance regression (due to dropped packets).
|
||||
|
||||
Fixes: c56caa9db8ab ("brcmfmac: screening firmware event packet")
|
||||
Signed-off-by: Gavin Li <git@thegavinli.com>
|
||||
Cc: <stable@vger.kernel.org> [4.7+]
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index dfb0658713d9..d2219885071f 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1661,7 +1661,7 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
|
||||
pfirst->len, pfirst->next,
|
||||
pfirst->prev);
|
||||
skb_unlink(pfirst, &bus->glom);
|
||||
- if (brcmf_sdio_fromevntchan(pfirst->data))
|
||||
+ if (brcmf_sdio_fromevntchan(&dptr[SDPCM_HWHDR_LEN]))
|
||||
brcmf_rx_event(bus->sdiodev->dev, pfirst);
|
||||
else
|
||||
brcmf_rx_frame(bus->sdiodev->dev, pfirst,
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 22b68b93ae2506bd56ee3bf232a51bc8ab955b56 Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Date: Mon, 19 Dec 2016 20:38:12 -0600
|
||||
Subject: [PATCH] rtlwifi: Fix kernel oops introduced with commit e49656147359
|
||||
|
||||
With commit e49656147359 {"rtlwifi: Use dev_kfree_skb_irq instead of
|
||||
kfree_skb"), the method used to free an skb was changed because the
|
||||
kfree_skb() was inside a spinlock. What was forgotten is that kfree_skb()
|
||||
guards against a NULL value for the argument. Routine dev_kfree_skb_irq()
|
||||
does not, and a test is needed to prevent kernel panics.
|
||||
|
||||
Fixes: e49656147359 ("rtlwifi: Use dev_kfree_skb_irq instead of kfree_skb")
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Cc: Stable <stable@vger.kernel.org> # 4.9+
|
||||
Cc: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index 2caa4ad..ded1493 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1829,7 +1829,8 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
|
||||
spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
|
||||
pskb = __skb_dequeue(&ring->queue);
|
||||
- dev_kfree_skb_irq(pskb);
|
||||
+ if (pskb)
|
||||
+ dev_kfree_skb_irq(pskb);
|
||||
|
||||
/*this is wrong, fill_tx_cmddesc needs update*/
|
||||
pdesc = &ring->desc[0];
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From e49656147359411fb7529a211e852e587e5970dd Mon Sep 17 00:00:00 2001
|
||||
From: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Date: Tue, 1 Nov 2016 14:48:40 +0000
|
||||
Subject: [PATCH] rtlwifi: Use dev_kfree_skb_irq instead of kfree_skb
|
||||
|
||||
It is not allowed to call kfree_skb() from hardware interrupt
|
||||
context or with interrupts being disabled, spin_lock_irqsave()
|
||||
make sure always in irq disable context. So the kfree_skb()
|
||||
should be replaced with dev_kfree_skb_irq().
|
||||
|
||||
This is detected by Coccinelle semantic patch.
|
||||
|
||||
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index f95760c..a11e8f5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1832,7 +1832,7 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
|
||||
spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
|
||||
pskb = __skb_dequeue(&ring->queue);
|
||||
- kfree_skb(pskb);
|
||||
+ dev_kfree_skb_irq(pskb);
|
||||
|
||||
/*this is wrong, fill_tx_cmddesc needs update*/
|
||||
pdesc = &ring->desc[0];
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
From fdf35a6b22247746a7053fc764d04218a9306f82 Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Mon, 9 Jan 2017 15:56:14 +0100
|
||||
Subject: drm: Fix broken VT switch with video=1366x768 option
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
commit fdf35a6b22247746a7053fc764d04218a9306f82 upstream.
|
||||
|
||||
I noticed that the VT switch doesn't work any longer with a Dell
|
||||
laptop with 1366x768 eDP when the machine is connected with a DP
|
||||
monitor. It behaves as if VT were switched, but the graphics remain
|
||||
frozen. Actually the keyboard works, so I could switch back to VT7
|
||||
again.
|
||||
|
||||
I tried to track down the problem, and encountered a long story until
|
||||
we reach to this error:
|
||||
|
||||
- The machine is booted with video=1366x768 option (the distro
|
||||
installer seems to add it as default).
|
||||
- Recently, drm_helper_probe_single_connector_modes() deals with
|
||||
cmdline modes, and it tries to create a new mode when no
|
||||
matching mode is found.
|
||||
- The drm_mode_create_from_cmdline_mode() creates a mode based on
|
||||
either CVT of GFT according to the given cmdline mode; in our case,
|
||||
it's 1366x768.
|
||||
- Since both CVT and GFT can't express the width 1366 due to
|
||||
alignment, the resultant mode becomes 1368x768, slightly larger than
|
||||
the given size.
|
||||
- Later on, the atomic commit is performed, and in
|
||||
drm_atomic_check_only(), the size of each plane is checked.
|
||||
- The size check of 1366x768 fails due to the above, and eventually
|
||||
the whole VT switch fails.
|
||||
|
||||
Back in the history, we've had a manual fix-up of 1368x768 in various
|
||||
places via c09dedb7a50e ("drm/edid: Add a workaround for 1366x768 HD
|
||||
panel"), but they have been all in drm_edid.c at probing the modes
|
||||
from EDID. For addressing the problem above, we need a similar hack
|
||||
to the mode newly created from cmdline, manually adjusting the width
|
||||
when the expected size is 1366 while we get 1368 instead.
|
||||
|
||||
Fixes: eaf99c749d43 ("drm: Perform cmdline mode parsing during...")
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/20170109145614.29454-1-tiwai@suse.de
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1462,6 +1462,13 @@ drm_mode_create_from_cmdline_mode(struct
|
||||
return NULL;
|
||||
|
||||
mode->type |= DRM_MODE_TYPE_USERDEF;
|
||||
+ /* fix up 1368x768: GFT/CVT can't express 1366 width due to alignment */
|
||||
+ if (cmd->xres == 1366 && mode->hdisplay == 1368) {
|
||||
+ mode->hdisplay = 1366;
|
||||
+ mode->hsync_start--;
|
||||
+ mode->hsync_end--;
|
||||
+ drm_mode_set_name(mode);
|
||||
+ }
|
||||
drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
|
||||
return mode;
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From 3bfdfdcbce2796ce75bf2d85fd8471858d702e5d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
|
||||
Date: Mon, 7 Nov 2016 22:20:54 +0200
|
||||
Subject: drm/i915: Ignore bogus plane coordinates on SKL when the plane is not visible
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
|
||||
commit 3bfdfdcbce2796ce75bf2d85fd8471858d702e5d upstream.
|
||||
|
||||
When the plane is invisible we may have all sorts of bogus stuff
|
||||
in the coordinates, which we must ignore or else we might fail the
|
||||
plane update. This started to happen on SKL when I moved the plane
|
||||
offset computation to happen in the check phase. Previously we
|
||||
happily ignored it all since we never called the update_plane hook
|
||||
with an invisible plane.
|
||||
|
||||
Cc: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
|
||||
Cc: drm-intel-fixes@lists.freedesktop.org
|
||||
Fixes: b63a16f6cd89 ("drm/i915: Compute display surface offset in the plane check hook for SKL+")
|
||||
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98258
|
||||
Testcase: igt/pm_rpm/legacy-planes
|
||||
Testcase: igt/pm_rpm/universal-planes
|
||||
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
|
||||
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1478550057-24864-3-git-send-email-ville.syrjala@linux.intel.com
|
||||
(cherry picked from commit a5e4c7d0aa6784d8abe95c3ceef0da9656d17468)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_display.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -2975,6 +2975,9 @@ int skl_check_plane_surface(struct intel
|
||||
unsigned int rotation = plane_state->base.rotation;
|
||||
int ret;
|
||||
|
||||
+ if (!plane_state->base.visible)
|
||||
+ return 0;
|
||||
+
|
||||
/* Rotate src coordinates to match rotated GTT view */
|
||||
if (intel_rotation_90_or_270(rotation))
|
||||
drm_rect_rotate(&plane_state->base.src,
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
From 68f458eec7069d618a6c884ca007426e0cea411b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
Date: Mon, 9 Jan 2017 16:31:58 +0200
|
||||
Subject: drm: Schedule the output_poll_work with 1s delay if we have delayed event
|
||||
|
||||
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
|
||||
commit 68f458eec7069d618a6c884ca007426e0cea411b upstream.
|
||||
|
||||
Instead of scheduling the work to handle the initial delayed event, use 1s
|
||||
delay.
|
||||
|
||||
This delay should not be needed, but Optimus/nouveau will fail in a
|
||||
mysterious way if the delayed event is handled as soon as possible like it
|
||||
is done in drm_helper_probe_single_connector_modes() in case the poll
|
||||
was enabled before.
|
||||
|
||||
Reverting 339fd36238dd would give back the 10 sec (!) delay to handle the
|
||||
delayed event. Adding 1sec delay to the poll_work is enough to work around
|
||||
the issue in Optimus setups and gives shorter response on handling the
|
||||
initial delayed event.
|
||||
|
||||
Fixes: 339fd36238dd ("drm: drm_probe_helper: Fix output_poll_work scheduling")
|
||||
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
[danvet: Add FIXME to the comment to make it stick out more.]
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/20170109143158.21917-1-peter.ujfalusi@ti.com
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/drm_probe_helper.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_probe_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_probe_helper.c
|
||||
@@ -143,8 +143,18 @@ void drm_kms_helper_poll_enable_locked(s
|
||||
}
|
||||
|
||||
if (dev->mode_config.delayed_event) {
|
||||
+ /*
|
||||
+ * FIXME:
|
||||
+ *
|
||||
+ * Use short (1s) delay to handle the initial delayed event.
|
||||
+ * This delay should not be needed, but Optimus/nouveau will
|
||||
+ * fail in a mysterious way if the delayed event is handled as
|
||||
+ * soon as possible like it is done in
|
||||
+ * drm_helper_probe_single_connector_modes() in case the poll
|
||||
+ * was enabled before.
|
||||
+ */
|
||||
poll = true;
|
||||
- delay = 0;
|
||||
+ delay = HZ;
|
||||
}
|
||||
|
||||
if (poll)
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
From 2dc705a9930b4806250fbf5a76e55266e59389f2 Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Tue, 24 Jan 2017 15:18:24 -0800
|
||||
Subject: fbdev: color map copying bounds checking
|
||||
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
|
||||
commit 2dc705a9930b4806250fbf5a76e55266e59389f2 upstream.
|
||||
|
||||
Copying color maps to userspace doesn't check the value of to->start,
|
||||
which will cause kernel heap buffer OOB read due to signedness wraps.
|
||||
|
||||
CVE-2016-8405
|
||||
|
||||
Link: http://lkml.kernel.org/r/20170105224249.GA50925@beast
|
||||
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Reported-by: Peter Pi (@heisecode) of Trend Micro
|
||||
Cc: Min Chong <mchong@google.com>
|
||||
Cc: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/video/fbdev/core/fbcmap.c | 26 ++++++++++++++------------
|
||||
1 file changed, 14 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/video/fbdev/core/fbcmap.c
|
||||
+++ b/drivers/video/fbdev/core/fbcmap.c
|
||||
@@ -163,17 +163,18 @@ void fb_dealloc_cmap(struct fb_cmap *cma
|
||||
|
||||
int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to)
|
||||
{
|
||||
- int tooff = 0, fromoff = 0;
|
||||
- int size;
|
||||
+ unsigned int tooff = 0, fromoff = 0;
|
||||
+ size_t size;
|
||||
|
||||
if (to->start > from->start)
|
||||
fromoff = to->start - from->start;
|
||||
else
|
||||
tooff = from->start - to->start;
|
||||
- size = to->len - tooff;
|
||||
- if (size > (int) (from->len - fromoff))
|
||||
- size = from->len - fromoff;
|
||||
- if (size <= 0)
|
||||
+ if (fromoff >= from->len || tooff >= to->len)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ size = min_t(size_t, to->len - tooff, from->len - fromoff);
|
||||
+ if (size == 0)
|
||||
return -EINVAL;
|
||||
size *= sizeof(u16);
|
||||
|
||||
@@ -187,17 +188,18 @@ int fb_copy_cmap(const struct fb_cmap *f
|
||||
|
||||
int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to)
|
||||
{
|
||||
- int tooff = 0, fromoff = 0;
|
||||
- int size;
|
||||
+ unsigned int tooff = 0, fromoff = 0;
|
||||
+ size_t size;
|
||||
|
||||
if (to->start > from->start)
|
||||
fromoff = to->start - from->start;
|
||||
else
|
||||
tooff = from->start - to->start;
|
||||
- size = to->len - tooff;
|
||||
- if (size > (int) (from->len - fromoff))
|
||||
- size = from->len - fromoff;
|
||||
- if (size <= 0)
|
||||
+ if (fromoff >= from->len || tooff >= to->len)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ size = min_t(size_t, to->len - tooff, from->len - fromoff);
|
||||
+ if (size == 0)
|
||||
return -EINVAL;
|
||||
size *= sizeof(u16);
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From fd7c99142d77dc4a851879a66715abf12a3193fb Mon Sep 17 00:00:00 2001
|
||||
From: Dave Martin <Dave.Martin@arm.com>
|
||||
Date: Fri, 6 Jan 2017 17:54:51 +0000
|
||||
Subject: tile/ptrace: Preserve previous registers for short regset write
|
||||
|
||||
From: Dave Martin <Dave.Martin@arm.com>
|
||||
|
||||
commit fd7c99142d77dc4a851879a66715abf12a3193fb upstream.
|
||||
|
||||
Ensure that if userspace supplies insufficient data to
|
||||
PTRACE_SETREGSET to fill all the registers, the thread's old
|
||||
registers are preserved.
|
||||
|
||||
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
|
||||
Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
arch/tile/kernel/ptrace.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/tile/kernel/ptrace.c
|
||||
+++ b/arch/tile/kernel/ptrace.c
|
||||
@@ -111,7 +111,7 @@ static int tile_gpr_set(struct task_stru
|
||||
const void *kbuf, const void __user *ubuf)
|
||||
{
|
||||
int ret;
|
||||
- struct pt_regs regs;
|
||||
+ struct pt_regs regs = *task_pt_regs(target);
|
||||
|
||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, ®s, 0,
|
||||
sizeof(regs));
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
From 1cd6472e3f8d3fdee0fd19f7088807b284d3080f Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@redhat.com>
|
||||
Date: Thu, 1 Dec 2016 14:00:25 +0100
|
||||
Subject: [PATCH] tools build: Make fixdep parsing wait for last target
|
||||
|
||||
The fixdep tool, among other things, replaces the target of the object
|
||||
in the gcc generated dependency output file.
|
||||
|
||||
The parsing code assumes there's only single target in the rule but this
|
||||
is not always the case as described in here:
|
||||
|
||||
https://gcc.gnu.org/ml/gcc-help/2016-11/msg00099.html
|
||||
|
||||
Make the fixdep code smart enough to skip all the possible targets.
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
Acked-by: Peter Foley <pefoley2@pefoley.com>
|
||||
Cc: Wang Nan <wangnan0@huawei.com>
|
||||
Link: http://lkml.kernel.org/r/20161201130025.GA16430@krava
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/build/fixdep.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tools/build/fixdep.c b/tools/build/fixdep.c
|
||||
index 1521d36..734d154 100644
|
||||
--- a/tools/build/fixdep.c
|
||||
+++ b/tools/build/fixdep.c
|
||||
@@ -49,7 +49,7 @@ static void parse_dep_file(void *map, size_t len)
|
||||
char *end = m + len;
|
||||
char *p;
|
||||
char s[PATH_MAX];
|
||||
- int is_target;
|
||||
+ int is_target, has_target = 0;
|
||||
int saw_any_target = 0;
|
||||
int is_first_dep = 0;
|
||||
|
||||
@@ -67,7 +67,8 @@ static void parse_dep_file(void *map, size_t len)
|
||||
if (is_target) {
|
||||
/* The /next/ file is the first dependency */
|
||||
is_first_dep = 1;
|
||||
- } else {
|
||||
+ has_target = 1;
|
||||
+ } else if (has_target) {
|
||||
/* Save this token/filename */
|
||||
memcpy(s, m, p-m);
|
||||
s[p - m] = 0;
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+237
@@ -0,0 +1,237 @@
|
||||
From abb26210a39522a6645bce3f438ed9a26bedb11b Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@kernel.org>
|
||||
Date: Tue, 6 Dec 2016 14:18:49 +0100
|
||||
Subject: [PATCH] perf tools: Force fixdep compilation at the start of the
|
||||
build
|
||||
|
||||
The fixdep tool needs to be built before everything else, because it fixes
|
||||
every object dependency file.
|
||||
|
||||
We handle this currently by making all objects to depend on fixdep, which is
|
||||
error prone and is easily forgotten when new object is added.
|
||||
|
||||
Instead of this, this patch force fixdep tool to be built as the first target
|
||||
in the separate make session. This way we don't need to handle extra fixdep
|
||||
dependencies and we are certain there's no fixdep race with any parallel make
|
||||
job.
|
||||
|
||||
Committer notes:
|
||||
|
||||
Testing it:
|
||||
|
||||
Before:
|
||||
|
||||
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin
|
||||
make: Entering directory '/home/acme/git/linux/tools/perf'
|
||||
BUILD: Doing 'make -j4' parallel build
|
||||
|
||||
Auto-detecting system features:
|
||||
... dwarf: [ on ]
|
||||
... dwarf_getlocations: [ on ]
|
||||
... glibc: [ on ]
|
||||
... gtk2: [ on ]
|
||||
... libaudit: [ on ]
|
||||
... libbfd: [ on ]
|
||||
... libelf: [ on ]
|
||||
... libnuma: [ on ]
|
||||
... numa_num_possible_cpus: [ on ]
|
||||
... libperl: [ on ]
|
||||
... libpython: [ on ]
|
||||
... libslang: [ on ]
|
||||
... libcrypto: [ on ]
|
||||
... libunwind: [ on ]
|
||||
... libdw-dwarf-unwind: [ on ]
|
||||
... zlib: [ on ]
|
||||
... lzma: [ on ]
|
||||
... get_cpuid: [ on ]
|
||||
... bpf: [ on ]
|
||||
|
||||
GEN /tmp/build/perf/common-cmds.h
|
||||
HOSTCC /tmp/build/perf/fixdep.o
|
||||
HOSTLD /tmp/build/perf/fixdep-in.o
|
||||
LINK /tmp/build/perf/fixdep
|
||||
MKDIR /tmp/build/perf/pmu-events/
|
||||
HOSTCC /tmp/build/perf/pmu-events/json.o
|
||||
MKDIR /tmp/build/perf/pmu-events/
|
||||
HOSTCC /tmp/build/perf/pmu-events/jsmn.o
|
||||
HOSTCC /tmp/build/perf/pmu-events/jevents.o
|
||||
HOSTLD /tmp/build/perf/pmu-events/jevents-in.o
|
||||
PERF_VERSION = 4.9.rc8.g868cd5
|
||||
CC /tmp/build/perf/perf-read-vdso32
|
||||
<SNIP>
|
||||
|
||||
After:
|
||||
|
||||
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin
|
||||
make: Entering directory '/home/acme/git/linux/tools/perf'
|
||||
BUILD: Doing 'make -j4' parallel build
|
||||
HOSTCC /tmp/build/perf/fixdep.o
|
||||
HOSTLD /tmp/build/perf/fixdep-in.o
|
||||
LINK /tmp/build/perf/fixdep
|
||||
|
||||
Auto-detecting system features:
|
||||
... dwarf: [ on ]
|
||||
... dwarf_getlocations: [ on ]
|
||||
... glibc: [ on ]
|
||||
... gtk2: [ on ]
|
||||
... libaudit: [ on ]
|
||||
... libbfd: [ on ]
|
||||
... libelf: [ on ]
|
||||
... libnuma: [ on ]
|
||||
... numa_num_possible_cpus: [ on ]
|
||||
... libperl: [ on ]
|
||||
... libpython: [ on ]
|
||||
... libslang: [ on ]
|
||||
... libcrypto: [ on ]
|
||||
... libunwind: [ on ]
|
||||
... libdw-dwarf-unwind: [ on ]
|
||||
... zlib: [ on ]
|
||||
... lzma: [ on ]
|
||||
... get_cpuid: [ on ]
|
||||
... bpf: [ on ]
|
||||
|
||||
GEN /tmp/build/perf/common-cmds.h
|
||||
MKDIR /tmp/build/perf/fd/
|
||||
CC /tmp/build/perf/fd/array.o
|
||||
LD /tmp/build/perf/fd/libapi-in.o
|
||||
MKDIR /tmp/build/perf/fs/
|
||||
CC /tmp/build/perf/event-parse.o
|
||||
CC /tmp/build/perf/fs/fs.o
|
||||
PERF_VERSION = 4.9.rc8.g57a92f
|
||||
CC /tmp/build/perf/event-plugin.o
|
||||
MKDIR /tmp/build/perf/fs/
|
||||
CC /tmp/build/perf/fs/tracing_path.o
|
||||
<SNIP>
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
Cc: David Ahern <dsahern@gmail.com>
|
||||
Cc: Namhyung Kim <namhyung@kernel.org>
|
||||
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/r/1481030331-31944-3-git-send-email-jolsa@kernel.org
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/Makefile.perf | 50 ++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 38 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
|
||||
index 9e5a6e1..33b1d9f 100644
|
||||
--- a/tools/perf/Makefile.perf
|
||||
+++ b/tools/perf/Makefile.perf
|
||||
@@ -177,6 +177,35 @@ ifeq ($(filter-out $(NON_CONFIG_TARGETS)
|
||||
endif
|
||||
endif
|
||||
|
||||
+# The fixdep build - we force fixdep tool to be built as
|
||||
+# the first target in the separate make session not to be
|
||||
+# disturbed by any parallel make jobs. Once fixdep is done
|
||||
+# we issue the requested build with FIXDEP=1 variable.
|
||||
+#
|
||||
+# The fixdep build is disabled for $(NON_CONFIG_TARGETS)
|
||||
+# targets, because it's not necessary.
|
||||
+
|
||||
+ifdef FIXDEP
|
||||
+ force_fixdep := 0
|
||||
+else
|
||||
+ force_fixdep := $(config)
|
||||
+endif
|
||||
+
|
||||
+export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
|
||||
+export HOSTCC HOSTLD HOSTAR
|
||||
+
|
||||
+include $(srctree)/tools/build/Makefile.include
|
||||
+
|
||||
+ifeq ($(force_fixdep),1)
|
||||
+goals := $(filter-out all sub-make, $(MAKECMDGOALS))
|
||||
+
|
||||
+$(goals) all: sub-make
|
||||
+
|
||||
+sub-make: fixdep
|
||||
+ $(Q)$(MAKE) FIXDEP=1 -f Makefile.perf $(goals)
|
||||
+
|
||||
+else # force_fixdep
|
||||
+
|
||||
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
||||
# Without this setting the output feature dump file misses some features, for
|
||||
# example, liberty. Select all checkers so we won't get an incomplete feature
|
||||
@@ -348,10 +377,6 @@ strip: $(PROGRAMS) $(OUTPUT)perf
|
||||
|
||||
PERF_IN := $(OUTPUT)perf-in.o
|
||||
|
||||
-export srctree OUTPUT RM CC LD AR CFLAGS V BISON FLEX AWK
|
||||
-export HOSTCC HOSTLD HOSTAR
|
||||
-include $(srctree)/tools/build/Makefile.include
|
||||
-
|
||||
JEVENTS := $(OUTPUT)pmu-events/jevents
|
||||
JEVENTS_IN := $(OUTPUT)pmu-events/jevents-in.o
|
||||
|
||||
@@ -470,7 +495,7 @@ $(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(
|
||||
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS) \
|
||||
$(PERF_IN) $(PMU_EVENTS_IN) $(LIBS) -o $@
|
||||
|
||||
-$(GTK_IN): fixdep FORCE
|
||||
+$(GTK_IN): FORCE
|
||||
$(Q)$(MAKE) $(build)=gtk
|
||||
|
||||
$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
|
||||
@@ -515,7 +540,7 @@ endif
|
||||
__build-dir = $(subst $(OUTPUT),,$(dir $@))
|
||||
build-dir = $(if $(__build-dir),$(__build-dir),.)
|
||||
|
||||
-prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h fixdep archheaders
|
||||
+prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders
|
||||
|
||||
$(OUTPUT)%.o: %.c prepare FORCE
|
||||
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
|
||||
@@ -555,7 +580,7 @@ $(patsubst perf-%,%.o,$(PROGRAMS)): $(wi
|
||||
|
||||
LIBPERF_IN := $(OUTPUT)libperf-in.o
|
||||
|
||||
-$(LIBPERF_IN): prepare fixdep FORCE
|
||||
+$(LIBPERF_IN): prepare FORCE
|
||||
$(Q)$(MAKE) $(build)=libperf
|
||||
|
||||
$(LIB_FILE): $(LIBPERF_IN)
|
||||
@@ -563,10 +588,10 @@ $(LIB_FILE): $(LIBPERF_IN)
|
||||
|
||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
||||
|
||||
-$(LIBTRACEEVENT): fixdep FORCE
|
||||
+$(LIBTRACEEVENT): FORCE
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
||||
|
||||
-libtraceevent_plugins: fixdep FORCE
|
||||
+libtraceevent_plugins: FORCE
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) plugins
|
||||
|
||||
$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
|
||||
@@ -579,21 +604,21 @@ $(LIBTRACEEVENT)-clean:
|
||||
install-traceevent-plugins: libtraceevent_plugins
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) install_plugins
|
||||
|
||||
-$(LIBAPI): fixdep FORCE
|
||||
+$(LIBAPI): FORCE
|
||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
|
||||
|
||||
$(LIBAPI)-clean:
|
||||
$(call QUIET_CLEAN, libapi)
|
||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
|
||||
|
||||
-$(LIBBPF): fixdep FORCE
|
||||
+$(LIBBPF): FORCE
|
||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) $(OUTPUT)libbpf.a FEATURES_DUMP=$(FEATURE_DUMP_EXPORT)
|
||||
|
||||
$(LIBBPF)-clean:
|
||||
$(call QUIET_CLEAN, libbpf)
|
||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) clean >/dev/null
|
||||
|
||||
-$(LIBSUBCMD): fixdep FORCE
|
||||
+$(LIBSUBCMD): FORCE
|
||||
$(Q)$(MAKE) -C $(SUBCMD_DIR) O=$(OUTPUT) $(OUTPUT)libsubcmd.a
|
||||
|
||||
$(LIBSUBCMD)-clean:
|
||||
@@ -790,3 +815,4 @@ FORCE:
|
||||
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE prepare
|
||||
.PHONY: libtraceevent_plugins archheaders
|
||||
|
||||
+endif # force_fixdep
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From 8ac1eb7bab7c8d9d6f00b3e2a408611c45d9dff0 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@kernel.org>
|
||||
Date: Tue, 6 Dec 2016 14:18:50 +0100
|
||||
Subject: [PATCH] perf tools: Move perf build related variables under non
|
||||
fixdep leg
|
||||
|
||||
Because there's no need for them in fixdep build.
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Cc: David Ahern <dsahern@gmail.com>
|
||||
Cc: Namhyung Kim <namhyung@kernel.org>
|
||||
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/r/1481030331-31944-4-git-send-email-jolsa@kernel.org
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/Makefile.perf | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
|
||||
index 33b1d9f..8f1c258 100644
|
||||
--- a/tools/perf/Makefile.perf
|
||||
+++ b/tools/perf/Makefile.perf
|
||||
@@ -164,11 +164,6 @@ BISON = bison
|
||||
STRIP = strip
|
||||
AWK = awk
|
||||
|
||||
-LIB_DIR = $(srctree)/tools/lib/api/
|
||||
-TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
|
||||
-BPF_DIR = $(srctree)/tools/lib/bpf/
|
||||
-SUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
||||
-
|
||||
# include Makefile.config by default and rule out
|
||||
# non-config cases
|
||||
config := 1
|
||||
@@ -210,6 +205,11 @@ sub-make: fixdep
|
||||
|
||||
else # force_fixdep
|
||||
|
||||
+LIB_DIR = $(srctree)/tools/lib/api/
|
||||
+TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
|
||||
+BPF_DIR = $(srctree)/tools/lib/bpf/
|
||||
+SUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
||||
+
|
||||
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
||||
# Without this setting the output feature dump file misses some features, for
|
||||
# example, liberty. Select all checkers so we won't get an incomplete feature
|
||||
--
|
||||
2.10.2
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
*** ../bash-4.3-patched/shell.h 2012-12-25 21:11:01.000000000 -0500
|
||||
--- shell.h 2014-06-03 09:24:28.000000000 -0400
|
||||
***************
|
||||
*** 169,173 ****
|
||||
int expand_aliases;
|
||||
int echo_input_at_read;
|
||||
!
|
||||
} sh_parser_state_t;
|
||||
|
||||
--- 169,174 ----
|
||||
int expand_aliases;
|
||||
int echo_input_at_read;
|
||||
! int need_here_doc;
|
||||
!
|
||||
} sh_parser_state_t;
|
||||
|
||||
*** ../bash-4.3-patched/parse.y 2014-05-14 09:16:40.000000000 -0400
|
||||
--- parse.y 2014-04-30 09:27:59.000000000 -0400
|
||||
***************
|
||||
*** 2643,2647 ****
|
||||
|
||||
r = 0;
|
||||
! while (need_here_doc)
|
||||
{
|
||||
parser_state |= PST_HEREDOC;
|
||||
--- 2643,2647 ----
|
||||
|
||||
r = 0;
|
||||
! while (need_here_doc > 0)
|
||||
{
|
||||
parser_state |= PST_HEREDOC;
|
||||
***************
|
||||
*** 6076,6079 ****
|
||||
--- 6076,6080 ----
|
||||
ps->expand_aliases = expand_aliases;
|
||||
ps->echo_input_at_read = echo_input_at_read;
|
||||
+ ps->need_here_doc = need_here_doc;
|
||||
|
||||
ps->token = token;
|
||||
***************
|
||||
*** 6124,6127 ****
|
||||
--- 6125,6129 ----
|
||||
expand_aliases = ps->expand_aliases;
|
||||
echo_input_at_read = ps->echo_input_at_read;
|
||||
+ need_here_doc = ps->need_here_doc;
|
||||
|
||||
FREE (token);
|
||||
@@ -0,0 +1,24 @@
|
||||
*** ../bash-4.3-patched/execute_cmd.c 2014-01-31 10:54:52.000000000 -0500
|
||||
--- execute_cmd.c 2014-06-19 08:05:49.000000000 -0400
|
||||
***************
|
||||
*** 2410,2414 ****
|
||||
lstdin = wait_for (lastpid);
|
||||
#if defined (JOB_CONTROL)
|
||||
! exec_result = job_exit_status (lastpipe_jid);
|
||||
#endif
|
||||
unfreeze_jobs_list ();
|
||||
--- 2425,2438 ----
|
||||
lstdin = wait_for (lastpid);
|
||||
#if defined (JOB_CONTROL)
|
||||
! /* If wait_for removes the job from the jobs table, use result of last
|
||||
! command as pipeline's exit status as usual. The jobs list can get
|
||||
! frozen and unfrozen at inconvenient times if there are multiple pipelines
|
||||
! running simultaneously. */
|
||||
! if (INVALID_JOB (lastpipe_jid) == 0)
|
||||
! exec_result = job_exit_status (lastpipe_jid);
|
||||
! else if (pipefail_opt)
|
||||
! exec_result = exec_result | lstdin; /* XXX */
|
||||
! /* otherwise we use exec_result */
|
||||
!
|
||||
#endif
|
||||
unfreeze_jobs_list ();
|
||||
@@ -0,0 +1,15 @@
|
||||
diff --git a/doc/bash.1 b/doc/bash.1
|
||||
index 6e8aebb..e846e68 100644
|
||||
--- a/doc/bash.1
|
||||
+++ b/doc/bash.1
|
||||
@@ -10333,6 +10333,7 @@ and
|
||||
which are in 512-byte increments.
|
||||
The return status is 0 unless an invalid option or argument is supplied,
|
||||
or an error occurs while setting a new limit.
|
||||
+In POSIX Mode 512-byte blocks are used for the `-c' and `-f' options.
|
||||
.RE
|
||||
.TP
|
||||
\fBumask\fP [\fB\-p\fP] [\fB\-S\fP] [\fImode\fP]
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -up bash-4.3/locale.c.old bash-4.3/locale.c
|
||||
--- bash-4.3/locale.c.old 2015-07-15 11:55:00.002857301 +0200
|
||||
+++ bash-4.3/locale.c 2015-07-15 11:48:36.698086257 +0200
|
||||
@@ -77,8 +77,6 @@ set_default_locale ()
|
||||
{
|
||||
#if defined (HAVE_SETLOCALE)
|
||||
default_locale = setlocale (LC_ALL, "");
|
||||
- if (default_locale)
|
||||
- default_locale = savestring (default_locale);
|
||||
#endif /* HAVE_SETLOCALE */
|
||||
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
@@ -0,0 +1,46 @@
|
||||
diff --git a/parse.y b/parse.y
|
||||
index 30425a5..85f1c4f 100644
|
||||
--- a/parse.y
|
||||
+++ b/parse.y
|
||||
@@ -4228,6 +4228,8 @@ xparse_dolparen (base, string, indp, flags)
|
||||
save_parser_state (&ps);
|
||||
save_input_line_state (&ls);
|
||||
orig_eof_token = shell_eof_token;
|
||||
+ /* avoid echoing every substitution again */
|
||||
+ echo_input_at_read = 0;
|
||||
|
||||
/*(*/
|
||||
parser_state |= PST_CMDSUBST|PST_EOFTOKEN; /* allow instant ')' */ /*(*/
|
||||
diff --git a/subst.c b/subst.c
|
||||
index f1a4df1..a93a4ce 100644
|
||||
--- a/subst.c
|
||||
+++ b/subst.c
|
||||
@@ -8513,6 +8513,7 @@ param_expand (string, sindex, quoted, expanded_something,
|
||||
WORD_LIST *list;
|
||||
WORD_DESC *tdesc, *ret;
|
||||
int tflag;
|
||||
+ int old_echo_input;
|
||||
|
||||
/*itrace("param_expand: `%s' pflags = %d", string+*sindex, pflags);*/
|
||||
zindex = *sindex;
|
||||
@@ -8831,6 +8832,9 @@ arithsub:
|
||||
}
|
||||
|
||||
comsub:
|
||||
+ old_echo_input = echo_input_at_read;
|
||||
+ /* avoid echoing every substitution again */
|
||||
+ echo_input_at_read = 0;
|
||||
if (pflags & PF_NOCOMSUB)
|
||||
/* we need zindex+1 because string[zindex] == RPAREN */
|
||||
temp1 = substring (string, *sindex, zindex+1);
|
||||
@@ -8843,6 +8847,7 @@ comsub:
|
||||
}
|
||||
FREE (temp);
|
||||
temp = temp1;
|
||||
+ echo_input_at_read = old_echo_input;
|
||||
break;
|
||||
|
||||
/* Do POSIX.2d9-style arithmetic substitution. This will probably go
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
*** ../bash-4.3-patched/parse.y 2014-04-07 11:56:12.000000000 -0400
|
||||
--- parse.y 2014-06-11 10:25:53.000000000 -0400
|
||||
***************
|
||||
*** 2789,2797 ****
|
||||
case OR_OR:
|
||||
case '&':
|
||||
case DO:
|
||||
case THEN:
|
||||
case ELSE:
|
||||
case '{': /* } */
|
||||
! case '(': /* ) */
|
||||
case BANG: /* ! time pipeline */
|
||||
case TIME: /* time time pipeline */
|
||||
--- 2789,2802 ----
|
||||
case OR_OR:
|
||||
case '&':
|
||||
+ case WHILE:
|
||||
case DO:
|
||||
+ case UNTIL:
|
||||
+ case IF:
|
||||
case THEN:
|
||||
+ case ELIF:
|
||||
case ELSE:
|
||||
case '{': /* } */
|
||||
! case '(': /* )( */
|
||||
! case ')': /* only valid in case statement */
|
||||
case BANG: /* ! time pipeline */
|
||||
case TIME: /* time time pipeline */
|
||||
@@ -0,0 +1,18 @@
|
||||
*** ../bash-4.3-patched/lib/readline/misc.c 2012-09-01 18:03:11.000000000 -0400
|
||||
--- lib/readline/misc.c 2014-06-30 13:41:19.000000000 -0400
|
||||
***************
|
||||
*** 462,465 ****
|
||||
--- 462,466 ----
|
||||
/* Set up rl_line_buffer and other variables from history entry */
|
||||
rl_replace_from_history (entry, 0); /* entry->line is now current */
|
||||
+ entry->data = 0; /* entry->data is now current undo list */
|
||||
/* Undo all changes to this history entry */
|
||||
while (rl_undo_list)
|
||||
***************
|
||||
*** 469,473 ****
|
||||
FREE (entry->line);
|
||||
entry->line = savestring (rl_line_buffer);
|
||||
- entry->data = 0;
|
||||
}
|
||||
entry = previous_history ();
|
||||
--- 470,473 ----
|
||||
@@ -0,0 +1,15 @@
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index a1f9483..24c646a 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -800,7 +800,6 @@ install: .made installdirs
|
||||
infodir=$(infodir) htmldir=$(htmldir) DESTDIR=$(DESTDIR) $@ )
|
||||
-( cd $(DEFDIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
|
||||
-( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
|
||||
- -( cd $(LOADABLES_DIR) && $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
|
||||
|
||||
install-strip:
|
||||
$(MAKE) $(MFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
From 8ddc8d6e3a3d85eec6d4ba9b9ed2bc36bce56716 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Mon, 14 Nov 2016 14:26:51 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 1
|
||||
|
||||
---
|
||||
lib/readline/history.c | 6 +++++-
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/readline/history.c b/lib/readline/history.c
|
||||
index 3b8dbc5..9ff25a7 100644
|
||||
--- a/lib/readline/history.c
|
||||
+++ b/lib/readline/history.c
|
||||
@@ -57,6 +57,8 @@ extern int errno;
|
||||
/* How big to make the_history when we first allocate it. */
|
||||
#define DEFAULT_HISTORY_INITIAL_SIZE 502
|
||||
|
||||
+#define MAX_HISTORY_INITIAL_SIZE 8192
|
||||
+
|
||||
/* The number of slots to increase the_history by. */
|
||||
#define DEFAULT_HISTORY_GROW_SIZE 50
|
||||
|
||||
@@ -307,7 +309,9 @@ add_history (string)
|
||||
if (history_size == 0)
|
||||
{
|
||||
if (history_stifled && history_max_entries > 0)
|
||||
- history_size = history_max_entries + 2;
|
||||
+ history_size = (history_max_entries > MAX_HISTORY_INITIAL_SIZE)
|
||||
+ ? MAX_HISTORY_INITIAL_SIZE
|
||||
+ : history_max_entries + 2;
|
||||
else
|
||||
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
|
||||
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 1cd7c96..40db1a3 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 0
|
||||
+#define PATCHLEVEL 1
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From 5b9762d6f0cd36ff1b88bde22efa30ad0ed27ec6 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 15:38:38 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 10
|
||||
|
||||
---
|
||||
builtins/read.def | 3 ++-
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/builtins/read.def b/builtins/read.def
|
||||
index 48fda33..33821f3 100644
|
||||
--- a/builtins/read.def
|
||||
+++ b/builtins/read.def
|
||||
@@ -181,7 +181,8 @@ read_builtin (list)
|
||||
WORD_LIST *list;
|
||||
{
|
||||
register char *varname;
|
||||
- int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
|
||||
+ int size, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
|
||||
+ volatile int i;
|
||||
int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
|
||||
int raw, edit, nchars, silent, have_timeout, ignore_delim, fd, lastsig, t_errno;
|
||||
unsigned int tmsec, tmusec;
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 02f1d60..8002af7 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 9
|
||||
+#define PATCHLEVEL 10
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
From 76bb456d8fcd870cd31b7bf9d90798cd97cee2ab Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 15:38:49 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 11
|
||||
|
||||
---
|
||||
patchlevel.h | 2 +-
|
||||
sig.c | 3 ++-
|
||||
2 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 8002af7..772676c 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 10
|
||||
+#define PATCHLEVEL 11
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
diff --git a/sig.c b/sig.c
|
||||
index ad01631..e5bb739 100644
|
||||
--- a/sig.c
|
||||
+++ b/sig.c
|
||||
@@ -585,7 +585,8 @@ termsig_handler (sig)
|
||||
#if defined (JOB_CONTROL)
|
||||
if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB))))
|
||||
hangup_all_jobs ();
|
||||
- end_job_control ();
|
||||
+ if ((subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)) == 0)
|
||||
+ end_job_control ();
|
||||
#endif /* JOB_CONTROL */
|
||||
|
||||
#if defined (PROCESS_SUBSTITUTION)
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
From 280bd77d8d3e7f7c90c9fa07de3d1e8f8e18ac29 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Mon, 14 Nov 2016 14:27:06 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 2
|
||||
|
||||
---
|
||||
patchlevel.h | 2 +-
|
||||
subst.c | 9 ++++++++-
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 40db1a3..a988d85 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 1
|
||||
+#define PATCHLEVEL 2
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
diff --git a/subst.c b/subst.c
|
||||
index f1a4df1..4d498ef 100644
|
||||
--- a/subst.c
|
||||
+++ b/subst.c
|
||||
@@ -5931,6 +5931,7 @@ read_comsub (fd, quoted, rflag)
|
||||
char *istring, buf[128], *bufp, *s;
|
||||
int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul;
|
||||
ssize_t bufn;
|
||||
+ int nullbyte;
|
||||
|
||||
istring = (char *)NULL;
|
||||
istring_index = istring_size = bufn = tflag = 0;
|
||||
@@ -5938,6 +5939,8 @@ read_comsub (fd, quoted, rflag)
|
||||
for (skip_ctlesc = skip_ctlnul = 0, s = ifs_value; s && *s; s++)
|
||||
skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL;
|
||||
|
||||
+ nullbyte = 0;
|
||||
+
|
||||
/* Read the output of the command through the pipe. This may need to be
|
||||
changed to understand multibyte characters in the future. */
|
||||
while (1)
|
||||
@@ -5956,7 +5959,11 @@ read_comsub (fd, quoted, rflag)
|
||||
if (c == 0)
|
||||
{
|
||||
#if 1
|
||||
- internal_warning ("%s", _("command substitution: ignored null byte in input"));
|
||||
+ if (nullbyte == 0)
|
||||
+ {
|
||||
+ internal_warning ("%s", _("command substitution: ignored null byte in input"));
|
||||
+ nullbyte = 1;
|
||||
+ }
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From 4f59a8babc53a9f975078c4a003bdc8831c5ee22 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Mon, 14 Nov 2016 14:27:23 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 3
|
||||
|
||||
---
|
||||
lib/glob/sm_loop.c | 9 +++++++++
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/glob/sm_loop.c b/lib/glob/sm_loop.c
|
||||
index c3a2aa3..65179e2 100644
|
||||
--- a/lib/glob/sm_loop.c
|
||||
+++ b/lib/glob/sm_loop.c
|
||||
@@ -330,6 +330,12 @@ PARSE_COLLSYM (p, vp)
|
||||
for (pc = 0; p[pc]; pc++)
|
||||
if (p[pc] == L('.') && p[pc+1] == L(']'))
|
||||
break;
|
||||
+ if (p[pc] == 0)
|
||||
+ {
|
||||
+ if (vp)
|
||||
+ *vp = INVALID;
|
||||
+ return (p + pc);
|
||||
+ }
|
||||
val = COLLSYM (p, pc);
|
||||
if (vp)
|
||||
*vp = val;
|
||||
@@ -483,6 +489,9 @@ BRACKMATCH (p, test, flags)
|
||||
c = *p++;
|
||||
c = FOLD (c);
|
||||
|
||||
+ if (c == L('\0'))
|
||||
+ return ((test == L('[')) ? savep : (CHAR *)0);
|
||||
+
|
||||
if ((flags & FNM_PATHNAME) && c == L('/'))
|
||||
/* [/] can never match when matching a pathname. */
|
||||
return (CHAR *)0;
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index a988d85..e7e960c 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 2
|
||||
+#define PATCHLEVEL 3
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
From 2965eca924466a48c5597ac5c6c86d470e718908 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Mon, 14 Nov 2016 14:27:35 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 4
|
||||
|
||||
---
|
||||
jobs.c | 15 +++++++++++++++
|
||||
jobs.h | 1 +
|
||||
patchlevel.h | 2 +-
|
||||
subst.c | 5 +----
|
||||
4 files changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/jobs.c b/jobs.c
|
||||
index cef3c79..fc96603 100644
|
||||
--- a/jobs.c
|
||||
+++ b/jobs.c
|
||||
@@ -453,6 +453,21 @@ cleanup_the_pipeline ()
|
||||
discard_pipeline (disposer);
|
||||
}
|
||||
|
||||
+void
|
||||
+discard_last_procsub_child ()
|
||||
+{
|
||||
+ PROCESS *disposer;
|
||||
+ sigset_t set, oset;
|
||||
+
|
||||
+ BLOCK_CHILD (set, oset);
|
||||
+ disposer = last_procsub_child;
|
||||
+ last_procsub_child = (PROCESS *)NULL;
|
||||
+ UNBLOCK_CHILD (oset);
|
||||
+
|
||||
+ if (disposer)
|
||||
+ discard_pipeline (disposer);
|
||||
+}
|
||||
+
|
||||
struct pipeline_saver *
|
||||
alloc_pipeline_saver ()
|
||||
{
|
||||
diff --git a/jobs.h b/jobs.h
|
||||
index 4ba3513..6df0607 100644
|
||||
--- a/jobs.h
|
||||
+++ b/jobs.h
|
||||
@@ -190,6 +190,7 @@ extern JOB **jobs;
|
||||
extern void making_children __P((void));
|
||||
extern void stop_making_children __P((void));
|
||||
extern void cleanup_the_pipeline __P((void));
|
||||
+extern void discard_last_procsub_child __P((void));
|
||||
extern void save_pipeline __P((int));
|
||||
extern PROCESS *restore_pipeline __P((int));
|
||||
extern void start_pipeline __P((void));
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index e7e960c..c059f0b 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 3
|
||||
+#define PATCHLEVEL 4
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
diff --git a/subst.c b/subst.c
|
||||
index 4d498ef..298187d 100644
|
||||
--- a/subst.c
|
||||
+++ b/subst.c
|
||||
@@ -5808,10 +5808,7 @@ process_substitute (string, open_for_read_in_child)
|
||||
{
|
||||
#if defined (JOB_CONTROL)
|
||||
if (last_procsub_child)
|
||||
- {
|
||||
- discard_pipeline (last_procsub_child);
|
||||
- last_procsub_child = (PROCESS *)NULL;
|
||||
- }
|
||||
+ discard_last_procsub_child ();
|
||||
last_procsub_child = restore_pipeline (0);
|
||||
#endif
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
From f459cbd8be37b28be1dc90315e0ab51d7f211301 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Mon, 14 Nov 2016 14:27:55 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 5
|
||||
|
||||
---
|
||||
builtins/evalstring.c | 3 ---
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/builtins/evalstring.c b/builtins/evalstring.c
|
||||
index e221591..6dc756c 100644
|
||||
--- a/builtins/evalstring.c
|
||||
+++ b/builtins/evalstring.c
|
||||
@@ -104,12 +104,9 @@ should_suppress_fork (command)
|
||||
running_trap == 0 &&
|
||||
*bash_input.location.string == '\0' &&
|
||||
command->type == cm_simple &&
|
||||
-#if 0
|
||||
signal_is_trapped (EXIT_TRAP) == 0 &&
|
||||
signal_is_trapped (ERROR_TRAP) == 0 &&
|
||||
-#else
|
||||
any_signals_trapped () < 0 &&
|
||||
-#endif
|
||||
command->redirects == 0 && command->value.Simple->redirects == 0 &&
|
||||
((command->flags & CMD_TIME_PIPELINE) == 0) &&
|
||||
((command->flags & CMD_INVERT_RETURN) == 0));
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index c059f0b..1bc098b 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 4
|
||||
+#define PATCHLEVEL 5
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 44bfefc553993613c0aff992bc4f3078d738ee1d Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 11:47:31 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 6
|
||||
|
||||
---
|
||||
builtins/pushd.def | 7 ++++++-
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/builtins/pushd.def b/builtins/pushd.def
|
||||
index 82653c4..6579e4c 100644
|
||||
--- a/builtins/pushd.def
|
||||
+++ b/builtins/pushd.def
|
||||
@@ -365,7 +365,7 @@ popd_builtin (list)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (which > directory_list_offset || (directory_list_offset == 0 && which == 0))
|
||||
+ if (which > directory_list_offset || (which < -directory_list_offset) || (directory_list_offset == 0 && which == 0))
|
||||
{
|
||||
pushd_error (directory_list_offset, which_word ? which_word : "");
|
||||
return (EXECUTION_FAILURE);
|
||||
@@ -387,6 +387,11 @@ popd_builtin (list)
|
||||
remove that directory from the list and shift the remainder
|
||||
of the list into place. */
|
||||
i = (direction == '+') ? directory_list_offset - which : which;
|
||||
+ if (i < 0 || i > directory_list_offset)
|
||||
+ {
|
||||
+ pushd_error (directory_list_offset, which_word ? which_word : "");
|
||||
+ return (EXECUTION_FAILURE);
|
||||
+ }
|
||||
free (pushd_directory_list[i]);
|
||||
directory_list_offset--;
|
||||
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 1bc098b..14bff9f 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 5
|
||||
+#define PATCHLEVEL 6
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
From 4f747edc625815f449048579f6e65869914dd715 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 11:47:55 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 7
|
||||
|
||||
---
|
||||
bashline.c | 22 ++++++++++++----------
|
||||
patchlevel.h | 2 +-
|
||||
subst.c | 4 ++++
|
||||
3 files changed, 17 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/bashline.c b/bashline.c
|
||||
index f4fe9f1..0275844 100644
|
||||
--- a/bashline.c
|
||||
+++ b/bashline.c
|
||||
@@ -142,7 +142,7 @@ static int executable_completion __P((const char *, int));
|
||||
static rl_icppfunc_t *save_directory_hook __P((void));
|
||||
static void restore_directory_hook __P((rl_icppfunc_t));
|
||||
|
||||
-static int directory_exists __P((const char *));
|
||||
+static int directory_exists __P((const char *, int));
|
||||
|
||||
static void cleanup_expansion_error __P((void));
|
||||
static void maybe_make_readline_line __P((char *));
|
||||
@@ -3102,18 +3102,20 @@ restore_directory_hook (hookf)
|
||||
rl_directory_rewrite_hook = hookf;
|
||||
}
|
||||
|
||||
-/* Check whether not the (dequoted) version of DIRNAME, with any trailing slash
|
||||
- removed, exists. */
|
||||
+/* Check whether not DIRNAME, with any trailing slash removed, exists. If
|
||||
+ SHOULD_DEQUOTE is non-zero, we dequote the directory name first. */
|
||||
static int
|
||||
-directory_exists (dirname)
|
||||
+directory_exists (dirname, should_dequote)
|
||||
const char *dirname;
|
||||
+ int should_dequote;
|
||||
{
|
||||
char *new_dirname;
|
||||
int dirlen, r;
|
||||
struct stat sb;
|
||||
|
||||
- /* First, dequote the directory name */
|
||||
- new_dirname = bash_dequote_filename ((char *)dirname, rl_completion_quote_character);
|
||||
+ /* We save the string and chop the trailing slash because stat/lstat behave
|
||||
+ inconsistently if one is present. */
|
||||
+ new_dirname = should_dequote ? bash_dequote_filename ((char *)dirname, rl_completion_quote_character) : savestring (dirname);
|
||||
dirlen = STRLEN (new_dirname);
|
||||
if (new_dirname[dirlen - 1] == '/')
|
||||
new_dirname[dirlen - 1] = '\0';
|
||||
@@ -3145,7 +3147,7 @@ bash_filename_stat_hook (dirname)
|
||||
else if (t = mbschr (local_dirname, '`')) /* XXX */
|
||||
should_expand_dirname = '`';
|
||||
|
||||
- if (should_expand_dirname && directory_exists (local_dirname))
|
||||
+ if (should_expand_dirname && directory_exists (local_dirname, 0))
|
||||
should_expand_dirname = 0;
|
||||
|
||||
if (should_expand_dirname)
|
||||
@@ -3155,7 +3157,7 @@ bash_filename_stat_hook (dirname)
|
||||
have to worry about restoring this setting. */
|
||||
global_nounset = unbound_vars_is_error;
|
||||
unbound_vars_is_error = 0;
|
||||
- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
|
||||
+ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
|
||||
unbound_vars_is_error = global_nounset;
|
||||
if (wl)
|
||||
{
|
||||
@@ -3244,13 +3246,13 @@ bash_directory_completion_hook (dirname)
|
||||
should_expand_dirname = '`';
|
||||
}
|
||||
|
||||
- if (should_expand_dirname && directory_exists (local_dirname))
|
||||
+ if (should_expand_dirname && directory_exists (local_dirname, 1))
|
||||
should_expand_dirname = 0;
|
||||
|
||||
if (should_expand_dirname)
|
||||
{
|
||||
new_dirname = savestring (local_dirname);
|
||||
- wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */
|
||||
+ wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_NOPROCSUB|W_COMPLETE); /* does the right thing */
|
||||
if (wl)
|
||||
{
|
||||
*dirname = string_list (wl);
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 14bff9f..deb9c5b 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 6
|
||||
+#define PATCHLEVEL 7
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
diff --git a/subst.c b/subst.c
|
||||
index 298187d..027a13e 100644
|
||||
--- a/subst.c
|
||||
+++ b/subst.c
|
||||
@@ -9458,6 +9458,10 @@ add_twochars:
|
||||
tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */
|
||||
if (word->flags & W_COMPLETE)
|
||||
tword->flags |= W_COMPLETE; /* for command substitutions */
|
||||
+ if (word->flags & W_NOCOMSUB)
|
||||
+ tword->flags |= W_NOCOMSUB;
|
||||
+ if (word->flags & W_NOPROCSUB)
|
||||
+ tword->flags |= W_NOPROCSUB;
|
||||
|
||||
temp = (char *)NULL;
|
||||
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
From b9f81c2977b82490cd4dc70b0bb292bfbf86bd2c Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 15:38:10 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 8
|
||||
|
||||
---
|
||||
expr.c | 15 +++++++++------
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/expr.c b/expr.c
|
||||
index 1ddb693..172964a 100644
|
||||
--- a/expr.c
|
||||
+++ b/expr.c
|
||||
@@ -578,24 +578,23 @@ expcond ()
|
||||
rval = cval = explor ();
|
||||
if (curtok == QUES) /* found conditional expr */
|
||||
{
|
||||
- readtok ();
|
||||
- if (curtok == 0 || curtok == COL)
|
||||
- evalerror (_("expression expected"));
|
||||
if (cval == 0)
|
||||
{
|
||||
set_noeval = 1;
|
||||
noeval++;
|
||||
}
|
||||
|
||||
+ readtok ();
|
||||
+ if (curtok == 0 || curtok == COL)
|
||||
+ evalerror (_("expression expected"));
|
||||
+
|
||||
val1 = EXP_HIGHEST ();
|
||||
|
||||
if (set_noeval)
|
||||
noeval--;
|
||||
if (curtok != COL)
|
||||
evalerror (_("`:' expected for conditional expression"));
|
||||
- readtok ();
|
||||
- if (curtok == 0)
|
||||
- evalerror (_("expression expected"));
|
||||
+
|
||||
set_noeval = 0;
|
||||
if (cval)
|
||||
{
|
||||
@@ -603,7 +602,11 @@ expcond ()
|
||||
noeval++;
|
||||
}
|
||||
|
||||
+ readtok ();
|
||||
+ if (curtok == 0)
|
||||
+ evalerror (_("expression expected"));
|
||||
val2 = expcond ();
|
||||
+
|
||||
if (set_noeval)
|
||||
noeval--;
|
||||
rval = cval ? val1 : val2;
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index deb9c5b..16c8740 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 7
|
||||
+#define PATCHLEVEL 8
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
From e59fb114e9c0436890d110cfdda4d794a63496e7 Mon Sep 17 00:00:00 2001
|
||||
From: Chet Ramey <chet.ramey@case.edu>
|
||||
Date: Fri, 20 Jan 2017 15:38:29 -0500
|
||||
Subject: [PATCH] Bash-4.4 patch 9
|
||||
|
||||
---
|
||||
lib/readline/history.c | 16 +++++++---------
|
||||
patchlevel.h | 2 +-
|
||||
2 files changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/lib/readline/history.c b/lib/readline/history.c
|
||||
index 9ff25a7..129c57a 100644
|
||||
--- a/lib/readline/history.c
|
||||
+++ b/lib/readline/history.c
|
||||
@@ -279,6 +279,7 @@ add_history (string)
|
||||
const char *string;
|
||||
{
|
||||
HIST_ENTRY *temp;
|
||||
+ int new_length;
|
||||
|
||||
if (history_stifled && (history_length == history_max_entries))
|
||||
{
|
||||
@@ -295,13 +296,9 @@ add_history (string)
|
||||
|
||||
/* Copy the rest of the entries, moving down one slot. Copy includes
|
||||
trailing NULL. */
|
||||
-#if 0
|
||||
- for (i = 0; i < history_length; i++)
|
||||
- the_history[i] = the_history[i + 1];
|
||||
-#else
|
||||
memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *));
|
||||
-#endif
|
||||
|
||||
+ new_length = history_length;
|
||||
history_base++;
|
||||
}
|
||||
else
|
||||
@@ -315,7 +312,7 @@ add_history (string)
|
||||
else
|
||||
history_size = DEFAULT_HISTORY_INITIAL_SIZE;
|
||||
the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *));
|
||||
- history_length = 1;
|
||||
+ new_length = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -325,14 +322,15 @@ add_history (string)
|
||||
the_history = (HIST_ENTRY **)
|
||||
xrealloc (the_history, history_size * sizeof (HIST_ENTRY *));
|
||||
}
|
||||
- history_length++;
|
||||
+ new_length = history_length + 1;
|
||||
}
|
||||
}
|
||||
|
||||
temp = alloc_history_entry ((char *)string, hist_inittime ());
|
||||
|
||||
- the_history[history_length] = (HIST_ENTRY *)NULL;
|
||||
- the_history[history_length - 1] = temp;
|
||||
+ the_history[new_length] = (HIST_ENTRY *)NULL;
|
||||
+ the_history[new_length - 1] = temp;
|
||||
+ history_length = new_length;
|
||||
}
|
||||
|
||||
/* Change the time stamp of the most recent history entry to STRING. */
|
||||
diff --git a/patchlevel.h b/patchlevel.h
|
||||
index 16c8740..02f1d60 100644
|
||||
--- a/patchlevel.h
|
||||
+++ b/patchlevel.h
|
||||
@@ -25,6 +25,6 @@
|
||||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
-#define PATCHLEVEL 8
|
||||
+#define PATCHLEVEL 9
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
diff -up wrk/doc/bc.1.wrk wrk/doc/bc.1
|
||||
--- wrk/doc/bc.1.wrk 2013-10-02 13:36:52.066295450 +0200
|
||||
+++ wrk/doc/bc.1 2013-10-02 13:35:22.738553712 +0200
|
||||
@@ -174,6 +174,8 @@ The result of the expression is the sum
|
||||
The result of the expression is the difference of the two expressions.
|
||||
.IP "expr * expr"
|
||||
The result of the expression is the product of the two expressions.
|
||||
+If a and b are the scales of the two expressions, then the scale of the result is:
|
||||
+min(a+b,max(scale,a,b))
|
||||
.IP "expr / expr"
|
||||
The result of the expression is the quotient of the two expressions.
|
||||
The scale of the result is the value of the variable \fBscale\fR.
|
||||
diff -up wrk/doc/bc.texi.wrk wrk/doc/bc.texi
|
||||
--- wrk/doc/bc.texi.wrk 2013-10-02 13:17:01.743765518 +0200
|
||||
+++ wrk/doc/bc.texi 2013-10-02 13:21:04.479870656 +0200
|
||||
@@ -290,6 +290,8 @@ The result of the expression is the diff
|
||||
|
||||
@item expr * expr
|
||||
The result of the expression is the product of the two expressions.
|
||||
+If a and b are the scales of the two expressions, then the scale of the result is:
|
||||
+min(a+b,max(@var{scale},a,b))
|
||||
|
||||
@item expr / expr
|
||||
The result of the expression is the quotient of the two expressions.
|
||||
@@ -0,0 +1,27 @@
|
||||
Binary files bc-1.06.95-orig/dc/.dc.c.swp and bc-1.06.95/dc/.dc.c.swp differ
|
||||
diff -urNp bc-1.06.95-orig/dc/eval.c bc-1.06.95/dc/eval.c
|
||||
--- bc-1.06.95-orig/dc/eval.c 2006-06-04 13:04:40.000000000 +0200
|
||||
+++ bc-1.06.95/dc/eval.c 2011-09-08 15:11:48.815060585 +0200
|
||||
@@ -661,7 +661,9 @@ dc_evalfile DC_DECLARG((fp))
|
||||
int next_negcmp = 0;
|
||||
dc_data datum;
|
||||
|
||||
- signal(SIGINT, dc_trap_interrupt);
|
||||
+ /* Do not mask SIGINT when running from stdin */
|
||||
+ if (fp != stdin)
|
||||
+ signal(SIGINT, dc_trap_interrupt);
|
||||
stdin_lookahead = EOF;
|
||||
for (c=getc(fp); c!=EOF; c=peekc){
|
||||
peekc = getc(fp);
|
||||
diff -urNp bc-1.06.95-orig/doc/dc.texi bc-1.06.95/doc/dc.texi
|
||||
--- bc-1.06.95-orig/doc/dc.texi 2006-06-11 10:15:54.000000000 +0200
|
||||
+++ bc-1.06.95/doc/dc.texi 2011-09-08 15:09:37.032059798 +0200
|
||||
@@ -126,6 +126,8 @@ To exit, use @samp{q}.
|
||||
(or whatever other keystroke your system uses to generate a @code{SIGINT})
|
||||
does not exit;
|
||||
it is used to abort macros that are looping, etc.
|
||||
+This is not true if running on stdin to prevent accidental user confusion
|
||||
+about @kbd{C-c} unfunctionality.
|
||||
|
||||
A reverse-polish calculator stores numbers on a stack.
|
||||
Entering a number pushes it on the stack.
|
||||
@@ -0,0 +1,32 @@
|
||||
From c1704a34745f8e49373eb2cbe1c83199ab2d0091 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Frysinger <vapier@gentoo.org>
|
||||
Date: Fri, 9 Dec 2016 18:14:12 -0500
|
||||
Subject: [PATCH] setfiles: fix build failure after common_bufsiz change
|
||||
|
||||
Commit 47cfbf32fd66563f8c4e09ad6cced6abfbe2fad5 ("*: add most of the
|
||||
required setup_common_bufsiz() calls") switched this tool over to use
|
||||
the common_bufsiz logic but missed including the header leading to a
|
||||
build failure when enabled:
|
||||
selinux/setfiles.c:80:30: error: 'bb_common_bufsiz1' undeclared (first use in this function)
|
||||
|
||||
URL: https://bugs.gentoo.org/600106
|
||||
Reported-by: Jonas Jelten <jj@stusta.net>
|
||||
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
|
||||
(cherry picked from commit 1cda8790803a6fb072375c8fa53273333d2d4607)
|
||||
---
|
||||
selinux/setfiles.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/selinux/setfiles.c b/selinux/setfiles.c
|
||||
index 51a7e63bd741..d8083d4fd580 100644
|
||||
--- a/selinux/setfiles.c
|
||||
+++ b/selinux/setfiles.c
|
||||
@@ -46,6 +46,7 @@
|
||||
//usage: "\n if it has changed"
|
||||
|
||||
#include "libbb.h"
|
||||
+#include "common_bufsiz.h"
|
||||
#if ENABLE_FEATURE_SETFILES_CHECK_OPTION
|
||||
#include <sepol/sepol.h>
|
||||
#endif
|
||||
--
|
||||
Reference in New Issue
Block a user