* Re: [PATCH RFC v2] MAINTAINERS: split out s390x sections
From: Eric Farman @ 2022-01-05 18:27 UTC (permalink / raw)
To: Cornelia Huck, qemu-devel, qemu-s390x
Cc: Thomas Huth, David Hildenbrand, Richard Henderson, Halil Pasic,
Christian Borntraeger, Christian Borntraeger,
Philippe Mathieu-Daudé
In-Reply-To: <20211222105548.356852-1-cohuck@redhat.com>
On Wed, 2021-12-22 at 11:55 +0100, Cornelia Huck wrote:
> Split out some more specialized devices etc., so that we can build
> smarter lists of people to be put on cc: in the future.
>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Acked-by: David Hildenbrand <david@redhat.com>
> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Acked-by: Thomas Huth <thuth@redhat.com>
> Acked-by: Halil Pasic <pasic@linux.ibm.com>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
(Late to the party, Happy New Year!) I like the rearrangement:
Acked-by: Eric Farman <farman@linux.ibm.com>
Of course, you also said in v1:
"""
- The new sections have inherited the maintainers of the sections
they have been split out of (except where people had already
volunteered). That's easy to change, obviously, and I hope that
the cc: list already contains people who might have interest in
volunteering for some sections.
"""
As someone on cc, I could volunteer to help with these sections:
S390 Machines
-------------
S390 Virtio-ccw
S390 channel subsystem
Devices
-------
virtio-ccw
> ---
>
> v1->v2: move some sections to "Devices", some minor tweaks
>
> I guess that can go with the next set of s390x patches.
>
> ---
> MAINTAINERS | 85 ++++++++++++++++++++++++++++++++++++++++++++++-----
> --
> 1 file changed, 74 insertions(+), 11 deletions(-)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 5dcefc0d012a..e4d88f7eb2ba 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -297,7 +297,6 @@ M: David Hildenbrand <david@redhat.com>
> S: Maintained
> F: target/s390x/
> F: target/s390x/tcg
> -F: target/s390x/cpu_models_*.[ch]
> F: hw/s390x/
> F: disas/s390.c
> F: tests/tcg/s390x/
> @@ -396,16 +395,10 @@ M: Halil Pasic <pasic@linux.ibm.com>
> M: Christian Borntraeger <borntraeger@linux.ibm.com>
> S: Supported
> F: target/s390x/kvm/
> -F: target/s390x/ioinst.[ch]
> F: target/s390x/machine.c
> F: target/s390x/sigp.c
> -F: target/s390x/cpu_features*.[ch]
> -F: target/s390x/cpu_models.[ch]
> F: hw/s390x/pv.c
> F: include/hw/s390x/pv.h
> -F: hw/intc/s390_flic.c
> -F: hw/intc/s390_flic_kvm.c
> -F: include/hw/s390x/s390_flic.h
> F: gdb-xml/s390*.xml
> T: git https://github.com/borntraeger/qemu.git s390-next
> L: qemu-s390x@nongnu.org
> @@ -1529,12 +1522,8 @@ S390 Virtio-ccw
> M: Halil Pasic <pasic@linux.ibm.com>
> M: Christian Borntraeger <borntraeger@linux.ibm.com>
> S: Supported
> -F: hw/char/sclp*.[hc]
> -F: hw/char/terminal3270.c
> F: hw/s390x/
> F: include/hw/s390x/
> -F: hw/watchdog/wdt_diag288.c
> -F: include/hw/watchdog/wdt_diag288.h
> F: configs/devices/s390x-softmmu/default.mak
> F: tests/avocado/machine_s390_ccw_virtio.py
> T: git https://github.com/borntraeger/qemu.git s390-next
> @@ -1559,6 +1548,37 @@ F: hw/s390x/s390-pci*
> F: include/hw/s390x/s390-pci*
> L: qemu-s390x@nongnu.org
>
> +S390 channel subsystem
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Supported
> +F: hw/s390x/ccw-device.[ch]
> +F: hw/s390x/css.c
> +F: hw/s390x/css-bridge.c
> +F: include/hw/s390x/css.h
> +F: include/hw/s390x/css-bridge.h
> +F: include/hw/s390x/ioinst.h
> +F: target/s390x/ioinst.c
> +L: qemu-s390x@nongnu.org
> +
> +S390 CPU models
> +M: David Hildenbrand <david@redhat.com>
> +S: Maintained
> +F: target/s390x/cpu_features*.[ch]
> +F: target/s390x/cpu_models.[ch]
> +L: qemu-s390x@nongnu.org
> +
> +S390 SCLP-backed devices
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Supported
> +F: include/hw/s390x/event-facility.h
> +F: include/hw/s390x/sclp.h
> +F: hw/char/sclp*.[hc]
> +F: hw/s390x/event-facility.c
> +F: hw/s390x/sclp*.c
> +L: qemu-s390x@nongnu.org
> +
> X86 Machines
> ------------
> PC
> @@ -1957,6 +1977,7 @@ M: Halil Pasic <pasic@linux.ibm.com>
> S: Supported
> F: hw/s390x/virtio-ccw*.[hc]
> F: hw/s390x/vhost-vsock-ccw.c
> +F: hw/s390x/vhost-user-fs-ccw.c
> T: git https://gitlab.com/cohuck/qemu.git s390-next
> T: git https://github.com/borntraeger/qemu.git s390-next
> L: qemu-s390x@nongnu.org
> @@ -2295,6 +2316,48 @@ F: hw/timer/mips_gictimer.c
> F: include/hw/intc/mips_gic.h
> F: include/hw/timer/mips_gictimer.h
>
> +S390 3270 device
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Odd fixes
> +F: include/hw/s390x/3270-ccw.h
> +F: hw/char/terminal3270.c
> +F: hw/s390x/3270-ccw.c
> +L: qemu-s390x@nongnu.org
> +
> +S390 diag 288 watchdog
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Supported
> +F: hw/watchdog/wdt_diag288.c
> +F: include/hw/watchdog/wdt_diag288.h
> +L: qemu-s390x@nongnu.org
> +
> +S390 storage key device
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Supported
> +F: hw/s390x/storage-keys.h
> +F: hw/390x/s390-skeys*.c
> +L: qemu-s390x@nongnu.org
> +
> +S390 storage attribute device
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +S: Supported
> +F: hw/s390x/storage-attributes.h
> +F: hw/s390/s390-stattrib*.c
> +L: qemu-s390x@nongnu.org
> +
> +S390 floating interrupt controller
> +M: Halil Pasic <pasic@linux.ibm.com>
> +M: Christian Borntraeger <borntraeger@linux.ibm.com>
> +M: David Hildenbrand <david@redhat.com>
> +S: Supported
> +F: hw/intc/s390_flic*.c
> +F: include/hw/s390x/s390_flic.h
> +L: qemu-s390x@nongnu.org
> +
> Subsystems
> ----------
> Overall Audio backends
^ permalink raw reply
* [PATCH v2 0/6] DEV_PM_OPS macros rework v2
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil
Hi,
A V2 of my patchset that tweaks a bit the *_DEV_PM_OPS() macros that
were introduced recently.
Changes since V1:
- Previous patches [2/8], [6/8] and [7/8] were merged together to [2/6]
to create an atomic patch.
- Remove useless empty line in patch [3/8] (now [3/6])
- Remove the patch that updated the mpu3050 driver, since it wasn't a
very good example.
- Update the bmp280 pressure sensor driver to use
EXPORT_RUNTIME_DEV_PM_OPS(), which should be a much better showcase
than the mpu3050.
Cheers,
-Paul
Paul Cercueil (6):
PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro
PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro
PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros
iio: pressure: bmp280: Use new PM macros
drivers/iio/pressure/bmp280-core.c | 11 ++-----
drivers/iio/pressure/bmp280-i2c.c | 2 +-
drivers/iio/pressure/bmp280-spi.c | 2 +-
drivers/mmc/host/jz4740_mmc.c | 4 +--
drivers/mmc/host/mxcmmc.c | 2 +-
include/linux/pm.h | 52 +++++++++++++++++++++---------
include/linux/pm_runtime.h | 21 ++++++++++++
7 files changed, 65 insertions(+), 29 deletions(-)
--
2.34.1
^ permalink raw reply
* [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
Jonathan Cameron
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided callbacks
for both runtime PM and system sleep, which is very likely to be a
mistake, as a system sleep can be triggered while a given device is
already PM-suspended, which would cause the suspend callback to be
called twice.
The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
occurences) compared to the number of places where
SET_SYSTEM_SLEEP_PM_OPS() is used with pm_runtime_force_suspend() and
pm_runtime_force_resume(), which makes me think that none of these cases
are actually valid.
As this macro is currently unused, remove it before someone starts to
use it in yet another invalid case.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Notes:
v2: No change
include/linux/pm.h | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
diff --git a/include/linux/pm.h b/include/linux/pm.h
index e1e9402180b9..31bbaafb06d2 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
}
+/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
+#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+const struct dev_pm_ops __maybe_unused name = { \
+ SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+}
+
/*
* Use this for defining a set of PM operations to be used in all situations
* (system suspend, hibernation or runtime PM).
@@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
* .resume_early(), to the same routines as .runtime_suspend() and
* .runtime_resume(), respectively (and analogously for hibernation).
*/
-#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
-static const struct dev_pm_ops name = { \
- SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
- RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
-}
-
-/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
-#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-const struct dev_pm_ops __maybe_unused name = { \
- SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-}
-
-/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
#define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
const struct dev_pm_ops __maybe_unused name = { \
SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
--
2.34.1
^ permalink raw reply related
* [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
Jonathan Cameron
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
Keep this macro in line with the other ones. This makes it possible to
use them in the cases where the underlying dev_pm_ops structure is
exported.
Restore the "static" qualifier in the two drivers where the
DEFINE_SIMPLE_DEV_PM_OPS macro was used.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Notes:
v2: Merge the driver changes to make the commit atomic
drivers/mmc/host/jz4740_mmc.c | 4 ++--
drivers/mmc/host/mxcmmc.c | 2 +-
include/linux/pm.h | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c
index 7693236c946f..7ab1b38a7be5 100644
--- a/drivers/mmc/host/jz4740_mmc.c
+++ b/drivers/mmc/host/jz4740_mmc.c
@@ -1128,8 +1128,8 @@ static int jz4740_mmc_resume(struct device *dev)
return pinctrl_select_default_state(dev);
}
-DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
- jz4740_mmc_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
+ jz4740_mmc_resume);
static struct platform_driver jz4740_mmc_driver = {
.probe = jz4740_mmc_probe,
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index 98c218bd6669..40b6878bea6c 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -1210,7 +1210,7 @@ static int mxcmci_resume(struct device *dev)
return ret;
}
-DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
static struct platform_driver mxcmci_driver = {
.probe = mxcmci_probe,
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 31bbaafb06d2..389e600df233 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -362,7 +362,7 @@ struct dev_pm_ops {
* to RAM and hibernation.
*/
#define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-static const struct dev_pm_ops name = { \
+const struct dev_pm_ops name = { \
SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
}
--
2.34.1
^ permalink raw reply related
* Re: [PATCH net] selftests: set amt.sh executable
From: patchwork-bot+netdevbpf @ 2022-01-05 18:30 UTC (permalink / raw)
To: Taehee Yoo; +Cc: davem, kuba, netdev, shuah, linux-kselftest, liuhangbin
In-Reply-To: <20220105144436.13415-1-ap420073@gmail.com>
Hello:
This patch was applied to netdev/net.git (master)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 5 Jan 2022 14:44:36 +0000 you wrote:
> amt.sh test script will not work because it doesn't have execution
> permission. So, it adds execution permission.
>
> Reported-by: Hangbin Liu <liuhangbin@gmail.com>
> Fixes: c08e8baea78e ("selftests: add amt interface selftest script")
> Signed-off-by: Taehee Yoo <ap420073@gmail.com>
>
> [...]
Here is the summary with links:
- [net] selftests: set amt.sh executable
https://git.kernel.org/netdev/net/c/db54c12a3d7e
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply
* Re: [PATCH v2 net-next 1/7] net: dsa: move dsa_port :: stp_state near dsa_port :: mac
From: Florian Fainelli @ 2022-01-05 18:30 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: David S. Miller, Jakub Kicinski, Andrew Lunn, Vivien Didelot
In-Reply-To: <20220105132141.2648876-2-vladimir.oltean@nxp.com>
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> The MAC address of a port is 6 octets in size, and this creates a 2
> octet hole after it. There are some other u8 members of struct dsa_port
> that we can put in that hole. One such member is the stp_state.
>
> Before:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 32 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_switch * ds; /* 40 8 */
> unsigned int index; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> const char * name; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_port * cpu_dp; /* 64 8 */
> u8 mac[6]; /* 72 6 */
>
> /* XXX 2 bytes hole, try to pack */
>
> struct device_node * dn; /* 80 8 */
> unsigned int ageing_time; /* 88 4 */
> bool vlan_filtering; /* 92 1 */
> bool learning; /* 93 1 */
> u8 stp_state; /* 94 1 */
>
> /* XXX 1 byte hole, try to pack */
>
> struct dsa_bridge * bridge; /* 96 8 */
> struct devlink_port devlink_port; /* 104 288 */
> /* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
> bool devlink_port_setup; /* 392 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct phylink * pl; /* 400 8 */
> struct phylink_config pl_config; /* 408 40 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct net_device * lag_dev; /* 448 8 */
> bool lag_tx_enabled; /* 456 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct net_device * hsr_dev; /* 464 8 */
> struct list_head list; /* 472 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 488 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 496 8 */
> struct mutex addr_lists_lock; /* 504 32 */
> /* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */
> struct list_head fdbs; /* 536 16 */
> struct list_head mdbs; /* 552 16 */
> bool setup; /* 568 1 */
>
> /* size: 576, cachelines: 9, members: 30 */
> /* sum members: 544, holes: 6, sum holes: 25 */
> /* padding: 7 */
> };
>
> After:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 32 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_switch * ds; /* 40 8 */
> unsigned int index; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> const char * name; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_port * cpu_dp; /* 64 8 */
> u8 mac[6]; /* 72 6 */
> u8 stp_state; /* 78 1 */
>
> /* XXX 1 byte hole, try to pack */
>
> struct device_node * dn; /* 80 8 */
> unsigned int ageing_time; /* 88 4 */
> bool vlan_filtering; /* 92 1 */
> bool learning; /* 93 1 */
>
> /* XXX 2 bytes hole, try to pack */
>
> struct dsa_bridge * bridge; /* 96 8 */
> struct devlink_port devlink_port; /* 104 288 */
> /* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
> bool devlink_port_setup; /* 392 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct phylink * pl; /* 400 8 */
> struct phylink_config pl_config; /* 408 40 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct net_device * lag_dev; /* 448 8 */
> bool lag_tx_enabled; /* 456 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct net_device * hsr_dev; /* 464 8 */
> struct list_head list; /* 472 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 488 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 496 8 */
> struct mutex addr_lists_lock; /* 504 32 */
> /* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */
> struct list_head fdbs; /* 536 16 */
> struct list_head mdbs; /* 552 16 */
> bool setup; /* 568 1 */
>
> /* size: 576, cachelines: 9, members: 30 */
> /* sum members: 544, holes: 6, sum holes: 25 */
> /* padding: 7 */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply
* Re: [PATCH v2 1/2] linux-user/ppc: deliver SIGTRAP on POWERPC_EXCP_TRAP
From: Richard Henderson @ 2022-01-05 18:27 UTC (permalink / raw)
To: matheus.ferst, qemu-devel, qemu-ppc
Cc: laurent, groug, danielhb413, clg, david
In-Reply-To: <eebcc0ab-8585-7521-7ddc-b8e85c97aa02@linaro.org>
On 1/4/22 2:12 PM, Richard Henderson wrote:
> On 1/4/22 1:00 PM, matheus.ferst@eldorado.org.br wrote:
>> From: Matheus Ferst<matheus.ferst@eldorado.org.br>
>>
>> Handle POWERPC_EXCP_TRAP in cpu_loop to deliver SIGTRAP on tw[i]/td[i].
>> The si_code comes from do_program_check in the kernel source file
>> arch/powerpc/kernel/traps.c
>>
>> Signed-off-by: Matheus Ferst<matheus.ferst@eldorado.org.br>
>> ---
>> linux-user/ppc/cpu_loop.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/588
r~
^ permalink raw reply
* [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
Jonathan Cameron
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
These macros are defined conditionally, according to CONFIG_PM:
- if CONFIG_PM is enabled, these macros resolve to
DEFINE_SIMPLE_DEV_PM_OPS(), and the dev_pm_ops symbol will be
exported.
- if CONFIG_PM is disabled, these macros will result in a dummy static
dev_pm_ops to be created with the __maybe_unused flag. The dev_pm_ops
will then be discarded by the compiler, along with the provided
callback functions if they are not used anywhere else.
In the second case, the symbol is not exported, which should be
perfectly fine - users of the symbol should all use the pm_ptr() or
pm_sleep_ptr() macro, so the dev_pm_ops marked as "extern" in the
client's code will never be accessed.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Notes:
v2: Remove useless empty line
include/linux/pm.h | 32 +++++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 389e600df233..b82f40e701ab 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -8,6 +8,7 @@
#ifndef _LINUX_PM_H
#define _LINUX_PM_H
+#include <linux/export.h>
#include <linux/list.h>
#include <linux/workqueue.h>
#include <linux/spinlock.h>
@@ -357,14 +358,39 @@ struct dev_pm_ops {
#define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
#endif
+#define _DEFINE_DEV_PM_OPS(name, \
+ suspend_fn, resume_fn, \
+ runtime_suspend_fn, runtime_resume_fn, idle_fn) \
+const struct dev_pm_ops name = { \
+ SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+ RUNTIME_PM_OPS(runtime_suspend_fn, runtime_resume_fn, idle_fn) \
+}
+
/*
* Use this if you want to use the same suspend and resume callbacks for suspend
* to RAM and hibernation.
*/
#define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-const struct dev_pm_ops name = { \
- SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-}
+ _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
+
+#ifdef CONFIG_PM
+#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+ runtime_resume_fn, idle_fn, sec) \
+ _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+ runtime_resume_fn, idle_fn); \
+ _EXPORT_SYMBOL(name, sec)
+#else
+#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+ runtime_resume_fn, idle_fn, sec) \
+static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
+ resume_fn, runtime_suspend_fn, \
+ runtime_resume_fn, idle_fn)
+#endif
+
+#define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+ _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "")
+#define EXPORT_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+ _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl")
/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
--
2.34.1
^ permalink raw reply related
* [PATCH v2 4/6] PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
Jonathan Cameron
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
A lot of drivers create a dev_pm_ops struct with the system sleep
suspend/resume callbacks set to pm_runtime_force_suspend() and
pm_runtime_force_resume().
These drivers can now use the DEFINE_RUNTIME_DEV_PM_OPS() macro, which
will use pm_runtime_force_{suspend,resume}() as the system sleep
callbacks, while having the same dead code removal characteristic that
is already provided by DEFINE_SIMPLE_DEV_PM_OPS().
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Notes:
v2: No change
include/linux/pm.h | 3 +++
include/linux/pm_runtime.h | 14 ++++++++++++++
2 files changed, 17 insertions(+)
diff --git a/include/linux/pm.h b/include/linux/pm.h
index b82f40e701ab..43fa4f828a62 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -410,6 +410,9 @@ const struct dev_pm_ops __maybe_unused name = { \
* suspend and "early" resume callback pointers, .suspend_late() and
* .resume_early(), to the same routines as .runtime_suspend() and
* .runtime_resume(), respectively (and analogously for hibernation).
+ *
+ * Deprecated. You most likely don't want this macro. Use
+ * DEFINE_RUNTIME_DEV_PM_OPS() instead.
*/
#define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
const struct dev_pm_ops __maybe_unused name = { \
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 016de5776b6d..4af454d29281 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -22,6 +22,20 @@
usage_count */
#define RPM_AUTO 0x08 /* Use autosuspend_delay */
+/*
+ * Use this for defining a set of PM operations to be used in all situations
+ * (system suspend, hibernation or runtime PM).
+ *
+ * Note that the behaviour differs from the deprecated UNIVERSAL_DEV_PM_OPS()
+ * macro, which uses the provided callbacks for both runtime PM and system
+ * sleep, while DEFINE_RUNTIME_DEV_PM_OPS() uses pm_runtime_force_suspend()
+ * and pm_runtime_force_resume() for its system sleep callbacks.
+ */
+#define DEFINE_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+ _DEFINE_DEV_PM_OPS(name, pm_runtime_force_suspend, \
+ pm_runtime_force_resume, suspend_fn, \
+ resume_fn, idle_fn)
+
#ifdef CONFIG_PM
extern struct workqueue_struct *pm_wq;
--
2.34.1
^ permalink raw reply related
* Re: Questions to create custom distro for TI am335x
From: Denys Dmytriyenko @ 2022-01-05 18:30 UTC (permalink / raw)
To: Jon Mason
Cc: Jagade, Nachiket, meta-arm@lists.yoctoproject.org,
Sridhara Murthy, Vinay, Ankam, Ravindra
In-Reply-To: <YdXhX4F9iK/yw2bo@kudzu.us>
On Wed, Jan 05, 2022 at 01:20:15PM -0500, Jon Mason wrote:
> On Tue, Jan 04, 2022 at 05:35:18AM +0000, Jagade, Nachiket wrote:
> > Hello Denys,
> >
> > Happy new year.
> > We are working on TI am335x sitara based platform. You had replied to questions of my colleague long ago.
> > We have created custom distro which is a mix of arago and poky. Reason is that when we last checked, arago distro did not had latest version of applications. And when I say application, I refer to open source packages such as python, apparmor etc.
> > Also some layers were not available in arago and we had to resolve many dependencies while compiling.
> >
> > Now we want to make a distro with latest versions of all required packages. So shall we go with 3.4 Honister or with latest dunfell release 3.1.13 ? Our main aim is to have latest versions of packages with less number of vulnerability count. What will you suggest to achieve this?
>
> This is not a Arm specific question. So, your questions are better
> asked on openembedded-core@lists.openembedded.org or
> yocto@lists.yoctoproject.org (or meta-arago@arago-project.org).
correction - it's meta-arago@lists.yoctoproject.org now
> That being said, dunfell is the Yocto Project LTS and there is a
> dunfell branch in meta-arago. So, there should be less pain in using
> that for your hybrid approach.
>
> Thanks,
> Jon
>
>
> >
> >
> > Thanks and regards,
> > Nachiket
> >
> >
> > -----Original Message-----
> > From: Denys Dmytriyenko <denis@denix.org>
> > Sent: Wednesday, February 24, 2021 1:35 AM
> > To: Ankam, Ravindra <Ravindra.Ankam@Honeywell.com>
> > Cc: meta-arm@lists.yoctoproject.org
> > Subject: [External] Re: [meta-arm] Error while building the custom image
> >
> > Hi,
> >
> > You seem to have a very strange combination of layers and mix of branches!
> >
> > For example, is this a Poky distro or Arago? Why do you include meta-poky if DISTRO = "arago"?
> > Why do you have some layers on "gatesgarth" and some on unstable "master"?
> > And finally, Arago distro currently does not fully support master or gatesgarth with the external Arm toolchain, only dunfell.
> >
> > --
> > Denys
> >
> >
> > On Tue, Feb 23, 2021 at 02:47:48PM +0000, Ankam, Ravindra via lists.yoctoproject.org wrote:
> > > Hi,
> > > Please attached the error logs.
> > > Can you please help how to address this issue?
> > >
> > > Thanks and regards,
> > > Ravi
> >
> >
> > > poky/build$ MACHINE=am335x-evm bitbake custom-base-image Loading
> > > cache: 100%
> > > |####################################################################################################################################| Time: 0:00:00 Loaded 4805 entries from dependency cache.
> > > WARNING: No recipes in default available for:
> > > /home/airport/ravi/yocto_gatesgarth/poky/meta-arago/meta-arago-distro/recipes-browser/chromium/chromium-ozone-wayland_%.bbappend
> > >
> > > /home/airport/ravi/yocto_gatesgarth/poky/meta-arago/meta-arago-distro/
> > > recipes-graphics/wayland/weston_8.0.0.bbappend
> > >
> > > /home/airport/ravi/yocto_gatesgarth/poky/meta-arago/meta-arago-distro/
> > > recipes-support/opencv/opencv_3.1.bbappend
> > > NOTE: Resolving any missing task queue dependencies
> > >
> > > Build Configuration:
> > > BB_VERSION = "1.48.0"
> > > BUILD_SYS = "x86_64-linux"
> > > NATIVELSBSTRING = "ubuntu-16.04"
> > > TARGET_SYS = "arm-linux-gnueabi"
> > > MACHINE = "am335x-evm"
> > > DISTRO = "arago"
> > > DISTRO_VERSION = "2020.09"
> > > TUNE_FEATURES = "arm armv7a vfp thumb neon callconvention-hard"
> > > TARGET_FPU = "hard"
> > > meta
> > > meta-poky
> > > meta-yocto-bsp
> > > meta-custom = "my-yocto-3.2.1:943ef2fad8428f002850e3655a3312e13d0dcb2c"
> > > meta-arm
> > > meta-arm-toolchain = "gatesgarth:7185d29de9f54d2cb5b2da35b0c3f1e5f381db2c"
> > > meta-clang = "master:16f757de2d90594476d2c8feefd3a850c3c24931"
> > > meta-ti = "master:fb4726a88cbb5a6311bdb3095b81d314e344a322"
> > > meta-arago-distro
> > > meta-arago-extras = "master:f90d1bed7e775ac59bf1fcd95e95e9109d0953db"
> > > meta-qt5 = "master:23f7a1c8eabaf1beb80cc6214954c0e1751c4cbd"
> > > meta-virtualization = "master-next:3389eb0f128b1ef1d1aaf518afdf298a88f89619"
> > > meta-networking
> > > meta-python
> > > meta-perl
> > > meta-oe
> > > meta-gnome
> > > meta-multimedia
> > > meta-filesystems = "gatesgarth:cef93b7b00e620d90a610112ee574fa60b691cf8"
> > > meta-tpm
> > > meta-security
> > > meta-security-compliance = "master:16ee7308c9fd48d69b02c5519d2e5edddc560658"
> > > meta-selinux = "gatesgarth:36db146d56535318d343dc9138358885356f2172"
> > > meta-linaro
> > > meta-optee = "master:11091b487e1ad4c6a4adfac34d958a3d9d9ccd17"
> > >
> > > Initialising tasks: 100%
> > > |#####################################################################
> > > ##########################################################| Time:
> > > 0:00:02 Sstate summary: Wanted 1003 Found 0 Missed 1003 Current 22 (0%
> > > match, 2% complete)
> > > NOTE: Executing Tasks
> > > ERROR: external-arm-toolchain-2019.12-r0 do_install: '_sre.SRE_Match'
> > > object is not subscriptable
> > > ERROR: Logfile of failure stored in:
> > > /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/
> > > work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/t
> > > emp/log.do_install.22351
> > > Log data follows:
> > > | DEBUG: Executing python function extend_recipe_sysroot
> > > | NOTE: Direct dependencies are
> > > | ['virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recip
> > > | es-devtools/patch/patch_2.7.6.bb:do_populate_sysroot',
> > > | 'virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recipe
> > > | s-devtools/rsync/rsync_3.2.3.bb:do_populate_sysroot',
> > > | 'virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recipe
> > > | s-extended/xz/xz_5.2.5.bb:do_populate_sysroot',
> > > | 'virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recipe
> > > | s-devtools/bison/bison_3.7.2.bb:do_populate_sysroot',
> > > | 'virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recipe
> > > | s-devtools/pkgconfig/pkgconfig_git.bb:do_populate_sysroot',
> > > | '/home/airport/ravi/yocto_gatesgarth/poky/meta/recipes-devtools/quil
> > > | t/quilt-native_0.66.bb:do_populate_sysroot',
> > > | 'virtual:native:/home/airport/ravi/yocto_gatesgarth/poky/meta/recipe
> > > | s-devtools/pseudo/pseudo_git.bb:do_populate_sysroot']
> > > | NOTE: Installed into sysroot: []
> > > | NOTE: Skipping as already exists in sysroot: ['patch-native',
> > > | 'rsync-native', 'xz-native', 'bison-native', 'pkgconfig-native',
> > > | 'quilt-native', 'pseudo-native', 'texinfo-dummy-native',
> > > | 'libtool-native', 'gnu-config-native', 'gettext-minimal-native',
> > > | 'automake-native', 'flex-native', 'autoconf-native', 'attr-native',
> > > | 'acl-native', 'popt-native', 'm4-native']
> > > | DEBUG: Python function extend_recipe_sysroot finished
> > > | DEBUG: Executing shell function do_install
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libanl.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libanl-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libBrokenLocale.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libBrokenLocale-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libc.so.6 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libc-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libcrypt.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libcrypt-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libdl.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libdl-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libm.so.6 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libm-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnsl.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnsl-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_compat.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_compat-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_db.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_db-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_dns.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_dns-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_files.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_files-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_hesiod.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libnss_hesiod-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libpthread.so.0 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libpthread-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libresolv.so.2 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libresolv-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/librt.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/librt-2.30.so, keep it
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libutil.so.1 is a symlink of
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/image/lib/libutil-2.30.so, keep it
> > > | rmdir: failed to remove
> > > | '/home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-gli
> > > | bc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12
> > > | -r0/image/usr/bin': Directory not empty
> > > | rmdir: failed to remove
> > > | '/home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-gli
> > > | bc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12
> > > | -r0/image/usr/sbin': Directory not empty
> > > | rmdir: failed to remove
> > > | '/home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-gli
> > > | bc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12
> > > | -r0/image/sbin': Directory not empty
> > > | NOTE: make -j 3 HOSTCC=gcc HOSTCPP=gcc -E headers_install INSTALL_HDR_PATH=/home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/external-arm-toolchain-2019.12/usr
> > > | INSTALL
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/external-arm-toolchain-2019.12/usr/include
> > > | mv: cannot stat
> > > | '/home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-gli
> > > | bc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12
> > > | -r0/image/usr/lib/gcc/arm-none-linux-gnueabihf': No such file or
> > > | directory
> > > | WARNING: /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/temp/run.do_install.22351:415 exit 1 from 'mv /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/image/usr/lib/gcc/arm-none-linux-gnueabihf /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/image/usr/lib/gcc/arm-linux-gnueabi'
> > > | WARNING: Backtrace (BB generated script):
> > > | #1: do_install, /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glibc/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-r0/temp/run.do_install.22351, line 415
> > > | #2: main,
> > > | /home/airport/ravi/yocto_gatesgarth/poky/build/tmp-external-arm-glib
> > > | c/work/armv7at2hf-neon-linux-gnueabi/external-arm-toolchain/2019.12-
> > > | r0/temp/run.do_install.22351, line 415
> > > | ERROR: '_sre.SRE_Match' object is not subscriptable
> > > ERROR: Task (/home/airport/ravi/yocto_gatesgarth/poky/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/external-arm-toolchain.bb:do_install) failed with exit code '1'
> > > NOTE: Tasks Summary: Attempted 242 tasks of which 239 didn't need to be rerun and 1 failed.
> > >
> > > Summary: 1 task failed:
> > >
> > > /home/airport/ravi/yocto_gatesgarth/poky/meta-arm/meta-arm-toolchain/r
> > > ecipes-devtools/external-arm-toolchain/external-arm-toolchain.bb:do_in
> > > stall
> > > Summary: There was 1 WARNING message shown.
> > > Summary: There was 1 ERROR message shown, returning a non-zero exit code.
> >
> > >
> > > -=-=-=-=-=-=-=-=-=-=-=-
> > > Links: You receive all messages sent to this group.
> > > View/Reply Online (#1713):
> > > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
> > > s.yoctoproject.org%2Fg%2Fmeta-arm%2Fmessage%2F1713&data=04%7C01%7C
> > > Vinay.SridharaMurthy%40Honeywell.com%7Cbb8e0988781b4c3e846408d9ce83da3
> > > c%7C96ece5269c7d48b08daf8b93c90a5d18%7C0%7C0%7C637767887969200715%7CUn
> > > known%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haW
> > > wiLCJXVCI6Mn0%3D%7C3000&sdata=HwaRFNz2%2Fo8OtD83YcwUngCFc17wzpX7Zk
> > > P%2BFCkAgA4%3D&reserved=0 Mute This Topic:
> > > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
> > > s.yoctoproject.org%2Fmt%2F80852192%2F3617104&data=04%7C01%7CVinay.
> > > SridharaMurthy%40Honeywell.com%7Cbb8e0988781b4c3e846408d9ce83da3c%7C96
> > > ece5269c7d48b08daf8b93c90a5d18%7C0%7C0%7C637767887969200715%7CUnknown%
> > > 7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJX
> > > VCI6Mn0%3D%7C3000&sdata=dITdALtS0RmCy4uvIPjZB6yGDMIC6NOtUq9wkrhjVH
> > > E%3D&reserved=0 Group Owner: meta-arm+owner@lists.yoctoproject.org
> > > Unsubscribe:
> > > https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
> > > s.yoctoproject.org%2Fg%2Fmeta-arm%2Funsub&data=04%7C01%7CVinay.Sri
> > > dharaMurthy%40Honeywell.com%7Cbb8e0988781b4c3e846408d9ce83da3c%7C96ece
> > > 5269c7d48b08daf8b93c90a5d18%7C0%7C0%7C637767887969200715%7CUnknown%7CT
> > > WFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI
> > > 6Mn0%3D%7C3000&sdata=oVafEDlK82x6PFJz3kukwvuXECl5JW%2BD0GMwAkKDIZs
> > > %3D&reserved=0 [denis@denix.org]
> > > -=-=-=-=-=-=-=-=-=-=-=-
> > >
> >
> >
> > --
> > Regards,
> > Denys Dmytriyenko <denis@denix.org>
> > PGP: 0x420902729A92C964 - https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdenix.org%2F0x420902729A92C964&data=04%7C01%7CNachiketRahul.Jagade%40Honeywell.com%7Ce49425450ea14bd225ea08d9ce889c5b%7C96ece5269c7d48b08daf8b93c90a5d18%7C0%7C0%7C637767908394296478%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=xDfgVNwA0j8WFflU4TNhfyV5UQ80zobXOQcsVeYjHTI%3D&reserved=0
> > Fingerprint: 25FC E4A5 8A72 2F69 1186 6D76 4209 0272 9A92 C964
> >
>
--
Regards,
Denys Dmytriyenko <denis@denix.org>
PGP: 0x420902729A92C964 - https://denix.org/0x420902729A92C964
Fingerprint: 25FC E4A5 8A72 2F69 1186 6D76 4209 0272 9A92 C964
^ permalink raw reply
* [PATCH v2 5/6] PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
Jonathan Cameron
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
Similar to EXPORT[_GPL]_SIMPLE_DEV_PM_OPS, but for users with runtime-PM
suspend/resume callbacks.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Notes:
v2: No change
include/linux/pm_runtime.h | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 4af454d29281..a7f862a26c03 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -36,6 +36,13 @@
pm_runtime_force_resume, suspend_fn, \
resume_fn, idle_fn)
+#define EXPORT_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+ _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
+ suspend_fn, resume_fn, idle_fn, "")
+#define EXPORT_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+ _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
+ suspend_fn, resume_fn, idle_fn, "_gpl")
+
#ifdef CONFIG_PM
extern struct workqueue_struct *pm_wq;
--
2.34.1
^ permalink raw reply related
* Re: [PATCH v2 net-next 2/7] net: dsa: merge all bools of struct dsa_port into a single u8
From: Florian Fainelli @ 2022-01-05 18:30 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: David S. Miller, Jakub Kicinski, Andrew Lunn, Vivien Didelot
In-Reply-To: <20220105132141.2648876-3-vladimir.oltean@nxp.com>
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> struct dsa_port has 5 bool members which create quite a number of 7 byte
> holes in the structure layout. By merging them all into bitfields of an
> u8, and placing that u8 in the 1-byte hole after dp->mac and dp->stp_state,
> we can reduce the structure size from 576 bytes to 552 bytes on arm64.
>
> Before:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 32 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_switch * ds; /* 40 8 */
> unsigned int index; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> const char * name; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_port * cpu_dp; /* 64 8 */
> u8 mac[6]; /* 72 6 */
> u8 stp_state; /* 78 1 */
>
> /* XXX 1 byte hole, try to pack */
>
> struct device_node * dn; /* 80 8 */
> unsigned int ageing_time; /* 88 4 */
> bool vlan_filtering; /* 92 1 */
> bool learning; /* 93 1 */
>
> /* XXX 2 bytes hole, try to pack */
>
> struct dsa_bridge * bridge; /* 96 8 */
> struct devlink_port devlink_port; /* 104 288 */
> /* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
> bool devlink_port_setup; /* 392 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct phylink * pl; /* 400 8 */
> struct phylink_config pl_config; /* 408 40 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct net_device * lag_dev; /* 448 8 */
> bool lag_tx_enabled; /* 456 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct net_device * hsr_dev; /* 464 8 */
> struct list_head list; /* 472 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 488 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 496 8 */
> struct mutex addr_lists_lock; /* 504 32 */
> /* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */
> struct list_head fdbs; /* 536 16 */
> struct list_head mdbs; /* 552 16 */
> bool setup; /* 568 1 */
>
> /* size: 576, cachelines: 9, members: 30 */
> /* sum members: 544, holes: 6, sum holes: 25 */
> /* padding: 7 */
> };
>
> After:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 32 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_switch * ds; /* 40 8 */
> unsigned int index; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> const char * name; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_port * cpu_dp; /* 64 8 */
> u8 mac[6]; /* 72 6 */
> u8 stp_state; /* 78 1 */
> u8 vlan_filtering:1; /* 79: 0 1 */
> u8 learning:1; /* 79: 1 1 */
> u8 lag_tx_enabled:1; /* 79: 2 1 */
> u8 devlink_port_setup:1; /* 79: 3 1 */
> u8 setup:1; /* 79: 4 1 */
>
> /* XXX 3 bits hole, try to pack */
>
> struct device_node * dn; /* 80 8 */
> unsigned int ageing_time; /* 88 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_bridge * bridge; /* 96 8 */
> struct devlink_port devlink_port; /* 104 288 */
> /* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
> struct phylink * pl; /* 392 8 */
> struct phylink_config pl_config; /* 400 40 */
> struct net_device * lag_dev; /* 440 8 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct net_device * hsr_dev; /* 448 8 */
> struct list_head list; /* 456 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 472 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 480 8 */
> struct mutex addr_lists_lock; /* 488 32 */
> /* --- cacheline 8 boundary (512 bytes) was 8 bytes ago --- */
> struct list_head fdbs; /* 520 16 */
> struct list_head mdbs; /* 536 16 */
>
> /* size: 552, cachelines: 9, members: 30 */
> /* sum members: 539, holes: 3, sum holes: 12 */
> /* sum bitfield members: 5 bits, bit holes: 1, sum bit holes: 3 bits */
> /* last cacheline: 40 bytes */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply
* Re: [PATCH v2 net-next 3/7] net: dsa: move dsa_port :: type near dsa_port :: index
From: Florian Fainelli @ 2022-01-05 18:31 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: David S. Miller, Jakub Kicinski, Andrew Lunn, Vivien Didelot
In-Reply-To: <20220105132141.2648876-4-vladimir.oltean@nxp.com>
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> Both dsa_port :: type and dsa_port :: index introduce a 4 octet hole
> after them, so we can group them together and the holes would be
> eliminated, turning 16 octets of storage into just 8. This makes the
> cpu_dp pointer fit in the first cache line, which is good, because
> dsa_slave_to_master(), called by dsa_enqueue_skb(), uses it.
>
> Before:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 32 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_switch * ds; /* 40 8 */
> unsigned int index; /* 48 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> const char * name; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_port * cpu_dp; /* 64 8 */
> u8 mac[6]; /* 72 6 */
> u8 stp_state; /* 78 1 */
> u8 vlan_filtering:1; /* 79: 0 1 */
> u8 learning:1; /* 79: 1 1 */
> u8 lag_tx_enabled:1; /* 79: 2 1 */
> u8 devlink_port_setup:1; /* 79: 3 1 */
> u8 setup:1; /* 79: 4 1 */
>
> /* XXX 3 bits hole, try to pack */
>
> struct device_node * dn; /* 80 8 */
> unsigned int ageing_time; /* 88 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_bridge * bridge; /* 96 8 */
> struct devlink_port devlink_port; /* 104 288 */
> /* --- cacheline 6 boundary (384 bytes) was 8 bytes ago --- */
> struct phylink * pl; /* 392 8 */
> struct phylink_config pl_config; /* 400 40 */
> struct net_device * lag_dev; /* 440 8 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct net_device * hsr_dev; /* 448 8 */
> struct list_head list; /* 456 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 472 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 480 8 */
> struct mutex addr_lists_lock; /* 488 32 */
> /* --- cacheline 8 boundary (512 bytes) was 8 bytes ago --- */
> struct list_head fdbs; /* 520 16 */
> struct list_head mdbs; /* 536 16 */
>
> /* size: 552, cachelines: 9, members: 30 */
> /* sum members: 539, holes: 3, sum holes: 12 */
> /* sum bitfield members: 5 bits, bit holes: 1, sum bit holes: 3 bits */
> /* last cacheline: 40 bytes */
> };
>
> After:
>
> pahole -C dsa_port net/dsa/slave.o
> struct dsa_port {
> union {
> struct net_device * master; /* 0 8 */
> struct net_device * slave; /* 0 8 */
> }; /* 0 8 */
> const struct dsa_device_ops * tag_ops; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> struct sk_buff * (*rcv)(struct sk_buff *, struct net_device *); /* 24 8 */
> struct dsa_switch * ds; /* 32 8 */
> unsigned int index; /* 40 4 */
> enum {
> DSA_PORT_TYPE_UNUSED = 0,
> DSA_PORT_TYPE_CPU = 1,
> DSA_PORT_TYPE_DSA = 2,
> DSA_PORT_TYPE_USER = 3,
> } type; /* 44 4 */
> const char * name; /* 48 8 */
> struct dsa_port * cpu_dp; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> u8 mac[6]; /* 64 6 */
> u8 stp_state; /* 70 1 */
> u8 vlan_filtering:1; /* 71: 0 1 */
> u8 learning:1; /* 71: 1 1 */
> u8 lag_tx_enabled:1; /* 71: 2 1 */
> u8 devlink_port_setup:1; /* 71: 3 1 */
> u8 setup:1; /* 71: 4 1 */
>
> /* XXX 3 bits hole, try to pack */
>
> struct device_node * dn; /* 72 8 */
> unsigned int ageing_time; /* 80 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct dsa_bridge * bridge; /* 88 8 */
> struct devlink_port devlink_port; /* 96 288 */
> /* --- cacheline 6 boundary (384 bytes) --- */
> struct phylink * pl; /* 384 8 */
> struct phylink_config pl_config; /* 392 40 */
> struct net_device * lag_dev; /* 432 8 */
> struct net_device * hsr_dev; /* 440 8 */
> /* --- cacheline 7 boundary (448 bytes) --- */
> struct list_head list; /* 448 16 */
> const struct ethtool_ops * orig_ethtool_ops; /* 464 8 */
> const struct dsa_netdevice_ops * netdev_ops; /* 472 8 */
> struct mutex addr_lists_lock; /* 480 32 */
> /* --- cacheline 8 boundary (512 bytes) --- */
> struct list_head fdbs; /* 512 16 */
> struct list_head mdbs; /* 528 16 */
>
> /* size: 544, cachelines: 9, members: 30 */
> /* sum members: 539, holes: 1, sum holes: 4 */
> /* sum bitfield members: 5 bits, bit holes: 1, sum bit holes: 3 bits */
> /* last cacheline: 32 bytes */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply
* [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
To: Rafael J . Wysocki
Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil
In-Reply-To: <20220105182939.106885-1-paul@crapouillou.net>
Use the new EXPORT_RUNTIME_DEV_PM_OPS() macro. It allows the underlying
dev_pm_ops struct as well as the suspend/resume callbacks to be detected
as dead code in the case where CONFIG_PM is disabled, without having to
wrap everything inside #ifdef CONFIG_PM guards.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
Notes:
v2: New patch
drivers/iio/pressure/bmp280-core.c | 11 ++---------
drivers/iio/pressure/bmp280-i2c.c | 2 +-
drivers/iio/pressure/bmp280-spi.c | 2 +-
3 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
index 6b7da40f99c8..bf8167f43c56 100644
--- a/drivers/iio/pressure/bmp280-core.c
+++ b/drivers/iio/pressure/bmp280-core.c
@@ -1138,7 +1138,6 @@ int bmp280_common_probe(struct device *dev,
}
EXPORT_SYMBOL(bmp280_common_probe);
-#ifdef CONFIG_PM
static int bmp280_runtime_suspend(struct device *dev)
{
struct iio_dev *indio_dev = dev_get_drvdata(dev);
@@ -1159,15 +1158,9 @@ static int bmp280_runtime_resume(struct device *dev)
usleep_range(data->start_up_time, data->start_up_time + 100);
return data->chip_info->chip_config(data);
}
-#endif /* CONFIG_PM */
-const struct dev_pm_ops bmp280_dev_pm_ops = {
- SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
- SET_RUNTIME_PM_OPS(bmp280_runtime_suspend,
- bmp280_runtime_resume, NULL)
-};
-EXPORT_SYMBOL(bmp280_dev_pm_ops);
+EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops, bmp280_runtime_suspend,
+ bmp280_runtime_resume, NULL);
MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
diff --git a/drivers/iio/pressure/bmp280-i2c.c b/drivers/iio/pressure/bmp280-i2c.c
index 8b03ea15c0d0..35045bd92846 100644
--- a/drivers/iio/pressure/bmp280-i2c.c
+++ b/drivers/iio/pressure/bmp280-i2c.c
@@ -58,7 +58,7 @@ static struct i2c_driver bmp280_i2c_driver = {
.driver = {
.name = "bmp280",
.of_match_table = bmp280_of_i2c_match,
- .pm = &bmp280_dev_pm_ops,
+ .pm = pm_ptr(&bmp280_dev_pm_ops),
},
.probe = bmp280_i2c_probe,
.id_table = bmp280_i2c_id,
diff --git a/drivers/iio/pressure/bmp280-spi.c b/drivers/iio/pressure/bmp280-spi.c
index 625b86878ad8..41f6cc56d229 100644
--- a/drivers/iio/pressure/bmp280-spi.c
+++ b/drivers/iio/pressure/bmp280-spi.c
@@ -109,7 +109,7 @@ static struct spi_driver bmp280_spi_driver = {
.driver = {
.name = "bmp280",
.of_match_table = bmp280_of_spi_match,
- .pm = &bmp280_dev_pm_ops,
+ .pm = pm_ptr(&bmp280_dev_pm_ops),
},
.id_table = bmp280_spi_id,
.probe = bmp280_spi_probe,
--
2.34.1
^ permalink raw reply related
* Re: [PATCH v2 1/2] linux-user/ppc: deliver SIGTRAP on POWERPC_EXCP_TRAP
From: Richard Henderson @ 2022-01-05 18:28 UTC (permalink / raw)
To: Cédric Le Goater, matheus.ferst, qemu-devel, qemu-ppc
Cc: danielhb413, laurent, david, groug
In-Reply-To: <a31423b5-2d76-12a9-5bea-fcc4e608342a@kaod.org>
On 1/4/22 10:46 PM, Cédric Le Goater wrote:
> On 1/4/22 22:00, matheus.ferst@eldorado.org.br wrote:
>> From: Matheus Ferst <matheus.ferst@eldorado.org.br>
>>
>> Handle POWERPC_EXCP_TRAP in cpu_loop to deliver SIGTRAP on tw[i]/td[i].
>> The si_code comes from do_program_check in the kernel source file
>> arch/powerpc/kernel/traps.c
>>
>> Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
>> ---
>> linux-user/ppc/cpu_loop.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/linux-user/ppc/cpu_loop.c b/linux-user/ppc/cpu_loop.c
>> index 46e6ffd6d3..6c99feb19b 100644
>> --- a/linux-user/ppc/cpu_loop.c
>> +++ b/linux-user/ppc/cpu_loop.c
>> @@ -188,7 +188,8 @@ void cpu_loop(CPUPPCState *env)
>> }
>> break;
>> case POWERPC_EXCP_TRAP:
>> - cpu_abort(cs, "Tried to call a TRAP\n");
>> + si_signo = TARGET_SIGTRAP;
>> + si_code = TARGET_TRAP_BRKPT;
>
> These lack 'info.'
You missed the Based-on in the cover-letter.
r~
^ permalink raw reply
* [PATCH] qemu_fw_cfg: use default_groups in kobj_type
From: Greg Kroah-Hartman @ 2022-01-05 18:31 UTC (permalink / raw)
To: linux-kernel
Cc: Greg Kroah-Hartman, Gabriel Somlo, Michael S. Tsirkin, qemu-devel
There are currently 2 ways to create a set of sysfs files for a
kobj_type, through the default_attrs field, and the default_groups
field. Move the firmware qemu_fw_cfg sysfs code to use default_groups
field which has been the preferred way since aa30f47cf666 ("kobject: Add
support for default attribute groups to kobj_type") so that we can soon
get rid of the obsolete default_attrs field.
Cc: Gabriel Somlo <somlo@cmu.edu>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/firmware/qemu_fw_cfg.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index 172c751a4f6c..c62f05420d32 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -395,7 +395,7 @@ static void fw_cfg_sysfs_cache_cleanup(void)
}
}
-/* default_attrs: per-entry attributes and show methods */
+/* per-entry attributes and show methods */
#define FW_CFG_SYSFS_ATTR(_attr) \
struct fw_cfg_sysfs_attribute fw_cfg_sysfs_attr_##_attr = { \
@@ -428,6 +428,7 @@ static struct attribute *fw_cfg_sysfs_entry_attrs[] = {
&fw_cfg_sysfs_attr_name.attr,
NULL,
};
+ATTRIBUTE_GROUPS(fw_cfg_sysfs_entry);
/* sysfs_ops: find fw_cfg_[entry, attribute] and call appropriate show method */
static ssize_t fw_cfg_sysfs_attr_show(struct kobject *kobj, struct attribute *a,
@@ -454,7 +455,7 @@ static void fw_cfg_sysfs_release_entry(struct kobject *kobj)
/* kobj_type: ties together all properties required to register an entry */
static struct kobj_type fw_cfg_sysfs_entry_ktype = {
- .default_attrs = fw_cfg_sysfs_entry_attrs,
+ .default_groups = fw_cfg_sysfs_entry_groups,
.sysfs_ops = &fw_cfg_sysfs_attr_ops,
.release = fw_cfg_sysfs_release_entry,
};
--
2.34.1
^ permalink raw reply related
* Re: [RFC PATCH v2 3/6] remoteproc: Move rproc_vdev management to remoteproc_virtio.c
From: Mathieu Poirier @ 2022-01-05 18:32 UTC (permalink / raw)
To: Arnaud Pouliquen
Cc: Bjorn Andersson, linux-remoteproc, linux-kernel, linux-stm32
In-Reply-To: <20211222082349.30378-4-arnaud.pouliquen@foss.st.com>
On Wed, Dec 22, 2021 at 09:23:46AM +0100, Arnaud Pouliquen wrote:
> Move functions related to the management of the rproc_vdev
> structure in the remoteproc_virtio.c.
> The aim is to decorrelate as possible the virtio management form
> the core part.
>
> Due to the strong correlation between the vrings and the resource table
> the vrings management is kept in the remoteproc core.
>
> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
> ---
> Update vs previous revision:
> - update title
> - Fix typo
The typo still exists.
> - remove dma-map-ops.h and dma-direct.h useless includes in remoteproc_core.c.
> ---
> drivers/remoteproc/remoteproc_core.c | 133 -----------------------
> drivers/remoteproc/remoteproc_internal.h | 19 +++-
> drivers/remoteproc/remoteproc_virtio.c | 125 ++++++++++++++++++++-
> 3 files changed, 138 insertions(+), 139 deletions(-)
>
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index fcc55dbfba3b..ca2fe8d9cac8 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -23,9 +23,7 @@
> #include <linux/panic_notifier.h>
> #include <linux/slab.h>
> #include <linux/mutex.h>
> -#include <linux/dma-map-ops.h>
> #include <linux/dma-mapping.h>
> -#include <linux/dma-direct.h> /* XXX: pokes into bus_dma_range */
> #include <linux/firmware.h>
> #include <linux/string.h>
> #include <linux/debugfs.h>
> @@ -434,123 +432,6 @@ void rproc_free_vring(struct rproc_vring *rvring)
> }
> }
>
> -static int rproc_vdev_do_start(struct rproc_subdev *subdev)
> -{
> - struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev);
> -
> - return rproc_add_virtio_dev(rvdev, rvdev->id);
> -}
> -
> -static void rproc_vdev_do_stop(struct rproc_subdev *subdev, bool crashed)
> -{
> - struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev);
> - int ret;
> -
> - ret = device_for_each_child(&rvdev->dev, NULL, rproc_remove_virtio_dev);
> - if (ret)
> - dev_warn(&rvdev->dev, "can't remove vdev child device: %d\n", ret);
> -}
> -
> -/**
> - * rproc_rvdev_release() - release the existence of a rvdev
> - *
> - * @dev: the subdevice's dev
> - */
> -static void rproc_rvdev_release(struct device *dev)
> -{
> - struct rproc_vdev *rvdev = container_of(dev, struct rproc_vdev, dev);
> -
> - of_reserved_mem_device_release(dev);
> -
> - kfree(rvdev);
> -}
> -
> -static int copy_dma_range_map(struct device *to, struct device *from)
> -{
> - const struct bus_dma_region *map = from->dma_range_map, *new_map, *r;
> - int num_ranges = 0;
> -
> - if (!map)
> - return 0;
> -
> - for (r = map; r->size; r++)
> - num_ranges++;
> -
> - new_map = kmemdup(map, array_size(num_ranges + 1, sizeof(*map)),
> - GFP_KERNEL);
> - if (!new_map)
> - return -ENOMEM;
> - to->dma_range_map = new_map;
> - return 0;
> -}
> -
> -static void rproc_register_rvdev(struct rproc *rproc, struct rproc_vdev *rvdev)
> -{
> - if (rvdev && rproc)
> - list_add_tail(&rvdev->node, &rproc->rvdevs);
> -}
> -
> -static void rproc_unregister_rvdev(struct rproc_vdev *rvdev)
> -{
> - if (rvdev)
> - list_del(&rvdev->node);
> -}
> -
> -static int rproc_rvdev_add_device(struct rproc_vdev *rvdev)
> -{
> - struct rproc *rproc = rvdev->rproc;
> - char name[16];
> - int ret;
> -
> - snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index);
> - rvdev->dev.parent = &rproc->dev;
> - rvdev->dev.release = rproc_rvdev_release;
> - dev_set_name(&rvdev->dev, "%s#%s", dev_name(rvdev->dev.parent), name);
> - dev_set_drvdata(&rvdev->dev, rvdev);
> -
> - ret = device_register(&rvdev->dev);
> - if (ret) {
> - put_device(&rvdev->dev);
> - return ret;
> - }
> - ret = copy_dma_range_map(&rvdev->dev, rproc->dev.parent);
> - if (ret)
> - goto free_rvdev;
> -
> - /* Make device dma capable by inheriting from parent's capabilities */
> - set_dma_ops(&rvdev->dev, get_dma_ops(rproc->dev.parent));
> -
> - ret = dma_coerce_mask_and_coherent(&rvdev->dev,
> - dma_get_mask(rproc->dev.parent));
> - if (ret) {
> - dev_warn(&rvdev->dev,
> - "Failed to set DMA mask %llx. Trying to continue... (%pe)\n",
> - dma_get_mask(rproc->dev.parent), ERR_PTR(ret));
> - }
> -
> - rproc_register_rvdev(rproc, rvdev);
> -
> - rvdev->subdev.start = rproc_vdev_do_start;
> - rvdev->subdev.stop = rproc_vdev_do_stop;
> -
> - rproc_add_subdev(rproc, &rvdev->subdev);
> -
> - return 0;
> -
> -free_rvdev:
> - device_unregister(&rvdev->dev);
> - return ret;
> -}
> -
> -static void rproc_rvdev_remove_device(struct rproc_vdev *rvdev)
> -{
> - struct rproc *rproc = rvdev->rproc;
> -
> - rproc_remove_subdev(rproc, &rvdev->subdev);
> - rproc_unregister_rvdev(rvdev);
> - device_unregister(&rvdev->dev);
> -}
> -
> /**
> * rproc_handle_vdev() - handle a vdev fw resource
> * @rproc: the remote processor
> @@ -650,20 +531,6 @@ static int rproc_handle_vdev(struct rproc *rproc, void *ptr,
> return ret;
> }
>
> -void rproc_vdev_release(struct kref *ref)
> -{
> - struct rproc_vdev *rvdev = container_of(ref, struct rproc_vdev, refcount);
> - struct rproc_vring *rvring;
> - int id;
> -
> - for (id = 0; id < ARRAY_SIZE(rvdev->vring); id++) {
> - rvring = &rvdev->vring[id];
> - rproc_free_vring(rvring);
> - }
> -
> - rproc_rvdev_remove_device(rvdev);
> -}
> -
> /**
> * rproc_handle_trace() - handle a shared trace buffer resource
> * @rproc: the remote processor
> diff --git a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h
> index a328e634b1de..e9e9a551a8c2 100644
> --- a/drivers/remoteproc/remoteproc_internal.h
> +++ b/drivers/remoteproc/remoteproc_internal.h
> @@ -26,14 +26,13 @@ struct rproc_debug_trace {
>
> /* from remoteproc_core.c */
> void rproc_release(struct kref *kref);
> -irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id);
> -void rproc_vdev_release(struct kref *ref);
> int rproc_of_parse_firmware(struct device *dev, int index,
> const char **fw_name);
>
> /* from remoteproc_virtio.c */
> -int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id);
> -int rproc_remove_virtio_dev(struct device *dev, void *data);
> +int rproc_rvdev_add_device(struct rproc_vdev *rvdev);
> +irqreturn_t rproc_vq_interrupt(struct rproc *rproc, int vq_id);
> +void rproc_vdev_release(struct kref *ref);
>
> /* from remoteproc_debugfs.c */
> void rproc_remove_trace_file(struct dentry *tfile);
> @@ -196,4 +195,16 @@ bool rproc_u64_fit_in_size_t(u64 val)
> return (val <= (size_t) -1);
> }
>
> +static inline void rproc_register_rvdev(struct rproc *rproc, struct rproc_vdev *rvdev)
> +{
> + if (rvdev && rproc)
> + list_add_tail(&rvdev->node, &rproc->rvdevs);
> +}
> +
> +static inline void rproc_unregister_rvdev(struct rproc_vdev *rvdev)
> +{
> + if (rvdev)
> + list_del(&rvdev->node);
> +}
> +
> #endif /* REMOTEPROC_INTERNAL_H */
> diff --git a/drivers/remoteproc/remoteproc_virtio.c b/drivers/remoteproc/remoteproc_virtio.c
> index 70ab496d0431..51d415744fc6 100644
> --- a/drivers/remoteproc/remoteproc_virtio.c
> +++ b/drivers/remoteproc/remoteproc_virtio.c
> @@ -9,7 +9,9 @@
> * Brian Swetland <swetland@google.com>
> */
>
> +#include <linux/dma-direct.h>
> #include <linux/dma-map-ops.h>
> +#include <linux/dma-mapping.h>
> #include <linux/export.h>
> #include <linux/of_reserved_mem.h>
> #include <linux/remoteproc.h>
> @@ -23,6 +25,25 @@
>
> #include "remoteproc_internal.h"
>
> +static int copy_dma_range_map(struct device *to, struct device *from)
> +{
> + const struct bus_dma_region *map = from->dma_range_map, *new_map, *r;
> + int num_ranges = 0;
> +
> + if (!map)
> + return 0;
> +
> + for (r = map; r->size; r++)
> + num_ranges++;
> +
> + new_map = kmemdup(map, array_size(num_ranges + 1, sizeof(*map)),
> + GFP_KERNEL);
> + if (!new_map)
> + return -ENOMEM;
> + to->dma_range_map = new_map;
> + return 0;
> +}
> +
> static struct rproc_vdev *vdev_to_rvdev(struct virtio_device *vdev)
> {
> return container_of(vdev->dev.parent, struct rproc_vdev, dev);
> @@ -339,7 +360,7 @@ static void rproc_virtio_dev_release(struct device *dev)
> *
> * Return: 0 on success or an appropriate error value otherwise
> */
> -int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id)
> +static int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id)
> {
> struct rproc *rproc = rvdev->rproc;
> struct device *dev = &rvdev->dev;
> @@ -447,10 +468,110 @@ int rproc_add_virtio_dev(struct rproc_vdev *rvdev, int id)
> *
> * Return: 0
> */
> -int rproc_remove_virtio_dev(struct device *dev, void *data)
> +static int rproc_remove_virtio_dev(struct device *dev, void *data)
> {
> struct virtio_device *vdev = dev_to_virtio(dev);
>
> unregister_virtio_device(vdev);
> return 0;
> }
> +
> +static int rproc_vdev_do_start(struct rproc_subdev *subdev)
> +{
> + struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev);
> +
> + return rproc_add_virtio_dev(rvdev, rvdev->id);
> +}
> +
> +static void rproc_vdev_do_stop(struct rproc_subdev *subdev, bool crashed)
> +{
> + struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev);
> + int ret;
> +
> + ret = device_for_each_child(&rvdev->dev, NULL, rproc_remove_virtio_dev);
> + if (ret)
> + dev_warn(&rvdev->dev, "can't remove vdev child device: %d\n", ret);
> +}
> +
> +/**
> + * rproc_rvdev_release() - release the existence of a rvdev
> + *
> + * @dev: the subdevice's dev
> + */
> +static void rproc_rvdev_release(struct device *dev)
> +{
> + struct rproc_vdev *rvdev = container_of(dev, struct rproc_vdev, dev);
> +
> + of_reserved_mem_device_release(dev);
> +
> + kfree(rvdev);
> +}
> +
> +int rproc_rvdev_add_device(struct rproc_vdev *rvdev)
> +{
> + struct rproc *rproc = rvdev->rproc;
> + char name[16];
> + int ret;
> +
> + snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index);
> + rvdev->dev.parent = &rproc->dev;
> + rvdev->dev.release = rproc_rvdev_release;
> + dev_set_name(&rvdev->dev, "%s#%s", dev_name(rvdev->dev.parent), name);
> + dev_set_drvdata(&rvdev->dev, rvdev);
> +
> + ret = device_register(&rvdev->dev);
> + if (ret) {
> + put_device(&rvdev->dev);
> + return ret;
> + }
> + ret = copy_dma_range_map(&rvdev->dev, rproc->dev.parent);
> + if (ret)
> + goto free_rvdev;
> +
> + /* Make device dma capable by inheriting from parent's capabilities */
> + set_dma_ops(&rvdev->dev, get_dma_ops(rproc->dev.parent));
> +
> + ret = dma_coerce_mask_and_coherent(&rvdev->dev,
> + dma_get_mask(rproc->dev.parent));
> + if (ret) {
> + dev_warn(&rvdev->dev,
> + "Failed to set DMA mask %llx. Trying to continue... (%pe)\n",
> + dma_get_mask(rproc->dev.parent), ERR_PTR(ret));
> + }
> +
> + rproc_register_rvdev(rproc, rvdev);
> +
> + rvdev->subdev.start = rproc_vdev_do_start;
> + rvdev->subdev.stop = rproc_vdev_do_stop;
> +
> + rproc_add_subdev(rproc, &rvdev->subdev);
> +
> + return 0;
> +
> +free_rvdev:
> + device_unregister(&rvdev->dev);
> + return ret;
> +}
> +
> +static void rproc_rvdev_remove_device(struct rproc_vdev *rvdev)
> +{
> + struct rproc *rproc = rvdev->rproc;
> +
> + rproc_remove_subdev(rproc, &rvdev->subdev);
> + rproc_unregister_rvdev(rvdev);
> + device_unregister(&rvdev->dev);
> +}
> +
> +void rproc_vdev_release(struct kref *ref)
> +{
> + struct rproc_vdev *rvdev = container_of(ref, struct rproc_vdev, refcount);
> + struct rproc_vring *rvring;
> + int id;
> +
> + for (id = 0; id < ARRAY_SIZE(rvdev->vring); id++) {
> + rvring = &rvdev->vring[id];
> + rproc_free_vring(rvring);
> + }
> +
> + rproc_rvdev_remove_device(rvdev);
> +}
> --
> 2.17.1
>
^ permalink raw reply
* [PATCH] dt-bindings: spi-mux: Add reference to spi-peripheral-props.yaml schema
From: Rob Herring @ 2022-01-05 18:32 UTC (permalink / raw)
To: Mark Brown, Chris Packham; +Cc: linux-spi, devicetree, linux-kernel
The spi-mux serves as both a SPI peripheral and controller, so add a
reference to spi-peripheral-props.yaml in addition to
spi-controller.yaml. This is necessary to avoid unevaluatedProperties
warnings once those are fully enabled.
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: linux-spi@vger.kernel.org
Signed-off-by: Rob Herring <robh@kernel.org>
---
Documentation/devicetree/bindings/spi/spi-mux.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/spi/spi-mux.yaml b/Documentation/devicetree/bindings/spi/spi-mux.yaml
index 51c7622dc20b..7ea79f6d33f3 100644
--- a/Documentation/devicetree/bindings/spi/spi-mux.yaml
+++ b/Documentation/devicetree/bindings/spi/spi-mux.yaml
@@ -31,6 +31,7 @@ description: |
allOf:
- $ref: "/schemas/spi/spi-controller.yaml#"
+ - $ref: "/schemas/spi/spi-peripheral-props.yaml#"
maintainers:
- Chris Packham <chris.packham@alliedtelesis.co.nz>
--
2.32.0
^ permalink raw reply related
* Re: [PATCH v2 net-next 4/7] net: dsa: merge all bools of struct dsa_switch into a single u32
From: Florian Fainelli @ 2022-01-05 18:32 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: David S. Miller, Jakub Kicinski, Andrew Lunn, Vivien Didelot
In-Reply-To: <20220105132141.2648876-5-vladimir.oltean@nxp.com>
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> struct dsa_switch has 9 boolean properties, many of which are in fact
> set by drivers for custom behavior (vlan_filtering_is_global,
> needs_standalone_vlan_filtering, etc etc). The binary layout of the
> structure could be improved. For example, the "bool setup" at the
> beginning introduces a gratuitous 7 byte hole in the first cache line.
>
> The change merges all boolean properties into bitfields of an u32, and
> places that u32 in the first cache line of the structure, since many
> bools are accessed from the data path (untag_bridge_pvid, vlan_filtering,
> vlan_filtering_is_global).
>
> We place this u32 after the existing ds->index, which is also 4 bytes in
> size. As a positive side effect, ds->tagger_data now fits into the first
> cache line too, because 4 bytes are saved.
>
> Before:
>
> pahole -C dsa_switch net/dsa/slave.o
> struct dsa_switch {
> bool setup; /* 0 1 */
>
> /* XXX 7 bytes hole, try to pack */
>
> struct device * dev; /* 8 8 */
> struct dsa_switch_tree * dst; /* 16 8 */
> unsigned int index; /* 24 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct notifier_block nb; /* 32 24 */
>
> /* XXX last struct has 4 bytes of padding */
>
> void * priv; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> void * tagger_data; /* 64 8 */
> struct dsa_chip_data * cd; /* 72 8 */
> const struct dsa_switch_ops * ops; /* 80 8 */
> u32 phys_mii_mask; /* 88 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct mii_bus * slave_mii_bus; /* 96 8 */
> unsigned int ageing_time_min; /* 104 4 */
> unsigned int ageing_time_max; /* 108 4 */
> struct dsa_8021q_context * tag_8021q_ctx; /* 112 8 */
> struct devlink * devlink; /* 120 8 */
> /* --- cacheline 2 boundary (128 bytes) --- */
> unsigned int num_tx_queues; /* 128 4 */
> bool vlan_filtering_is_global; /* 132 1 */
> bool needs_standalone_vlan_filtering; /* 133 1 */
> bool configure_vlan_while_not_filtering; /* 134 1 */
> bool untag_bridge_pvid; /* 135 1 */
> bool assisted_learning_on_cpu_port; /* 136 1 */
> bool vlan_filtering; /* 137 1 */
> bool pcs_poll; /* 138 1 */
> bool mtu_enforcement_ingress; /* 139 1 */
> unsigned int num_lag_ids; /* 140 4 */
> unsigned int max_num_bridges; /* 144 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> size_t num_ports; /* 152 8 */
>
> /* size: 160, cachelines: 3, members: 27 */
> /* sum members: 141, holes: 4, sum holes: 19 */
> /* paddings: 1, sum paddings: 4 */
> /* last cacheline: 32 bytes */
> };
>
> After:
>
> pahole -C dsa_switch net/dsa/slave.o
> struct dsa_switch {
> struct device * dev; /* 0 8 */
> struct dsa_switch_tree * dst; /* 8 8 */
> unsigned int index; /* 16 4 */
> u32 setup:1; /* 20: 0 4 */
> u32 vlan_filtering_is_global:1; /* 20: 1 4 */
> u32 needs_standalone_vlan_filtering:1; /* 20: 2 4 */
> u32 configure_vlan_while_not_filtering:1; /* 20: 3 4 */
> u32 untag_bridge_pvid:1; /* 20: 4 4 */
> u32 assisted_learning_on_cpu_port:1; /* 20: 5 4 */
> u32 vlan_filtering:1; /* 20: 6 4 */
> u32 pcs_poll:1; /* 20: 7 4 */
> u32 mtu_enforcement_ingress:1; /* 20: 8 4 */
>
> /* XXX 23 bits hole, try to pack */
>
> struct notifier_block nb; /* 24 24 */
>
> /* XXX last struct has 4 bytes of padding */
>
> void * priv; /* 48 8 */
> void * tagger_data; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_chip_data * cd; /* 64 8 */
> const struct dsa_switch_ops * ops; /* 72 8 */
> u32 phys_mii_mask; /* 80 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct mii_bus * slave_mii_bus; /* 88 8 */
> unsigned int ageing_time_min; /* 96 4 */
> unsigned int ageing_time_max; /* 100 4 */
> struct dsa_8021q_context * tag_8021q_ctx; /* 104 8 */
> struct devlink * devlink; /* 112 8 */
> unsigned int num_tx_queues; /* 120 4 */
> unsigned int num_lag_ids; /* 124 4 */
> /* --- cacheline 2 boundary (128 bytes) --- */
> unsigned int max_num_bridges; /* 128 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> size_t num_ports; /* 136 8 */
>
> /* size: 144, cachelines: 3, members: 27 */
> /* sum members: 132, holes: 2, sum holes: 8 */
> /* sum bitfield members: 9 bits, bit holes: 1, sum bit holes: 23 bits */
> /* paddings: 1, sum paddings: 4 */
> /* last cacheline: 16 bytes */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply
* Re: [bug] GNOME loses all settings following failure to resume from suspend
From: Filipe Manana @ 2022-01-05 18:32 UTC (permalink / raw)
To: Chris Murphy; +Cc: Btrfs BTRFS, Josef Bacik
In-Reply-To: <YdXdtrHb9nTYgFo7@debian9.Home>
On Wed, Jan 05, 2022 at 06:04:38PM +0000, Filipe Manana wrote:
> On Wed, Jan 05, 2022 at 10:34:10AM -0700, Chris Murphy wrote:
> > https://gitlab.gnome.org/GNOME/dconf/-/issues/73
> >
> > Following a crash, instead of either the old or new dconf database
> > file being present, a corrupt one is present.
> >
> > dconf uses g_file_set_contents() to atomically update the database
> > file, which effectively inhibits (one or more?) fsync's, yet somehow
> > in the crash/powerfail case this is resulting in a corrupt dconf
> > database. I don't know if by "corrupt" this is a 0 length file or some
> > other effect.
>
> Looking at the issue, Sebastian Keller posted a patch to disable one
> optimization in glib, that should fix it.
>
> Looking at the code before that patch, it explicitly skips fsync after
> a rename pointing out to:
>
> https://btrfs.wiki.kernel.org/index.php/FAQ#What_are_the_crash_guarantees_of_overwrite-by-rename.3F
>
> I'm afraid that information is wrong, perhaps it might have been true in
> some very distant past, but certainly not for many years.
After some digging in git history:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8d875f95da43c6a8f18f77869f2ef26e9594fecc
So that guarantee existed until August 2014.
Not anymore, and no one should rely on it (except when using "-o flushoncommit").
>
> The wiki says, doing something like this:
>
> echo "oldcontent" > file
>
> # make sure oldcontent is on disk
> sync
>
> echo "newcontent" > file.tmp
> mv -f file.tmp file
>
> # *crash*
>
> Will give either:
>
> file contains "newcontent"; file.tmp does not exist
> file contains "oldcontent"; file.tmp may contain "newcontent", be zero-length or not exists at all.
>
> However that's not true, there's a chance 'file' will be empty.
>
> During a rename with overwrite we trigger writeback (via filemap_flush())
> of the file being renamed but never wait for it to complete before
> returning to user space. So what can happen is:
>
> 1) We trigger writeback;
>
> 2) We join the current transaction and do the rename;
>
> 3) We return from rename to user space with success (0);
>
> 4) Writeback didn't finish yet, or it has finished but the
> ordered extent is not yet complete - i.e. btrfs_finish_ordered_io()
> did not complete yet;
>
> 5) The transaction used by the rename is committed;
> A transaction commit does not wait for any writeback or in flight
> ordered extents to complete - except if the fs is mounted with
> "-o flushoncommit";
>
> 6) Crash
>
> After mounting the fs again 'file' is empty and 'file.tmp' does not exists.
>
> The only for that to guarantee 'file' is not empty and has the expected
> data ("newcontent"), would be to mount with -o flushoncommit.
>
> I don't think I have a wiki account enabled, but I'll see if I get that
> updated soon.
>
> Thanks.
>
> >
> > Thanks,
> >
> > --
> > Chris Murphy
^ permalink raw reply
* [PATCH] qemu_fw_cfg: use default_groups in kobj_type
From: Greg Kroah-Hartman @ 2022-01-05 18:31 UTC (permalink / raw)
To: linux-kernel
Cc: Greg Kroah-Hartman, Gabriel Somlo, qemu-devel, Michael S. Tsirkin
There are currently 2 ways to create a set of sysfs files for a
kobj_type, through the default_attrs field, and the default_groups
field. Move the firmware qemu_fw_cfg sysfs code to use default_groups
field which has been the preferred way since aa30f47cf666 ("kobject: Add
support for default attribute groups to kobj_type") so that we can soon
get rid of the obsolete default_attrs field.
Cc: Gabriel Somlo <somlo@cmu.edu>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: qemu-devel@nongnu.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/firmware/qemu_fw_cfg.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index 172c751a4f6c..c62f05420d32 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -395,7 +395,7 @@ static void fw_cfg_sysfs_cache_cleanup(void)
}
}
-/* default_attrs: per-entry attributes and show methods */
+/* per-entry attributes and show methods */
#define FW_CFG_SYSFS_ATTR(_attr) \
struct fw_cfg_sysfs_attribute fw_cfg_sysfs_attr_##_attr = { \
@@ -428,6 +428,7 @@ static struct attribute *fw_cfg_sysfs_entry_attrs[] = {
&fw_cfg_sysfs_attr_name.attr,
NULL,
};
+ATTRIBUTE_GROUPS(fw_cfg_sysfs_entry);
/* sysfs_ops: find fw_cfg_[entry, attribute] and call appropriate show method */
static ssize_t fw_cfg_sysfs_attr_show(struct kobject *kobj, struct attribute *a,
@@ -454,7 +455,7 @@ static void fw_cfg_sysfs_release_entry(struct kobject *kobj)
/* kobj_type: ties together all properties required to register an entry */
static struct kobj_type fw_cfg_sysfs_entry_ktype = {
- .default_attrs = fw_cfg_sysfs_entry_attrs,
+ .default_groups = fw_cfg_sysfs_entry_groups,
.sysfs_ops = &fw_cfg_sysfs_attr_ops,
.release = fw_cfg_sysfs_release_entry,
};
--
2.34.1
^ permalink raw reply related
* Re: [PATCH v2 net-next 5/7] net: dsa: make dsa_switch :: num_ports an unsigned int
From: Florian Fainelli @ 2022-01-05 18:33 UTC (permalink / raw)
To: Vladimir Oltean, netdev
Cc: David S. Miller, Jakub Kicinski, Andrew Lunn, Vivien Didelot
In-Reply-To: <20220105132141.2648876-6-vladimir.oltean@nxp.com>
On 1/5/22 5:21 AM, Vladimir Oltean wrote:
> Currently, num_ports is declared as size_t, which is defined as
> __kernel_ulong_t, therefore it occupies 8 bytes of memory.
>
> Even switches with port numbers in the range of tens are exotic, so
> there is no need for this amount of storage.
>
> Additionally, because the max_num_bridges member right above it is also
> 4 bytes, it means the compiler needs to add padding between the last 2
> fields. By reducing the size, we don't need that padding and can reduce
> the struct size.
>
> Before:
>
> pahole -C dsa_switch net/dsa/slave.o
> struct dsa_switch {
> struct device * dev; /* 0 8 */
> struct dsa_switch_tree * dst; /* 8 8 */
> unsigned int index; /* 16 4 */
> u32 setup:1; /* 20: 0 4 */
> u32 vlan_filtering_is_global:1; /* 20: 1 4 */
> u32 needs_standalone_vlan_filtering:1; /* 20: 2 4 */
> u32 configure_vlan_while_not_filtering:1; /* 20: 3 4 */
> u32 untag_bridge_pvid:1; /* 20: 4 4 */
> u32 assisted_learning_on_cpu_port:1; /* 20: 5 4 */
> u32 vlan_filtering:1; /* 20: 6 4 */
> u32 pcs_poll:1; /* 20: 7 4 */
> u32 mtu_enforcement_ingress:1; /* 20: 8 4 */
>
> /* XXX 23 bits hole, try to pack */
>
> struct notifier_block nb; /* 24 24 */
>
> /* XXX last struct has 4 bytes of padding */
>
> void * priv; /* 48 8 */
> void * tagger_data; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_chip_data * cd; /* 64 8 */
> const struct dsa_switch_ops * ops; /* 72 8 */
> u32 phys_mii_mask; /* 80 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct mii_bus * slave_mii_bus; /* 88 8 */
> unsigned int ageing_time_min; /* 96 4 */
> unsigned int ageing_time_max; /* 100 4 */
> struct dsa_8021q_context * tag_8021q_ctx; /* 104 8 */
> struct devlink * devlink; /* 112 8 */
> unsigned int num_tx_queues; /* 120 4 */
> unsigned int num_lag_ids; /* 124 4 */
> /* --- cacheline 2 boundary (128 bytes) --- */
> unsigned int max_num_bridges; /* 128 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> size_t num_ports; /* 136 8 */
>
> /* size: 144, cachelines: 3, members: 27 */
> /* sum members: 132, holes: 2, sum holes: 8 */
> /* sum bitfield members: 9 bits, bit holes: 1, sum bit holes: 23 bits */
> /* paddings: 1, sum paddings: 4 */
> /* last cacheline: 16 bytes */
> };
>
> After:
>
> pahole -C dsa_switch net/dsa/slave.o
> struct dsa_switch {
> struct device * dev; /* 0 8 */
> struct dsa_switch_tree * dst; /* 8 8 */
> unsigned int index; /* 16 4 */
> u32 setup:1; /* 20: 0 4 */
> u32 vlan_filtering_is_global:1; /* 20: 1 4 */
> u32 needs_standalone_vlan_filtering:1; /* 20: 2 4 */
> u32 configure_vlan_while_not_filtering:1; /* 20: 3 4 */
> u32 untag_bridge_pvid:1; /* 20: 4 4 */
> u32 assisted_learning_on_cpu_port:1; /* 20: 5 4 */
> u32 vlan_filtering:1; /* 20: 6 4 */
> u32 pcs_poll:1; /* 20: 7 4 */
> u32 mtu_enforcement_ingress:1; /* 20: 8 4 */
>
> /* XXX 23 bits hole, try to pack */
>
> struct notifier_block nb; /* 24 24 */
>
> /* XXX last struct has 4 bytes of padding */
>
> void * priv; /* 48 8 */
> void * tagger_data; /* 56 8 */
> /* --- cacheline 1 boundary (64 bytes) --- */
> struct dsa_chip_data * cd; /* 64 8 */
> const struct dsa_switch_ops * ops; /* 72 8 */
> u32 phys_mii_mask; /* 80 4 */
>
> /* XXX 4 bytes hole, try to pack */
>
> struct mii_bus * slave_mii_bus; /* 88 8 */
> unsigned int ageing_time_min; /* 96 4 */
> unsigned int ageing_time_max; /* 100 4 */
> struct dsa_8021q_context * tag_8021q_ctx; /* 104 8 */
> struct devlink * devlink; /* 112 8 */
> unsigned int num_tx_queues; /* 120 4 */
> unsigned int num_lag_ids; /* 124 4 */
> /* --- cacheline 2 boundary (128 bytes) --- */
> unsigned int max_num_bridges; /* 128 4 */
> unsigned int num_ports; /* 132 4 */
>
> /* size: 136, cachelines: 3, members: 27 */
> /* sum members: 128, holes: 1, sum holes: 4 */
> /* sum bitfield members: 9 bits, bit holes: 1, sum bit holes: 23 bits */
> /* paddings: 1, sum paddings: 4 */
> /* last cacheline: 8 bytes */
> };
>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply
* stable-rc/queue/5.4 build: 188 builds: 3 failed, 185 passed, 4 errors, 28 warnings (v5.4.170-2-g8ebc30b5d171)
From: kernelci.org bot @ 2022-01-05 18:33 UTC (permalink / raw)
To: stable, kernel-build-reports, kernelci-results
stable-rc/queue/5.4 build: 188 builds: 3 failed, 185 passed, 4 errors, 28 warnings (v5.4.170-2-g8ebc30b5d171)
Full Build Summary: https://kernelci.org/build/stable-rc/branch/queue%2F5.4/kernel/v5.4.170-2-g8ebc30b5d171/
Tree: stable-rc
Branch: queue/5.4
Git Describe: v5.4.170-2-g8ebc30b5d171
Git Commit: 8ebc30b5d171593e37581f6356878fbad3800deb
Git URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Built: 7 unique architectures
Build Failures Detected:
arm:
rpc_defconfig: (gcc-10) FAIL
mips:
ip27_defconfig: (gcc-10) FAIL
ip28_defconfig: (gcc-10) FAIL
Errors and Warnings Detected:
arc:
arm64:
defconfig (gcc-10): 2 warnings
defconfig+arm64-chromebook (gcc-10): 2 warnings
arm:
assabet_defconfig (gcc-10): 1 warning
collie_defconfig (gcc-10): 1 warning
h3600_defconfig (gcc-10): 1 warning
neponset_defconfig (gcc-10): 1 warning
rpc_defconfig (gcc-10): 4 errors
shannon_defconfig (gcc-10): 1 warning
i386:
allnoconfig (gcc-10): 2 warnings
i386_defconfig (gcc-10): 2 warnings
tinyconfig (gcc-10): 2 warnings
mips:
mtx1_defconfig (gcc-10): 3 warnings
riscv:
x86_64:
allnoconfig (gcc-10): 3 warnings
tinyconfig (gcc-10): 3 warnings
x86_64_defconfig (gcc-10): 2 warnings
x86_64_defconfig+x86-chromebook (gcc-10): 2 warnings
Errors summary:
2 arm-linux-gnueabihf-gcc: error: unrecognized -march target: armv3m
2 arm-linux-gnueabihf-gcc: error: missing argument to ‘-march=’
Warnings summary:
7 ld: warning: creating DT_TEXTREL in a PIE
5 drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
4 ld: arch/x86/boot/compressed/head_64.o: warning: relocation in read-only section `.head.text'
4 arch/arm64/include/asm/memory.h:238:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
3 ld: arch/x86/boot/compressed/head_32.o: warning: relocation in read-only section `.head.text'
2 sound/pci/echoaudio/echoaudio_dsp.c:647:9: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
2 arch/x86/entry/entry_64.S:1732: Warning: no instruction mnemonic suffix given and no register operands; using default for `sysret'
1 sound/pci/echoaudio/echoaudio_dsp.c:658:9: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
Section mismatches summary:
2 WARNING: vmlinux.o(.text+0xcacc): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text.unlikely+0x349c): Section mismatch in reference from the function pmax_setup_memory_region() to the function .init.text:add_memory_region()
1 WARNING: vmlinux.o(.text+0xcf00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xce00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xcd0c): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xcc00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xcad4): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xcaac): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xc978): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xc834): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0xb8d0): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0x7ecc): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
1 WARNING: vmlinux.o(.text+0x7530): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
================================================================================
Detailed per-defconfig build reports:
--------------------------------------------------------------------------------
32r2el_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
allnoconfig (i386, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
ld: arch/x86/boot/compressed/head_32.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
allnoconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
allnoconfig (x86_64, gcc-10) — PASS, 0 errors, 3 warnings, 0 section mismatches
Warnings:
arch/x86/entry/entry_64.S:1732: Warning: no instruction mnemonic suffix given and no register operands; using default for `sysret'
ld: arch/x86/boot/compressed/head_64.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
am200epdkit_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ar7_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
aspeed_g4_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
aspeed_g5_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
assabet_defconfig (arm, gcc-10) — PASS, 0 errors, 1 warning, 0 section mismatches
Warnings:
drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
Section mismatches:
WARNING: vmlinux.o(.text+0xcacc): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
at91_dt_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ath25_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ath79_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
axm55xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
axs103_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
axs103_smp_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
badge4_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xcc00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
bcm2835_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
bcm47xx_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
bcm63xx_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
bigsur_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
bmips_be_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
bmips_stb_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
capcella_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
cavium_octeon_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
cerfcube_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0x7530): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
ci20_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
cm_x2xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
cm_x300_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
cobalt_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
colibri_pxa270_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
colibri_pxa300_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
collie_defconfig (arm, gcc-10) — PASS, 0 errors, 1 warning, 0 section mismatches
Warnings:
drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
Section mismatches:
WARNING: vmlinux.o(.text+0xb8d0): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
corgi_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
davinci_all_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
db1xxx_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
decstation_64_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
decstation_r4k_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text.unlikely+0x349c): Section mismatch in reference from the function pmax_setup_memory_region() to the function .init.text:add_memory_region()
--------------------------------------------------------------------------------
defconfig (riscv, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
defconfig (arm64, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
arch/arm64/include/asm/memory.h:238:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
arch/arm64/include/asm/memory.h:238:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
--------------------------------------------------------------------------------
defconfig+arm64-chromebook (arm64, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
arch/arm64/include/asm/memory.h:238:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
arch/arm64/include/asm/memory.h:238:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
--------------------------------------------------------------------------------
dove_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
e55_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ebsa110_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
efm32_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
em_x270_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ep93xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0x7ecc): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
eseries_pxa_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
exynos_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ezx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
footbridge_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
fuloong2e_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
gcw0_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
gemini_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
gpr_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
h3600_defconfig (arm, gcc-10) — PASS, 0 errors, 1 warning, 0 section mismatches
Warnings:
drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
Section mismatches:
WARNING: vmlinux.o(.text+0xcacc): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
h5000_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
hackkit_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xce00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
haps_hs_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
haps_hs_smp_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
hisi_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
hsdk_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
i386_defconfig (i386, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
ld: arch/x86/boot/compressed/head_32.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
imote2_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
imx_v4_v5_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
imx_v6_v7_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
integrator_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
iop32x_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ip22_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ip27_defconfig (mips, gcc-10) — FAIL, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ip28_defconfig (mips, gcc-10) — FAIL, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ip32_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
ixp4xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
jazz_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
jmr3927_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
jornada720_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xc978): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
keystone_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lart_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xcad4): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
lasat_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lemote2f_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
loongson1b_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
loongson1c_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
loongson3_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lpc18xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lpc32xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lpd270_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
lubbock_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
magician_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mainstone_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
malta_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
malta_kvm_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
malta_kvm_guest_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
malta_qemu_32r6_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
maltaaprp_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
maltasmvp_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
maltasmvp_eva_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
maltaup_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
maltaup_xpa_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
markeins_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
milbeaut_m10v_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mini2440_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mips_paravirt_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mmp2_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
moxart_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mpc30x_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mps2_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
msp71xx_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mtx1_defconfig (mips, gcc-10) — PASS, 0 errors, 3 warnings, 0 section mismatches
Warnings:
sound/pci/echoaudio/echoaudio_dsp.c:647:9: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
sound/pci/echoaudio/echoaudio_dsp.c:658:9: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
sound/pci/echoaudio/echoaudio_dsp.c:647:9: warning: iteration 1073741824 invokes undefined behavior [-Waggressive-loop-optimizations]
--------------------------------------------------------------------------------
multi_v4t_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
multi_v5_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
multi_v7_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mvebu_v5_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mvebu_v7_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
mxs_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
neponset_defconfig (arm, gcc-10) — PASS, 0 errors, 1 warning, 0 section mismatches
Warnings:
drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
Section mismatches:
WARNING: vmlinux.o(.text+0xcd0c): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
netwinder_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nhk8815_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nlm_xlp_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nlm_xlr_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nsim_hs_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nsim_hs_smp_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nsimosci_hs_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
nsimosci_hs_smp_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
omap1_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
omap2plus_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
omega2p_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
orion5x_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
oxnas_v6_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
palmz72_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pcm027_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pic32mzda_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pistachio_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pleb_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xc834): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
pnx8335_stb225_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
prima2_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pxa168_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pxa255-idp_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pxa3xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pxa910_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
pxa_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
qcom_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
qi_lb60_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
rb532_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
rbtx49xx_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
realview_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
rm200_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
rpc_defconfig (arm, gcc-10) — FAIL, 4 errors, 0 warnings, 0 section mismatches
Errors:
arm-linux-gnueabihf-gcc: error: unrecognized -march target: armv3m
arm-linux-gnueabihf-gcc: error: missing argument to ‘-march=’
arm-linux-gnueabihf-gcc: error: unrecognized -march target: armv3m
arm-linux-gnueabihf-gcc: error: missing argument to ‘-march=’
--------------------------------------------------------------------------------
rt305x_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
s3c2410_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
s3c6400_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
s5pv210_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
sama5_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
sb1250_swarm_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
shannon_defconfig (arm, gcc-10) — PASS, 0 errors, 1 warning, 0 section mismatches
Warnings:
drivers/video/fbdev/sa1100fb.c:975:21: warning: ‘sa1100fb_min_dma_period’ defined but not used [-Wunused-function]
Section mismatches:
WARNING: vmlinux.o(.text+0xcaac): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
shmobile_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
simpad_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
Section mismatches:
WARNING: vmlinux.o(.text+0xcf00): Section mismatch in reference from the function __arm_ioremap_pfn_caller() to the function .meminit.text:memblock_is_map_memory()
--------------------------------------------------------------------------------
socfpga_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
spear13xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
spear3xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
spear6xx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
spitz_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
stm32_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
sunxi_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tango4_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tb0219_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tb0226_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tb0287_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tct_hammer_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tegra_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
tinyconfig (x86_64, gcc-10) — PASS, 0 errors, 3 warnings, 0 section mismatches
Warnings:
arch/x86/entry/entry_64.S:1732: Warning: no instruction mnemonic suffix given and no register operands; using default for `sysret'
ld: arch/x86/boot/compressed/head_64.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
tinyconfig (i386, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
ld: arch/x86/boot/compressed/head_32.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
tinyconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
trizeps4_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
u300_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
u8500_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vdk_hs38_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vdk_hs38_smp_defconfig (arc, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
versatile_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vexpress_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vf610m4_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
viper_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vocore2_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
vt8500_v6_v7_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
workpad_defconfig (mips, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
x86_64_defconfig (x86_64, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
ld: arch/x86/boot/compressed/head_64.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
x86_64_defconfig+x86-chromebook (x86_64, gcc-10) — PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
ld: arch/x86/boot/compressed/head_64.o: warning: relocation in read-only section `.head.text'
ld: warning: creating DT_TEXTREL in a PIE
--------------------------------------------------------------------------------
xcep_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
zeus_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
--------------------------------------------------------------------------------
zx_defconfig (arm, gcc-10) — PASS, 0 errors, 0 warnings, 0 section mismatches
---
For more info write to <info@kernelci.org>
^ permalink raw reply
* [PATCH V3 0/1] nvme: Add verbose error logging
From: Alan Adamson @ 2022-01-05 18:32 UTC (permalink / raw)
To: linux-nvme; +Cc: alan.adamson, kbusch, hch, sagi
V3:
- Don't populate nvme_errors[] array with NULL strings.
V2:
- Change nvme_errors[] to a sparse array where the status is used as an index into the array.
- Change pr_err() to pr_err_ratelimited().
- By enabling CONFIG_NVME_VERBOSE_ERRORS, the verbose status error is displayed. If it is not
enabled, then a message will still be displayed, but without the verbose status.
- Remove call to nvme_error_status() when determining whether to call nvme_error_log(). Speeds
up the fast path just a bit.
This patch improves logging for NVMe errors. Currently, we only get a
a vague idea as to why commands fail since only the block layer status
is captured on error. This patch allows us to see why a command was failed
by the controller. This is very useful when debugging problems in the field.
An example of an improved logged error:
[ 4652.812867] nvme0n1: Read @ LBA 1536, 1 blocks, Unrecovered Read Error (sct 0x2 / sc 0x81) DNR
Alan Adamson (1):
nvme: Add verbose error logging
drivers/nvme/host/Kconfig | 8 ++
drivers/nvme/host/Makefile | 2 +-
drivers/nvme/host/core.c | 3 +
drivers/nvme/host/errors.c | 181 +++++++++++++++++++++++++++++++++++++
drivers/nvme/host/nvme.h | 2 +
include/linux/nvme.h | 1 +
6 files changed, 196 insertions(+), 1 deletion(-)
create mode 100644 drivers/nvme/host/errors.c
--
2.27.0
^ permalink raw reply
* [PATCH V3 1/1] nvme: Add verbose error logging
From: Alan Adamson @ 2022-01-05 18:32 UTC (permalink / raw)
To: linux-nvme; +Cc: alan.adamson, kbusch, hch, sagi
In-Reply-To: <20220105183249.22088-1-alan.adamson@oracle.com>
Improves logging of NVMe errors. If NVME_VERBOSE_ERRORS is configured,
a verbose description of the error is logged, otherwise only status codes/bits
is logged.
Verbose logging example:
nvme0n1: Read @ LBA 2304, 1 blocks, Unrecovered Read Error (sct 0x2 / sc 0x81) DNR
Non-verbose logging example:
nvme0n1: Read @ LBA 2304, 1 blocks, NVME Error (sct 0x2 / sc 0x81) DNR
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Alan Adamson <alan.adamson@oracle.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
---
drivers/nvme/host/Kconfig | 8 ++
drivers/nvme/host/Makefile | 2 +-
drivers/nvme/host/core.c | 3 +
drivers/nvme/host/errors.c | 181 +++++++++++++++++++++++++++++++++++++
drivers/nvme/host/nvme.h | 2 +
include/linux/nvme.h | 1 +
6 files changed, 196 insertions(+), 1 deletion(-)
create mode 100644 drivers/nvme/host/errors.c
diff --git a/drivers/nvme/host/Kconfig b/drivers/nvme/host/Kconfig
index dc0450ca23a3..d6d056963c06 100644
--- a/drivers/nvme/host/Kconfig
+++ b/drivers/nvme/host/Kconfig
@@ -24,6 +24,14 @@ config NVME_MULTIPATH
/dev/nvmeXnY device will show up for each NVMe namespace,
even if it is accessible through multiple controllers.
+config NVME_VERBOSE_ERRORS
+ bool "NVMe verbose error reporting"
+ depends on NVME_CORE
+ help
+ This option enables verbose reporting for NVMe errors. The
+ error translation table will grow the kernel image size by
+ about 4 KB.
+
config NVME_HWMON
bool "NVMe hardware monitoring"
depends on (NVME_CORE=y && HWMON=y) || (NVME_CORE=m && HWMON)
diff --git a/drivers/nvme/host/Makefile b/drivers/nvme/host/Makefile
index dfaacd472e5d..ea3d702feb51 100644
--- a/drivers/nvme/host/Makefile
+++ b/drivers/nvme/host/Makefile
@@ -9,7 +9,7 @@ obj-$(CONFIG_NVME_RDMA) += nvme-rdma.o
obj-$(CONFIG_NVME_FC) += nvme-fc.o
obj-$(CONFIG_NVME_TCP) += nvme-tcp.o
-nvme-core-y := core.o ioctl.o
+nvme-core-y := core.o ioctl.o errors.o
nvme-core-$(CONFIG_TRACING) += trace.o
nvme-core-$(CONFIG_NVME_MULTIPATH) += multipath.o
nvme-core-$(CONFIG_BLK_DEV_ZONED) += zns.o
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 1af8a4513708..fda029a55436 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -354,6 +354,9 @@ void nvme_complete_rq(struct request *req)
switch (nvme_decide_disposition(req)) {
case COMPLETE:
+ if (unlikely(nvme_req(req)->status != NVME_SC_SUCCESS))
+ nvme_error_log(req);
+
nvme_end_req(req);
return;
case RETRY:
diff --git a/drivers/nvme/host/errors.c b/drivers/nvme/host/errors.c
new file mode 100644
index 000000000000..2668d2f584e2
--- /dev/null
+++ b/drivers/nvme/host/errors.c
@@ -0,0 +1,181 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * NVM Express device driver verbose errors
+ * Copyright (c) 2021, Oracle and/or its affiliates
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/blkdev.h>
+#include "nvme.h"
+
+struct nvme_string_table {
+ unsigned int code;
+ const unsigned char *string;
+};
+
+static const struct nvme_string_table nvme_ops[] = {
+ { REQ_OP_READ, "Read" },
+ { REQ_OP_WRITE, "Write" },
+ { REQ_OP_FLUSH, "Flush" },
+ { REQ_OP_DISCARD, "Deallocate (DSM)" },
+ { REQ_OP_WRITE_ZEROES, "Write Zeroes" },
+ { REQ_OP_ZONE_RESET_ALL, "Zone Reset All" },
+ { REQ_OP_ZONE_RESET, "Zone Reset" },
+ { REQ_OP_ZONE_OPEN, "Zone Open" },
+ { REQ_OP_ZONE_CLOSE, "Zone Close" },
+ { REQ_OP_ZONE_FINISH, "Zone Finish" },
+ { REQ_OP_ZONE_APPEND, "Zone Append" },
+};
+#define NVME_OPS_SIZE ARRAY_SIZE(nvme_ops)
+
+#ifdef CONFIG_NVME_VERBOSE_ERRORS
+static const char * const nvme_errors[] = {
+ [NVME_SC_SUCCESS] = "Success",
+ [NVME_SC_INVALID_OPCODE] = "Invalid Command Opcode",
+ [NVME_SC_INVALID_FIELD] = "Invalid Field in Command",
+ [NVME_SC_CMDID_CONFLICT] = "Command ID Conflict",
+ [NVME_SC_DATA_XFER_ERROR] = "Data Transfer Error",
+ [NVME_SC_POWER_LOSS] = "Commands Aborted due to Power Loss Notification",
+ [NVME_SC_INTERNAL] = "Internal Error",
+ [NVME_SC_ABORT_REQ] = "Command Abort Requested",
+ [NVME_SC_ABORT_QUEUE] = "Command Aborted due to SQ Deletion",
+ [NVME_SC_FUSED_FAIL] = "Command Aborted due to Failed Fused Command",
+ [NVME_SC_FUSED_MISSING] = "Command Aborted due to Missing Fused Command",
+ [NVME_SC_INVALID_NS] = "Invalid Namespace or Format",
+ [NVME_SC_CMD_SEQ_ERROR] = "Command Sequence Error",
+ [NVME_SC_SGL_INVALID_LAST] = "Invalid SGL Segment Descriptor",
+ [NVME_SC_SGL_INVALID_COUNT] = "Invalid Number of SGL Descriptors",
+ [NVME_SC_SGL_INVALID_DATA] = "Data SGL Length Invalid",
+ [NVME_SC_SGL_INVALID_METADATA] = "Metadata SGL Length Invalid",
+ [NVME_SC_SGL_INVALID_TYPE] = "SGL Descriptor Type Invalid",
+ [NVME_SC_CMB_INVALID_USE] = "Invalid Use of Controller Memory Buffer",
+ [NVME_SC_PRP_INVALID_OFFSET] = "PRP Offset Invalid",
+ [NVME_SC_ATOMIC_WU_EXCEEDED] = "Atomic Write Unit Exceeded",
+ [NVME_SC_OP_DENIED] = "Operation Denied",
+ [NVME_SC_SGL_INVALID_OFFSET] = "SGL Offset Invalid",
+ [NVME_SC_RESERVED] = "Reserved",
+ [NVME_SC_HOST_ID_INCONSIST] = "Host Identifier Inconsistent Format",
+ [NVME_SC_KA_TIMEOUT_EXPIRED] = "Keep Alive Timeout Expired",
+ [NVME_SC_KA_TIMEOUT_INVALID] = "Keep Alive Timeout Invalid",
+ [NVME_SC_ABORTED_PREEMPT_ABORT] = "Command Aborted due to Preempt and Abort",
+ [NVME_SC_SANITIZE_FAILED] = "Sanitize Failed",
+ [NVME_SC_SANITIZE_IN_PROGRESS] = "Sanitize In Progress",
+ [NVME_SC_SGL_INVALID_GRANULARITY] = "SGL Data Block Granularity Invalid",
+ [NVME_SC_CMD_NOT_SUP_CMB_QUEUE] = "Command Not Supported for Queue in CMB",
+ [NVME_SC_NS_WRITE_PROTECTED] = "Namespace is Write Protected",
+ [NVME_SC_CMD_INTERRUPTED] = "Command Interrupted",
+ [NVME_SC_TRANSIENT_TR_ERR] = "Transient Transport Error",
+ [NVME_SC_INVALID_IO_CMD_SET] = "Invalid IO Command Set",
+ [NVME_SC_LBA_RANGE] = "LBA Out of Range",
+ [NVME_SC_CAP_EXCEEDED] = "Capacity Exceeded",
+ [NVME_SC_NS_NOT_READY] = "Namespace Not Ready",
+ [NVME_SC_RESERVATION_CONFLICT] = "Reservation Conflict",
+ [NVME_SC_FORMAT_IN_PROGRESS] = "Format In Progress",
+ [NVME_SC_CQ_INVALID] = "Completion Queue Invalid",
+ [NVME_SC_QID_INVALID] = "Invalid Queue Identifier",
+ [NVME_SC_QUEUE_SIZE] = "Invalid Queue Size",
+ [NVME_SC_ABORT_LIMIT] = "Abort Command Limit Exceeded",
+ [NVME_SC_ABORT_MISSING] = "Reserved", /* XXX */
+ [NVME_SC_ASYNC_LIMIT] = "Asynchronous Event Request Limit Exceeded",
+ [NVME_SC_FIRMWARE_SLOT] = "Invalid Firmware Slot",
+ [NVME_SC_FIRMWARE_IMAGE] = "Invalid Firmware Image",
+ [NVME_SC_INVALID_VECTOR] = "Invalid Interrupt Vector",
+ [NVME_SC_INVALID_LOG_PAGE] = "Invalid Log Page",
+ [NVME_SC_INVALID_FORMAT] = "Invalid Format",
+ [NVME_SC_FW_NEEDS_CONV_RESET] = "Firmware Activation Requires Conventional Reset",
+ [NVME_SC_INVALID_QUEUE] = "Invalid Queue Deletion",
+ [NVME_SC_FEATURE_NOT_SAVEABLE] = "Feature Identifier Not Saveable",
+ [NVME_SC_FEATURE_NOT_CHANGEABLE] = "Feature Not Changeable",
+ [NVME_SC_FEATURE_NOT_PER_NS] = "Feature Not Namespace Specific",
+ [NVME_SC_FW_NEEDS_SUBSYS_RESET] = "Firmware Activation Requires NVM Subsystem Reset",
+ [NVME_SC_FW_NEEDS_RESET] = "Firmware Activation Requires Reset",
+ [NVME_SC_FW_NEEDS_MAX_TIME] = "Firmware Activation Requires Maximum Time Violation",
+ [NVME_SC_FW_ACTIVATE_PROHIBITED] = "Firmware Activation Prohibited",
+ [NVME_SC_OVERLAPPING_RANGE] = "Overlapping Range",
+ [NVME_SC_NS_INSUFFICIENT_CAP] = "Namespace Insufficient Capacity",
+ [NVME_SC_NS_ID_UNAVAILABLE] = "Namespace Identifier Unavailable",
+ [NVME_SC_NS_ALREADY_ATTACHED] = "Namespace Already Attached",
+ [NVME_SC_NS_IS_PRIVATE] = "Namespace Is Private",
+ [NVME_SC_NS_NOT_ATTACHED] = "Namespace Not Attached",
+ [NVME_SC_THIN_PROV_NOT_SUPP] = "Thin Provisioning Not Supported",
+ [NVME_SC_CTRL_LIST_INVALID] = "Controller List Invalid",
+ [NVME_SC_SELT_TEST_IN_PROGRESS] = "Device Self-test In Progress",
+ [NVME_SC_BP_WRITE_PROHIBITED] = "Boot Partition Write Prohibited",
+ [NVME_SC_CTRL_ID_INVALID] = "Invalid Controller Identifier",
+ [NVME_SC_SEC_CTRL_STATE_INVALID] = "Invalid Secondary Controller State",
+ [NVME_SC_CTRL_RES_NUM_INVALID] = "Invalid Number of Controller Resources",
+ [NVME_SC_RES_ID_INVALID] = "Invalid Resource Identifier",
+ [NVME_SC_PMR_SAN_PROHIBITED] = "Sanitize Prohibited",
+ [NVME_SC_ANA_GROUP_ID_INVALID] = "ANA Group Identifier Invalid",
+ [NVME_SC_ANA_ATTACH_FAILED] = "ANA Attach Failed",
+ [NVME_SC_BAD_ATTRIBUTES] = "Conflicting Attributes",
+ [NVME_SC_INVALID_PI] = "Invalid Protection Information",
+ [NVME_SC_READ_ONLY] = "Attempted Write to Read Only Range",
+ [NVME_SC_ONCS_NOT_SUPPORTED] = "ONCS Not Supported",
+ [NVME_SC_ZONE_BOUNDARY_ERROR] = "Zoned Boundary Error",
+ [NVME_SC_ZONE_FULL] = "Zone Is Full",
+ [NVME_SC_ZONE_READ_ONLY] = "Zone Is Read Only",
+ [NVME_SC_ZONE_OFFLINE] = "Zone Is Offline",
+ [NVME_SC_ZONE_INVALID_WRITE] = "Zone Invalid Write",
+ [NVME_SC_ZONE_TOO_MANY_ACTIVE] = "Too Many Active Zones",
+ [NVME_SC_ZONE_TOO_MANY_OPEN] = "Too Many Open Zones",
+ [NVME_SC_ZONE_INVALID_TRANSITION] = "Invalid Zone State Transition",
+ [NVME_SC_WRITE_FAULT] = "Write Fault",
+ [NVME_SC_READ_ERROR] = "Unrecovered Read Error",
+ [NVME_SC_GUARD_CHECK] = "End-to-end Guard Check Error",
+ [NVME_SC_APPTAG_CHECK] = "End-to-end Application Tag Check Error",
+ [NVME_SC_REFTAG_CHECK] = "End-to-end Reference Tag Check Error",
+ [NVME_SC_COMPARE_FAILED] = "Compare Failure",
+ [NVME_SC_ACCESS_DENIED] = "Access Denied",
+ [NVME_SC_UNWRITTEN_BLOCK] = "Deallocated or Unwritten Logical Block",
+ [NVME_SC_ANA_PERSISTENT_LOSS] = "Asymmetric Access Persistent Loss",
+ [NVME_SC_ANA_INACCESSIBLE] = "Asymmetric Access Inaccessible",
+ [NVME_SC_ANA_TRANSITION] = "Asymmetric Access Transition",
+ [NVME_SC_HOST_PATH_ERROR] = "Host Pathing Error",
+};
+#define NVME_ERRORS_SIZE ARRAY_SIZE(nvme_errors)
+#endif /* CONFIG_NVME_VERBOSE_ERRORS */
+
+void nvme_error_log(struct request *req)
+{
+ struct nvme_ns *ns = req->q->queuedata;
+ struct nvme_request *nr = nvme_req(req);
+ const struct nvme_string_table *entry;
+ const unsigned char *op_str = "Unknown";
+ const unsigned char *err_str = NULL;
+ unsigned int i;
+
+ if (!ns)
+ return;
+
+ for (i = 0, entry = nvme_ops ; i < NVME_OPS_SIZE ; i++)
+ if (entry[i].code == (req->cmd_flags & REQ_OP_MASK))
+ op_str = entry[i].string;
+
+#ifdef CONFIG_NVME_VERBOSE_ERRORS
+ if ((nr->status & 0x7ff) <= NVME_ERRORS_SIZE)
+ err_str = nvme_errors[nr->status & 0x7ff];
+#endif
+ if (err_str == NULL)
+ err_str = "NVME Error";
+
+ pr_err_ratelimited("%s: %s @ LBA %llu, %llu blocks, %s (sct 0x%x / sc 0x%x) %s%s\n",
+ req->rq_disk ? req->rq_disk->disk_name : "?",
+ op_str,
+ (unsigned long long)nvme_sect_to_lba(ns, blk_rq_pos(req)),
+ (unsigned long long)blk_rq_bytes(req) >> ns->lba_shift,
+ err_str,
+ nr->status >> 8 & 7, /* Status Code Type */
+ nr->status & 0xff, /* Status Code */
+ nr->status & NVME_SC_MORE ? "MORE " : "",
+ nr->status & NVME_SC_DNR ? "DNR " : "");
+}
+EXPORT_SYMBOL_GPL(nvme_error_log);
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index 9b095ee01364..7edd67b92a6b 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -922,4 +922,6 @@ static inline bool nvme_multi_css(struct nvme_ctrl *ctrl)
return (ctrl->ctrl_config & NVME_CC_CSS_MASK) == NVME_CC_CSS_CSI;
}
+extern void nvme_error_log(struct request *req);
+
#endif /* _NVME_H */
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 855dd9b3e84b..1f946e5bf7c1 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -1636,6 +1636,7 @@ enum {
NVME_SC_HOST_ABORTED_CMD = 0x371,
NVME_SC_CRD = 0x1800,
+ NVME_SC_MORE = 0x2000,
NVME_SC_DNR = 0x4000,
};
--
2.27.0
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.