--- /dev/null
+From fc363413ef8ea842ae7a99e3caf5465dafdd3a49 Mon Sep 17 00:00:00 2001
+From: Haibo Chen <haibo.chen@nxp.com>
+Date: Wed, 18 Oct 2023 11:00:17 +0200
+Subject: gpio: vf610: set value before the direction to avoid a glitch
+
+From: Haibo Chen <haibo.chen@nxp.com>
+
+commit fc363413ef8ea842ae7a99e3caf5465dafdd3a49 upstream.
+
+We found a glitch when configuring the pad as output high. To avoid this
+glitch, move the data value setting before direction config in the
+function vf610_gpio_direction_output().
+
+Fixes: 659d8a62311f ("gpio: vf610: add imx7ulp support")
+Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
+[Bartosz: tweak the commit message]
+Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpio/gpio-vf610.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpio/gpio-vf610.c
++++ b/drivers/gpio/gpio-vf610.c
+@@ -127,14 +127,14 @@ static int vf610_gpio_direction_output(s
+ unsigned long mask = BIT(gpio);
+ u32 val;
+
++ vf610_gpio_set(chip, gpio, value);
++
+ if (port->sdata && port->sdata->have_paddr) {
+ val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR);
+ val |= mask;
+ vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR);
+ }
+
+- vf610_gpio_set(chip, gpio, value);
+-
+ return pinctrl_gpio_direction_output(chip->base + gpio);
+ }
+
+++ /dev/null
-From b022f0c7e404887a7c5229788fc99eff9f9a80d5 Mon Sep 17 00:00:00 2001
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Fri, 20 Oct 2023 13:42:49 +0300
-Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 upstream.
-
-When a kprobe is attached to a function that's name is not unique (is
-static and shares the name with other functions in the kernel), the
-kprobe is attached to the first function it finds. This is a bug as the
-function that it is attaching to is not necessarily the one that the
-user wants to attach to.
-
-Instead of blindly picking a function to attach to what is ambiguous,
-error with EADDRNOTAVAIL to let the user know that this function is not
-unique, and that the user must use another unique function with an
-address offset to get to the function they want to attach to.
-
-Link: https://lore.kernel.org/all/20231020104250.9537-2-flaniel@linux.microsoft.com/
-
-Cc: stable@vger.kernel.org
-Fixes: 413d37d1eb69 ("tracing: Add kprobe-based event tracer")
-Suggested-by: Masami Hiramatsu <mhiramat@kernel.org>
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/trace/trace_kprobe.c | 63 +++++++++++++++++++++++++++++++++++++
- kernel/trace/trace_probe.h | 1 +
- 2 files changed, 64 insertions(+)
-
-diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
-index 3d7a180a8427..a8fef6ab0872 100644
---- a/kernel/trace/trace_kprobe.c
-+++ b/kernel/trace/trace_kprobe.c
-@@ -705,6 +705,25 @@ static struct notifier_block trace_kprobe_module_nb = {
- .priority = 1 /* Invoked after kprobe module callback */
- };
-
-+static int count_symbols(void *data, unsigned long unused)
-+{
-+ unsigned int *count = data;
-+
-+ (*count)++;
-+
-+ return 0;
-+}
-+
-+static unsigned int number_of_same_symbols(char *func_name)
-+{
-+ unsigned int count;
-+
-+ count = 0;
-+ kallsyms_on_each_match_symbol(count_symbols, func_name, &count);
-+
-+ return count;
-+}
-+
- static int __trace_kprobe_create(int argc, const char *argv[])
- {
- /*
-@@ -836,6 +855,31 @@ static int __trace_kprobe_create(int argc, const char *argv[])
- }
- }
-
-+ if (symbol && !strchr(symbol, ':')) {
-+ unsigned int count;
-+
-+ count = number_of_same_symbols(symbol);
-+ if (count > 1) {
-+ /*
-+ * Users should use ADDR to remove the ambiguity of
-+ * using KSYM only.
-+ */
-+ trace_probe_log_err(0, NON_UNIQ_SYMBOL);
-+ ret = -EADDRNOTAVAIL;
-+
-+ goto error;
-+ } else if (count == 0) {
-+ /*
-+ * We can return ENOENT earlier than when register the
-+ * kprobe.
-+ */
-+ trace_probe_log_err(0, BAD_PROBE_ADDR);
-+ ret = -ENOENT;
-+
-+ goto error;
-+ }
-+ }
-+
- trace_probe_log_set_index(0);
- if (event) {
- ret = traceprobe_parse_event_name(&event, &group, gbuf,
-@@ -1695,6 +1739,7 @@ static int unregister_kprobe_event(struct trace_kprobe *tk)
- }
-
- #ifdef CONFIG_PERF_EVENTS
-+
- /* create a trace_kprobe, but don't add it to global lists */
- struct trace_event_call *
- create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
-@@ -1705,6 +1750,24 @@ create_local_trace_kprobe(char *func, void *addr, unsigned long offs,
- int ret;
- char *event;
-
-+ if (func) {
-+ unsigned int count;
-+
-+ count = number_of_same_symbols(func);
-+ if (count > 1)
-+ /*
-+ * Users should use addr to remove the ambiguity of
-+ * using func only.
-+ */
-+ return ERR_PTR(-EADDRNOTAVAIL);
-+ else if (count == 0)
-+ /*
-+ * We can return ENOENT earlier than when register the
-+ * kprobe.
-+ */
-+ return ERR_PTR(-ENOENT);
-+ }
-+
- /*
- * local trace_kprobes are not added to dyn_event, so they are never
- * searched in find_trace_kprobe(). Therefore, there is no concern of
-diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
-index 02b432ae7513..850d9ecb6765 100644
---- a/kernel/trace/trace_probe.h
-+++ b/kernel/trace/trace_probe.h
-@@ -450,6 +450,7 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call,
- C(BAD_MAXACT, "Invalid maxactive number"), \
- C(MAXACT_TOO_BIG, "Maxactive is too big"), \
- C(BAD_PROBE_ADDR, "Invalid probed address or symbol"), \
-+ C(NON_UNIQ_SYMBOL, "The symbol is not unique"), \
- C(BAD_RETPROBE, "Retprobe address must be an function entry"), \
- C(NO_TRACEPOINT, "Tracepoint is not found"), \
- C(BAD_ADDR_SUFFIX, "Invalid probed address suffix"), \
---
-2.42.0
-