Commit Graph

973868 Commits

Author SHA1 Message Date
Saravana Kannan
2034d60fd8 UPSTREAM: driver core: fw_devlink: Handle suppliers that don't use driver core
Device links only work between devices that use the driver core to match
and bind a driver to a device. So, add an API for frameworks to let the
driver core know that a fwnode has been initialized by a driver without
using the driver core.

Then use this information to make sure that fw_devlink doesn't make the
consumers wait indefinitely on suppliers that'll never bind to a driver.

Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-6-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 74c782cff7)
Bug: 181264536
Change-Id: Ie3cccda6ae82bc3edfd138200bdca1a72316cb02
2021-02-25 15:16:39 -08:00
Saravana Kannan
4049b5ae07 UPSTREAM: of: property: Add fw_devlink support for optional properties
Not all DT bindings are mandatory bindings. Add support for optional DT
bindings and mark iommus, iommu-map, dmas as optional DT bindings.

Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-5-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit a9dd8f3c2c)
Bug: 181264536
Change-Id: I912a7d853cb183edf4190d9d0ae6014d4dda2f47
2021-02-25 15:16:39 -08:00
Saravana Kannan
df23e98cca UPSTREAM: driver core: Add fw_devlink.strict kernel param
This param allows forcing all dependencies to be treated as mandatory.
This will be useful for boards in which all optional dependencies like
IOMMUs and DMAs need to be treated as mandatory dependencies.

Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-4-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 19d0f5f6bf)
Bug: 181264536
Change-Id: If9cc5918624082b0e5426c4c9dd7f6eb6bba8232
2021-02-25 15:16:39 -08:00
Saravana Kannan
6f52309761 UPSTREAM: of: property: Don't add links to absent suppliers
If driver core marks a firmware node as not a device, don't add fwnode
links where it's a supplier.

Fixes: e590474768 ("driver core: Set fw_devlink=on by default")
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-3-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1753c4d1ed)
Bug: 181264536
Change-Id: If21e546975a4fe6d43c3d2550402347c189cb55a
2021-02-25 15:16:38 -08:00
Saravana Kannan
fe5ff1ae21 UPSTREAM: driver core: fw_devlink: Detect supplier devices that will never be added
During the initial parsing of firmware by fw_devlink, fw_devlink might
infer that some supplier firmware nodes would get populated as devices.
But the inference is not always correct. This patch tries to logically
detect and fix such mistakes as boot progresses or more devices probe.

fw_devlink makes a fundamental assumption that once a device binds to a
driver, it will populate (i.e: add as struct devices) all the child
firmware nodes that could be populated as devices (if they aren't
populated already).

So, whenever a device probes, we check all its child firmware nodes. If
a child firmware node has a corresponding device populated, we don't
modify the child node or its descendants. However, if a child firmware
node has not been populated as a device, we delete all the fwnode links
where the child node or its descendants are suppliers. This ensures that
no other device is blocked on a firmware node that will never be
populated as a device. We also mark such fwnodes as NOT_DEVICE, so that
no new fwnode links are created with these nodes as suppliers.

Fixes: e590474768 ("driver core: Set fw_devlink=on by default")
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205222644.2357303-2-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 9528e0d9c1)
Bug: 181264536
Change-Id: I76f38f22cb11b85a8b6104c131924357d5254640
2021-02-25 15:16:38 -08:00
Saravana Kannan
f1ed75c87e UPSTREAM: of: property: Fix fw_devlink handling of interrupts/interrupts-extended
Commit 4104ca776b ("of: property: Add fw_devlink support for interrupts")
was not taking interrupt-map into account. Fix that.

Fixes: 4104ca776b ("of: property: Add fw_devlink support for interrupts")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210209010439.3529036-1-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f265f06af1)
Bug: 181264536
Change-Id: I47bb748ef42c99677e85d2cc696dbd47a64d22cb
2021-02-25 15:16:38 -08:00
Saravana Kannan
48b8680e4c UPSTREAM: gpiolib: Don't probe gpio_device if it's not the primary device
Dmitry reported[1] boot error messages caused by
commit 4731210c09 ("gpiolib: Bind gpio_device to a driver to enable fw_devlink=on by default").

gpio-1022 (cpu-pwr-req-hog): hogged as input
max77620-pinctrl max77620-pinctrl: pin gpio4 already requested by max77620-pinctrl; cannot claim for gpiochip1
max77620-pinctrl max77620-pinctrl: pin-4 (gpiochip1) status -22
max77620-pinctrl max77620-pinctrl: could not request pin 4 (gpio4) from group gpio4  on device max77620-pinctrl
gpio_stub_drv gpiochip1: Error applying setting, reverse things back
gpio_stub_drv: probe of gpiochip1 failed with error -22

This happens because when we try to probe a device, driver core calls
into pinctrl to set up the pins. However, if the GPIO DT node already
has a proper device created and probed, trying to probe the gpio_device
with a stub driver makes the pins be claimed twice. pinctrl doesn't like
this and throws an error.

So, this patch makes sure the gpio_stub_drv doesn't match with a
gpio_device if it's not the primary device for the fwnode.

[1] - https://lore.kernel.org/lkml/544ad0e4-0954-274c-8e77-866aaa5661a8@gmail.com/

Fixes: 4731210c09 ("gpiolib: Bind gpio_device to a driver to enable fw_devlink=on by default")
Tested-by: Dmitry Osipenko <digetx@gmail.com>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210205020730.1746354-1-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit ced2af4195)
Bug: 181264536
Change-Id: I2004a6c3a71900bbab75a95d436c79cd29e5b4b9
2021-02-25 15:16:38 -08:00
Saravana Kannan
8c90ba5a2b UPSTREAM: gpiolib: Bind gpio_device to a driver to enable fw_devlink=on by default
There are multiple instances of GPIO device tree nodes of the form:

foo {
	compatible = "acme,foo";
	...

	gpio0: gpio0@xxxxxxxx {
		compatible = "acme,bar";
		...
		gpio-controller;
	};

	gpio1: gpio1@xxxxxxxx {
		compatible = "acme,bar";
		...
		gpio-controller;
	};

	...
}

bazz {
	my-gpios = <&gpio0 ...>;
}

Case 1: The driver for "foo" populates struct device for these gpio*
nodes and then probes them using a driver that binds with "acme,bar".
This driver for "acme,bar" then registers the gpio* nodes with gpiolib.
This lines up with how DT nodes with the "compatible" property are
typically converted to struct devices and then registered with driver
core to probe them. This also allows the gpio* devices to hook into all
the driver core capabilities like runtime PM, probe deferral,
suspend/resume ordering, device links, etc.

Case 2: The driver for "foo" doesn't populate struct devices for these
gpio* nodes before registering them with gpiolib. Instead it just loops
through its child nodes and directly registers the gpio* nodes with
gpiolib.

Drivers that follow case 2 cause problems with fw_devlink=on. This is
because fw_devlink will prevent bazz from probing until there's a struct
device that has gpio0 as its fwnode (because bazz lists gpio0 as a GPIO
supplier). Once the struct device is available, fw_devlink will create a
device link with gpio0 device as the supplier and bazz device as the
consumer. After this point, since the gpio0 device will never bind to a
driver, the device link will prevent bazz device from ever probing.

Finding and refactoring all the instances of drivers that follow case 2
will cause a lot of code churn and it is not something that can be done
in one shot. In some instances it might not even be possible to refactor
them cleanly. Examples of such instances are [1] [2].

This patch works around this problem and avoids all the code churn by
simply setting the fwnode of the gpio_device and creating a stub driver
to bind to the gpio_device. This allows all the consumers to continue
probing when the driver follows case 2.

[1] - https://lore.kernel.org/lkml/20201014191235.7f71fcb4@xhacker.debian/
[2] - https://lore.kernel.org/lkml/e28e1f38d87c12a3c714a6573beba6e1@kernel.org/

Fixes: e590474768 ("driver core: Set fw_devlink=on by default")
Cc: Marc Zyngier <maz@kernel.org>
Cc: Jisheng Zhang <Jisheng.Zhang@synaptics.com>
Cc: Kever Yang <kever.yang@rock-chips.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210122193600.1415639-1-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4731210c09)
Bug: 181264536
Change-Id: Ibf379aa8daae91abdc7b6e7684c9c2668efba039
2021-02-25 15:16:38 -08:00
Saravana Kannan
93976e83c4 UPSTREAM: of: property: Add fw_devlink support for interrupts
This allows fw_devlink to create device links between consumers of an
interrupt and the supplier of the interrupt.

Cc: Marc Zyngier <maz@kernel.org>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210121225712.1118239-3-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4104ca776b)
Bug: 181264536
Change-Id: Iad8021a1c91d08acb98b911d2a51b2bcca445265
2021-02-25 15:16:38 -08:00
Saravana Kannan
fbef5bacb0 UPSTREAM: of: property: Add fw_devlink support for "gpio" and "gpios" binding
To provide backward compatibility for boards that use deprecated DT
bindings, we need to add fw_devlink support for "gpio" and "gpios".

We also need to ignore these properties on nodes with "gpio-hog"
property because their gpio[s] are all supplied by the parent node.

Fixes: e590474768 ("driver core: Set fw_devlink=on by default")
Cc: linux-tegra <linux-tegra@vger.kernel.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20210121225712.1118239-2-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit e13f5b7a13)
Bug: 181264536
Change-Id: I8a1a66687d62d38bc0b585fb616b912b0f4d12dc
2021-02-25 15:16:38 -08:00
Saravana Kannan
1df699c140 UPSTREAM: driver core: Handle cycles in device links created by fw_devlink
Sometimes, firmware can have cyclic dependencies between devices. But
one or more of those dependencies in the cycle are false dependencies
that don't affect the probing of the device.

fw_devlink can detect some of these false dependencies using logic. But
when it can't, we don't want to block probing of the devices in this
cyclic dependency.

So, instead of using normal device links for the devices in this cycle,
we need to switch to SYNC_STATE_ONLY device links between these devices.
This is so that sync_state() callback correctness is still maintained
while we allow these device to probe.

This is functionally similar to switching to fw_devlink=permissive just
for the devices in the cycle.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20201218031703.3053753-5-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b0e2fa4f61)
Bug: 181264536
Change-Id: I79e604495b71acd13a83231c76af06e035176c1f
2021-02-25 15:16:38 -08:00
Saravana Kannan
650cffd84e UPSTREAM: driver core: Have fw_devlink use DL_FLAG_INFERRED
This will be useful in identifying device links created only due to
fw_devlink when we need to break cyclic dependencies due to fw_devlink.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20201218031703.3053753-4-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b90fb8f66c)
Bug: 181264536
Change-Id: I0f7a4d13bfb3e12167c79716fb4c807f5efc66cc
2021-02-25 15:16:38 -08:00
Saravana Kannan
55751659bc UPSTREAM: driver core: Add device link support for INFERRED flag
This flag can never be added to a device link that already exists and
doesn't have the flag set. It can only be added when a device link is
created for the first time or it can be maintained if the device link
already has the it set.

This flag will be used for marking device links created ONLY by
inferring dependencies from data and NOT from explicit action by device
drivers/frameworks.  This will be useful in the future when we need to
deal with cycles in dependencies inferred from firmware.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20201218031703.3053753-3-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4b9bbb29ba)
Bug: 181264536
Change-Id: Ibcaef9e50f25027f35b1d47ee935b538fffb9c87
2021-02-25 15:16:38 -08:00
Saravana Kannan
76ed01ede0 UPSTREAM: driver core: Add debug logs for device link related probe deferrals
There's insufficient logging when device links or fw_devlink (waiting to
create device links) cause probe deferrals.  This makes it hard to debug
devices not getting probed. So, add debug logs to make it easy to debug.

Signed-off-by: Saravana Kannan <saravanak@google.com>
Link: https://lore.kernel.org/r/20201218031703.3053753-2-saravanak@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1f0dfa0545)
Bug: 181264536
Change-Id: Ia8978a22888018c9bbb4ca542a29a25c1d473386
2021-02-25 15:16:38 -08:00
Collin Fijalkovich
1112bd650e ANDROID: GKI: add fields required to enable CONFIG_TRANSPARENT_HUGEPAGE
Devices with plenty of RAM may benefit from THP usage. Enable THP while
setting CONFIG_TRANSPARENT_HUGEPAGE_MADVISE require explicit opt-in for
the feature by default in sysfs.

Bug: 179484689
Bug: 179223738
Signed-off-by: Collin Fijalkovich <cfijalkovich@google.com>
Change-Id: If85765daba3817dac38e7bf29530acfaed1d50a3
2021-02-25 22:39:28 +00:00
Timur Tabi
fc461a19b0 UPSTREAM: lib/vsprintf: no_hash_pointers prints all addresses as unhashed
If the no_hash_pointers command line parameter is set, then
printk("%p") will print pointers as unhashed, which is useful for
debugging purposes.  This change applies to any function that uses
vsprintf, such as print_hex_dump() and seq_buf_printf().

A large warning message is displayed if this option is enabled.
Unhashed pointers expose kernel addresses, which can be a security
risk.

Also update test_printf to skip the hashed pointer tests if the
command-line option is set.

Signed-off-by: Timur Tabi <timur@kernel.org>
Acked-by: Petr Mladek <pmladek@suse.com>
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Acked-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Marco Elver <elver@google.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20210214161348.369023-4-timur@kernel.org

(cherry picked from commit 5ead723a20)
Bug: 181049978
Change-Id: I06c5cfdc0b4c12f38c9109179f27bf2b54ac57e8
Signed-off-by: Chris Goldsworthy <cgoldswo@codeaurora.org>
2021-02-25 21:37:05 +00:00
Timur Tabi
0e1b1c2d68 UPSTREAM: kselftest: add support for skipped tests
Update the kselftest framework to allow client drivers to
specify that some tests were skipped.

Signed-off-by: Timur Tabi <timur@kernel.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Tested-by: Petr Mladek <pmladek@suse.com>
Acked-by: Marco Elver <elver@google.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20210214161348.369023-3-timur@kernel.org

(cherry picked from commit d9d4de2309)
Bug: 181049978
Change-Id: I03f658375ec0fd66f78b20d23a223c26862fba01
Signed-off-by: Chris Goldsworthy <cgoldswo@codeaurora.org>
2021-02-25 21:36:56 +00:00
Timur Tabi
6b2db01255 UPSTREAM: lib: use KSTM_MODULE_GLOBALS macro in kselftest drivers
Instead of defining the total/failed test counters manually,
test drivers that are clients of kselftest should use the
macro created for this purpose.

Signed-off-by: Timur Tabi <timur@kernel.org>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Acked-by: Marco Elver <elver@google.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20210214161348.369023-2-timur@kernel.org

(cherry picked from commit 4e89a78779)
Bug: 181049978
Change-Id: I8f5fc8ba3bcfd60be11a302955bd375a64eedcd4
Signed-off-by: Chris Goldsworthy <cgoldswo@codeaurora.org>
2021-02-25 21:36:45 +00:00
Vijayanand Jitta
9784fbe79d ANDROID: dma-buf: Export is_dma_buf_file
Export is_dma_buf_file function which will be used
by the minidump module to get dmabuf info.

Bug: 180978053
Change-Id: Ic8f7dd4f0a620839ab19f52841e9a6541515133c
Signed-off-by: Vijayanand Jitta <vjitta@codeaurora.org>
2021-02-25 19:42:08 +00:00
Sudarshan Rajagopalan
e909fe79d2 ANDROID: mm: export zone_watermark_ok
Export zone_watermark_ok and its friends so that modules
can use it to determine if zone watermarks are ok in the system.

Bug: 140294230
Change-Id: I958961150cf0c6db318f3e0daf1543ced00a9aab
Signed-off-by: Sudarshan Rajagopalan <sudaraja@codeaurora.org>
2021-02-25 19:36:38 +00:00
Roderick Colenbrander
3b672417ef UPSTREAM: HID: playstation: add DualSense player LED support.
The DualSense features 5 player LEDs below its touchpad, which are
meant as player id indications. The LEDs are configured with a
player ID determined by an ID allocator, which assign player ids
to ps_device instances.

This patch is a combination of the following original patches
minus use of LED framework APIs:
- HID: playstation: add DualSense player LEDs support.
- HID: playstation: DualSense set LEDs to default player id.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I2a9ef9949bb82df18247a14e64cb8c54e9b3924c
(cherry picked from commit 949aaccda0)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:31:10 +00:00
Roderick Colenbrander
c441956672 UPSTREAM: HID: playstation: add microphone mute support for DualSense.
The DualSense controller has a built-in microphone exposed as an
audio device over USB (or HID using Bluetooth). A dedicated
button on the controller handles mute, but software has to configure
the device to mute the audio stream.

This patch captures the mute button and schedules an output report
to mute/unmute the audio stream as well as toggle the mute LED.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I6fce08b0b28c1cf41c682a2ff5655f00d7a52843
(cherry picked from commit c26e48b150)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:31:01 +00:00
Roderick Colenbrander
f77d6739b7 UPSTREAM: HID: playstation: add initial DualSense lightbar support.
Provide initial support for the DualSense lightbar and configure it
with a default PlayStation blue color.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I4f5a78e20b2e11c68e67c539b9c21197e42a722f
(cherry picked from commit 8e5198a12d)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:30:51 +00:00
Colin Ian King
1c9cc3c40e UPSTREAM: HID: playstation: fix array size comparison (off-by-one)
The comparison of value with the array size ps_gamepad_hat_mapping
appears to be off-by-one. Fix this by using >= rather than > for the
size comparison.

Addresses-Coverity: ("Out-of-bounds read")
Fixes: bc2e15a9a0 ("HID: playstation: initial DualSense USB support.")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I24f4c7f8d48ab8ff1d117d33c7914b8d2e4292f8
(cherry picked from commit 50ab1ffd7c)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:30:41 +00:00
Roderick Colenbrander
2dcc66a28f UPSTREAM: HID: playstation: fix unused variable in ps_battery_get_property.
The ret variable in ps_battery_get_property is set in an error path,
but never actually returned. Change the function to return ret.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: Ieeaff4d249a6ee6d02eb4746f9fe502c91c6f40a
(cherry picked from commit 5fb5255124)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:30:29 +00:00
Roderick Colenbrander
353318aa60 UPSTREAM: HID: playstation: report DualSense hardware and firmware version.
Retrieve DualSense hardware and firmware information using a vendor
specific feature report. Report the data through sysfs and also
report using hid_info as there can be signficant differences between
versions.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I9a8e338d1a9726510194a4d41911dda8bb6371fc
(cherry picked from commit 0b25b55d34)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:30:18 +00:00
Roderick Colenbrander
67e475bdb5 UPSTREAM: HID: playstation: add DualSense classic rumble support.
The DualSense features a haptics system based on voicecoil motors,
which requires PCM data (or special HID packets using Bluetooth). There
is no appropriate API yet in the Linux kernel to expose these. The
controller also provides a classic rumble feature for backwards
compatibility. Expose this classic rumble feature using the FF framework.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: Ia4d664c4a1dedbadce6baf54962595616265eb4f
(cherry picked from commit 51151098d7)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:30:07 +00:00
Roderick Colenbrander
46cf65a4c1 UPSTREAM: HID: playstation: add DualSense Bluetooth support.
This patch adds support for the DualSense when operating in Bluetooth mode.
The device has the same behavior as the DualShock 4 in that by default it
sends a limited input report (0x1), but after requesting calibration data,
it switches to an extended input report (report 49), which adds data for
touchpad, motion sensors, battery and more.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I6ba3eb018f9938b71bb63cb70b26e4acdcfb788a
(cherry picked from commit 799b2b533a)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:29:57 +00:00
Roderick Colenbrander
f283ebe618 UPSTREAM: HID: playstation: track devices in list.
Track devices in a list, so we can detect when a device is connected
twice when using Bluetooth and USB.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: Ibfa0e5b3821891240545f484f1ceb59b211cb6fb
(cherry picked from commit 53f04e8357)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:29:43 +00:00
Roderick Colenbrander
7814c530b5 UPSTREAM: HID: playstation: add DualSense accelerometer and gyroscope support.
The DualSense features an accelerometer and gyroscope. The data is
embedded into the main HID input reports. Expose both sensors through
through a separate evdev node.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I27909fb116a56be52cc12336dc34ca8b4189423e
(cherry picked from commit 402987c5d9)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:29:32 +00:00
Roderick Colenbrander
1114920181 UPSTREAM: HID: playstation: add DualSense touchpad support.
Implement support for DualSense touchpad as a separate input device.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I59b1d77b1d778366d05f5a929bbb205127914304
(cherry picked from commit f6bb05fcb2)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:29:22 +00:00
Roderick Colenbrander
1f567b9696 UPSTREAM: HID: playstation: add DualSense battery support.
Report DualSense battery status information through power_supply class.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I161c0ebbb47c4a58bfed75748e23ca8fd214af53
(cherry picked from commit d30bca4480)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:29:10 +00:00
Roderick Colenbrander
f83ca6469c UPSTREAM: HID: playstation: use DualSense MAC address as unique identifier.
Use the DualSense MAC address as a unique identifier for the HID device.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: If1c5a6ab0f8ebb1bdaf2528d85f5431a306aca6d
(cherry picked from commit b99dcefd78)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:28:59 +00:00
Roderick Colenbrander
1831b03f9c UPSTREAM: HID: playstation: initial DualSense USB support.
Implement support for PlayStation DualSense gamepad in USB mode.
Support features include buttons and sticks, which adhere to the
Linux gamepad spec.

Signed-off-by: Roderick Colenbrander <roderick.colenbrander@sony.com>
Reviewed-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Change-Id: I7cf496f9b6f721cdd3e79387caa86b2ccc6378fb
(cherry picked from commit bc2e15a9a0)
Signed-off-by: Kim Low <kim-huei.low@sony.com>
2021-02-25 19:28:20 +00:00
J. Avila
da5f3cd378 ANDROID: sched/rt: Add support for rt sync wakeups
Some rt tasks undergo sync wakeup. Currently, these tasks will be placed
on other, often sleeping or otherwise idle CPUs, which can lead to
unnecessary power hits.

Bug: 157906395
Change-Id: I48864d0847bbe4f7813c842032880ad3f3b8b06b
Signed-off-by: J. Avila <elavila@google.com>
2021-02-25 18:27:15 +00:00
Patrick Daly
9a86bea7c3 ANDROID: abi_gki_aarch64_qcom: Add strncpy_from_user to symbol list
A vendor defined driver uses strncpy_from_user in an ioctl.

Bug: 181111492
Change-Id: Ie6b6ac32b0097337dc9ef307a3f5e13a0bc91229
Signed-off-by: Patrick Daly <pdaly@codeaurora.org>
Signed-off-by: Giuliano Procida <gprocida@google.com>
2021-02-25 13:43:19 +00:00
Will Deacon
b731a04b78 ANDROID: gki_defconfig: Ensure KVM is configured in "protected" mode
In order to support the Protected KVM (pKVM) development effort, ensure
that the GKI kernel initialises KVM in "protected" mode when booted at
EL2, even if the underlying CPU hardware supports VHE.

This has no impact on platforms entering the kernel at EL1.

Cc: David Brazdil <dbrazdil@google.com>
Cc: Marc Zyngier <mzyngier@google.com>
Cc: Alistair Delva <adelva@google.com>
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 17809838
Test: atest VirtualizationHostTestCases on an EL2-enabled device
Change-Id: Id84d0b0d08706658d1fc080c09ad8ee5b51ed517
2021-02-25 13:41:55 +00:00
Marc Zyngier
5e03e92d48 FROMGIT: arm64: VHE: Enable EL2 MMU from the idmap
Enabling the MMU requires the write to SCTLR_ELx (and the ISB
that follows) to live in some identity-mapped memory. Otherwise,
the translation will result in something totally unexpected
(either fetching the wrong instruction stream, or taking a
fault of some sort).

This is exactly what happens in mutate_to_vhe(), as this code
lives in the .hyp.text section, which isn't identity-mapped.
With the right configuration, this explodes badly.

Extract the MMU-enabling part of mutate_to_vhe(), and move
it to its own function that lives in the idmap. This ensures
nothing bad happens.

Fixes: f359182291 ("arm64: Provide an 'upgrade to VHE' stub hypercall")
Reported-by: "kernelci.org bot" <bot@kernelci.org>
Tested-by: Guillaume Tucker <guillaume.tucker@collabora.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210224093738.3629662-2-maz@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
(cherry picked from commit f1b6cff7c9
 git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/fixes)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 175544340
Change-Id: Idd38bff3ef1e02fae2371c5822c611e0f332f0cc
2021-02-25 13:41:55 +00:00
Joey Gouly
ae795915ef FROMGIT: KVM: arm64: make the hyp vector table entries local
Make the hyp vector table entries local functions so they
are not accidentally referred to outside of this file.

Using SYM_CODE_START_LOCAL matches the other vector tables (in hyp-stub.S,
hibernate-asm.S and entry.S)

Signed-off-by: Joey Gouly <joey.gouly@arm.com>
Acked-by: Will Deacon <will@kernel.org>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210222164956.43514-1-joey.gouly@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
(cherry picked from commit 610e4dc8ac
 git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/fixes)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 17809838
Test: atest VirtualizationHostTestCases on an EL2-enabled device
Change-Id: I578aedd381518c9f5f27820fe78ee759c293fd4b
2021-02-25 13:41:55 +00:00
John Ogness
ce6de43a54 UPSTREAM: printk: avoid prb_first_valid_seq() where possible
If message sizes average larger than expected (more than 32
characters), the data_ring will wrap before the desc_ring. Once the
data_ring wraps, it will start invalidating descriptors. These
invalid descriptors hang around until they are eventually recycled
when the desc_ring wraps. Readers do not care about invalid
descriptors, but they still need to iterate past them. If the
average message size is much larger than 32 characters, then there
will be many invalid descriptors preceding the valid descriptors.

The function prb_first_valid_seq() always begins at the oldest
descriptor and searches for the first valid descriptor. This can
be rather expensive for the above scenario. And, in fact, because
of its heavy usage in /dev/kmsg, there have been reports of long
delays and even RCU stalls.

For code that does not need to search from the oldest record,
replace prb_first_valid_seq() usage with prb_read_valid_*()
functions, which provide a start sequence number to search from.

Fixes: 896fbe20b4 ("printk: use the lockless ringbuffer")
Reported-by: kernel test robot <oliver.sang@intel.com>
Reported-by: J. Avila <elavila@google.com>
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20210211173152.1629-1-john.ogness@linutronix.de
(cherry picked from commit 13791c80b0)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Iedc43a30f7b549448f5c63efce2c56f2944bd98b
2021-02-25 13:16:22 +01:00
Greg Kroah-Hartman
59e0bda9e2 Merge 5.10.18 into android12-5.10
Changes in 5.10.18
	vdpa_sim: remove hard-coded virtq count
	vdpa_sim: add struct vdpasim_dev_attr for device attributes
	vdpa_sim: store parsed MAC address in a buffer
	vdpa_sim: make 'config' generic and usable for any device type
	vdpa_sim: add get_config callback in vdpasim_dev_attr
	IB/isert: add module param to set sg_tablesize for IO cmd
	net: qrtr: Fix port ID for control messages
	mptcp: skip to next candidate if subflow has unacked data
	net/sched: fix miss init the mru in qdisc_skb_cb
	mt76: mt7915: fix endian issues
	mt76: mt7615: fix rdd mcu cmd endianness
	net: sched: incorrect Kconfig dependencies on Netfilter modules
	net: openvswitch: fix TTL decrement exception action execution
	net: bridge: Fix a warning when del bridge sysfs
	net: fix proc_fs init handling in af_packet and tls
	Xen/x86: don't bail early from clear_foreign_p2m_mapping()
	Xen/x86: also check kernel mapping in set_foreign_p2m_mapping()
	Xen/gntdev: correct dev_bus_addr handling in gntdev_map_grant_pages()
	Xen/gntdev: correct error checking in gntdev_map_grant_pages()
	xen/arm: don't ignore return errors from set_phys_to_machine
	xen-blkback: don't "handle" error by BUG()
	xen-netback: don't "handle" error by BUG()
	xen-scsiback: don't "handle" error by BUG()
	xen-blkback: fix error handling in xen_blkbk_map()
	tty: protect tty_write from odd low-level tty disciplines
	Bluetooth: btusb: Always fallback to alt 1 for WBS
	btrfs: fix backport of 2175bf57dc in 5.10.13
	btrfs: fix crash after non-aligned direct IO write with O_DSYNC
	media: pwc: Use correct device for DMA
	Linux 5.10.18

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I7ef79a45f7dc711800fb62419bee1cabfad277a7
2021-02-25 07:35:32 +01:00
Pavankumar Kondeti
901f6f13f9 ANDROID: GKI: Update abi_gki_aarch64_qcom for bitmap parsing
Add bitmap_parselist and bitmap_parselist_user symbols.

Bug: 180969145
Change-Id: Ib0b636505f73d9c1076c25a352af0ae6619bed20
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
2021-02-25 01:44:30 +00:00
Suren Baghdasaryan
b9b4582292 ANDROID: mm, oom: Prevent extra put_task when oom_evaluate_task is aborted
The previous fix for the oom_evaluate_task abort case leads to an extra
put_task_struct call on oc->chosen_non_negative_adj. Fix this by
resetting oc->chosen_non_negative_adj and avoiding the whole negative
ADJ logic altogether.
Fixes: aef918d19a ("ANDROID: mm, oom: Fix select_bad_process customization")

Bug: 180947519
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: I5d649baac17daf1778a198be354823aa0b6a55b4
2021-02-24 22:21:44 +00:00
Will McVicker
7ccd5a5389 ANDROID: Update the ABI
Leaf changes summary: 2617 artifacts changed
Changed leaf types summary: 19 leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 2242 Changed, 301 Added functions
Removed/Changed/Added variables summary: 0 Removed, 47 Changed, 8 Added variables
Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info
Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info

301 Added functions:

  [A] 'function void __blk_mq_end_request(request*, blk_status_t)'
  [A] 'function int __blkdev_issue_discard(block_device*, sector_t, sector_t, gfp_t, int, bio**)'
  [A] 'function int __blkdev_issue_zeroout(block_device*, sector_t, sector_t, gfp_t, bio**, unsigned int)'
  [A] 'function void __do_once_done(bool*, static_key_true*, unsigned long int*)'
  [A] 'function bool __do_once_start(bool*, unsigned long int*)'
  [A] 'function int __mmc_claim_host(mmc_host*, mmc_ctx*, atomic_t*)'
  [A] 'function int __mmc_send_status(mmc_card*, u32*, unsigned int)'
  [A] 'function void __mmdrop(mm_struct*)'
  [A] 'function int __platform_driver_probe(platform_driver*, int (platform_device*)*, module*)'
  [A] 'function void __serio_register_port(serio*, module*)'
  [A] 'function int __xa_insert(xarray*, unsigned long int, void*, gfp_t)'
  [A] 'function void _dev_crit(const device*, const char*, ...)'
  [A] 'function int anon_inode_getfd(const char*, const file_operations*, void*, int)'
  [A] 'function async_cookie_t async_schedule_node(async_func_t, void*, int)'
  [A] 'function void bd_set_nr_sectors(block_device*, sector_t)'
  [A] 'function char* bin2hex(char*, void*, unsigned long int)'
  [A] 'function void bio_init(bio*, bio_vec*, unsigned short int)'
  [A] 'function void blk_freeze_queue_start(request_queue*)'
  [A] 'function bool blk_get_queue(request_queue*)'
  [A] 'function request* blk_mq_alloc_request(request_queue*, unsigned int, unsigned int)'
  [A] 'function request* blk_mq_alloc_request_hctx(request_queue*, unsigned int, blk_mq_req_flags_t, unsigned int)'
  [A] 'function bool blk_mq_complete_request_remote(request*)'
  [A] 'function void blk_mq_delay_kick_requeue_list(request_queue*, unsigned long int)'
  [A] 'function void blk_mq_free_request(request*)'
  [A] 'function void blk_mq_freeze_queue(request_queue*)'
  [A] 'function void blk_mq_freeze_queue_wait(request_queue*)'
  [A] 'function int blk_mq_freeze_queue_wait_timeout(request_queue*, unsigned long int)'
  [A] 'function int blk_mq_map_queues(blk_mq_queue_map*)'
  [A] 'function int blk_mq_pci_map_queues(blk_mq_queue_map*, pci_dev*, int)'
  [A] 'function void blk_mq_requeue_request(request*, bool)'
  [A] 'function void blk_mq_run_hw_queues(request_queue*, bool)'
  [A] 'function request* blk_mq_tag_to_rq(blk_mq_tags*, unsigned int)'
  [A] 'function void blk_mq_tagset_busy_iter(blk_mq_tag_set*, busy_tag_iter_fn*, void*)'
  [A] 'function void blk_mq_tagset_wait_completed_request(blk_mq_tag_set*)'
  [A] 'function void blk_mq_unfreeze_queue(request_queue*)'
  [A] 'function u32 blk_mq_unique_tag(request*)'
  [A] 'function void blk_mq_update_nr_hw_queues(blk_mq_tag_set*, int)'
  [A] 'function int blk_poll(request_queue*, unsigned int, bool)'
  [A] 'function void blk_put_queue(request_queue*)'
  [A] 'function void blk_queue_bounce_limit(request_queue*, u64)'
  [A] 'function bool blk_queue_can_use_dma_map_merging(request_queue*, device*)'
  [A] 'function void blk_queue_chunk_sectors(request_queue*, unsigned int)'
  [A] 'function void blk_queue_dma_alignment(request_queue*, int)'
  [A] 'function bool blk_queue_flag_test_and_set(unsigned int, request_queue*)'
  [A] 'function void blk_queue_rq_timeout(request_queue*, unsigned int)'
  [A] 'function void blk_queue_virt_boundary(request_queue*, unsigned long int)'
  [A] 'function void blk_set_queue_dying(request_queue*)'
  [A] 'function bool blk_update_request(request*, blk_status_t, unsigned int)'
  [A] 'function block_device* blkdev_get_by_path(const char*, unsigned int, void*)'
  [A] 'function int blkdev_issue_flush(block_device*, unsigned int)'
  [A] 'function int cache_line_size()'
  [A] 'function void cec_s_phys_addr_from_edid(cec_adapter*, const edid*)'
  [A] 'function void cec_transmit_done_ts(cec_adapter*, u8, u8, u8, u8, u8, ktime_t)'
  [A] 'function int cpufreq_enable_boost_support()'
  [A] 'function unsigned int cpufreq_generic_get(unsigned int)'
  [A] 'function int cpufreq_generic_suspend(cpufreq_policy*)'
  [A] 'function timespec64 current_time(inode*)'
  [A] 'function void d_add(dentry*, inode*)'
  [A] 'function dentry* d_alloc_name(dentry*, const char*)'
  [A] 'function void d_delete(dentry*)'
  [A] 'function dentry* d_make_root(inode*)'
  [A] 'function void debugfs_create_size_t(const char*, umode_t, dentry*, size_t*)'
  [A] 'function void debugfs_create_x64(const char*, umode_t, dentry*, u64*)'
  [A] 'function void dev_pm_opp_free_cpufreq_table(device*, cpufreq_frequency_table**)'
  [A] 'function unsigned long int dev_pm_opp_get_max_transition_latency(device*)'
  [A] 'function opp_table* dev_pm_opp_get_opp_table(device*)'
  [A] 'function int dev_pm_opp_get_sharing_cpus(device*, cpumask*)'
  [A] 'function unsigned long int dev_pm_opp_get_suspend_opp_freq(device*)'
  [A] 'function int dev_pm_opp_init_cpufreq_table(device*, cpufreq_frequency_table**)'
  [A] 'function int dev_pm_opp_of_cpumask_add_table(const cpumask*)'
  [A] 'function int dev_pm_opp_of_get_sharing_cpus(device*, cpumask*)'
  [A] 'function void dev_pm_opp_put_opp_table(opp_table*)'
  [A] 'function void dev_pm_opp_put_regulators(opp_table*)'
  [A] 'function opp_table* dev_pm_opp_set_regulators(device*, const char* const*, unsigned int)'
  [A] 'function int dev_pm_qos_expose_latency_tolerance(device*)'
  [A] 'function void dev_pm_qos_hide_latency_tolerance(device*)'
  [A] 'function int dev_pm_qos_update_user_latency_tolerance(device*, int)'
  [A] 'function devfreq* devfreq_add_device(device*, devfreq_dev_profile*, const char*, void*)'
  [A] 'function void devfreq_cooling_unregister(thermal_cooling_device*)'
  [A] 'function int devfreq_register_opp_notifier(device*, devfreq*)'
  [A] 'function int devfreq_remove_device(devfreq*)'
  [A] 'function int devfreq_unregister_opp_notifier(device*, devfreq*)'
  [A] 'function int device_create_bin_file(device*, const bin_attribute*)'
  [A] 'function int device_property_read_string_array(device*, const char*, const char**, unsigned long int)'
  [A] 'function void device_remove_bin_file(device*, const bin_attribute*)'
  [A] 'function bool device_remove_file_self(device*, const device_attribute*)'
  [A] 'function clk* devm_get_clk_from_child(device*, device_node*, const char*)'
  [A] 'function char* devm_kvasprintf(device*, gfp_t, const char*, va_list)'
  [A] 'function int devm_mfd_add_devices(device*, int, const mfd_cell*, int, resource*, int, irq_domain*)'
  [A] 'function void* devm_of_iomap(device*, device_node*, int, resource_size_t*)'
  [A] 'function rtc_device* devm_rtc_device_register(device*, const char*, const rtc_class_ops*, module*)'
  [A] 'function int devm_snd_dmaengine_pcm_register(device*, const snd_dmaengine_pcm_config*, unsigned int)'
  [A] 'function int dma_buf_mmap(dma_buf*, vm_area_struct*, unsigned long int)'
  [A] 'function unsigned long int dma_get_merge_boundary(device*)'
  [A] 'function const char* dma_heap_get_name(dma_heap*)'
  [A] 'function size_t dma_max_mapping_size(device*)'
  [A] 'function dma_pool* dmam_pool_create(const char*, device*, size_t, size_t, size_t)'
  [A] 'function int down_trylock(semaphore*)'
  [A] 'function void downgrade_write(rw_semaphore*)'
  [A] 'function void drm_bridge_hpd_notify(drm_bridge*, drm_connector_status)'
  [A] 'function void drm_crtc_arm_vblank_event(drm_crtc*, drm_pending_vblank_event*)'
  [A] 'function drm_gem_cma_object* drm_fb_cma_get_gem_obj(drm_framebuffer*, unsigned int)'
  [A] 'function int drm_gem_cma_dumb_create_internal(drm_file*, drm_device*, drm_mode_create_dumb*)'
  [A] 'function void drm_gem_cma_free_object(drm_gem_object*)'
  [A] 'function int drm_gem_cma_mmap(file*, vm_area_struct*)'
  [A] 'function sg_table* drm_gem_cma_prime_get_sg_table(drm_gem_object*)'
  [A] 'function drm_gem_object* drm_gem_cma_prime_import_sg_table(drm_device*, dma_buf_attachment*, sg_table*)'
  [A] 'function int drm_gem_cma_prime_mmap(drm_gem_object*, vm_area_struct*)'
  [A] 'function void* drm_gem_cma_prime_vmap(drm_gem_object*)'
  [A] 'function void drm_gem_cma_prime_vunmap(drm_gem_object*, void*)'
  [A] 'function drm_framebuffer* drm_gem_fb_create(drm_device*, drm_file*, const drm_mode_fb_cmd2*)'
  [A] 'function uint32_t drm_of_find_possible_crtcs(drm_device*, device_node*)'
  [A] 'function void drm_sysfs_hotplug_event(drm_device*)'
  [A] 'function void* dup_iter(iov_iter*, iov_iter*, gfp_t)'
  [A] 'function file* filp_open(const char*, int, unsigned short int)'
  [A] 'function int generic_delete_inode(inode*)'
  [A] 'function unsigned int get_next_ino()'
  [A] 'function unsigned int get_random_u32()'
  [A] 'function int get_tree_single(fs_context*, int (super_block*, fs_context*)*)'
  [A] 'function long int get_user_pages(unsigned long int, unsigned long int, unsigned int, page**, vm_area_struct**)'
  [A] 'function long int get_user_pages_remote(mm_struct*, unsigned long int, unsigned long int, unsigned int, page**, vm_area_struct**, int*)'
  [A] 'function void hdmi_avi_infoframe_init(hdmi_avi_infoframe*)'
  [A] 'function ssize_t hdmi_avi_infoframe_pack(hdmi_avi_infoframe*, void*, size_t)'
  [A] 'function i2c_client* i2c_new_ancillary_device(i2c_client*, const char*, u16)'
  [A] 'function int i2c_smbus_read_word_data(const i2c_client*, unsigned char)'
  [A] 'function void i2c_unregister_device(i2c_client*)'
  [A] 'function void ida_destroy(ida*)'
  [A] 'function sk_buff* ieee80211_ap_probereq_get(ieee80211_hw*, ieee80211_vif*)'
  [A] 'function void ieee80211_chswitch_done(ieee80211_vif*, bool)'
  [A] 'function void ieee80211_cqm_beacon_loss_notify(ieee80211_vif*, gfp_t)'
  [A] 'function void ieee80211_cqm_rssi_notify(ieee80211_vif*, nl80211_cqm_rssi_threshold_event, s32, gfp_t)'
  [A] 'function unsigned int ieee80211_get_hdrlen_from_skb(const sk_buff*)'
  [A] 'function void ieee80211_iterate_interfaces(ieee80211_hw*, u32, void (void*, u8*, ieee80211_vif*)*, void*)'
  [A] 'function sk_buff* ieee80211_nullfunc_get(ieee80211_hw*, ieee80211_vif*, bool)'
  [A] 'function sk_buff* ieee80211_pspoll_get(ieee80211_hw*, ieee80211_vif*)'
  [A] 'function void ieee80211_sched_scan_results(ieee80211_hw*)'
  [A] 'function void ieee80211_sched_scan_stopped(ieee80211_hw*)'
  [A] 'function int ieee80211_sta_ps_transition(ieee80211_sta*, bool)'
  [A] 'function void ieee80211_stop_rx_ba_session(ieee80211_vif*, u16, const u8*)'
  [A] 'function void iov_iter_bvec(iov_iter*, unsigned int, const bio_vec*, unsigned long int, unsigned long int)'
  [A] 'function void kill_litter_super(super_block*)'
  [A] 'function void kiocb_set_cancel_fn(kiocb*, kiocb_cancel_fn*)'
  [A] 'function int kstrtobool_from_user(const char*, unsigned long int, bool*)'
  [A] 'function void kthread_unuse_mm(mm_struct*)'
  [A] 'function void kthread_use_mm(mm_struct*)'
  [A] 'function ktime_t ktime_add_safe(const ktime_t, const ktime_t)'
  [A] 'function void kvfree_call_rcu(callback_head*, rcu_callback_t)'
  [A] 'function void* mempool_alloc_slab(gfp_t, void*)'
  [A] 'function mempool_t* mempool_create_node(int, mempool_alloc_t*, mempool_free_t*, void*, gfp_t, int)'
  [A] 'function void mempool_free_slab(void*, void*)'
  [A] 'function int mipi_dsi_driver_register_full(mipi_dsi_driver*, module*)'
  [A] 'function void mipi_dsi_driver_unregister(mipi_dsi_driver*)'
  [A] 'function void mm_trace_rss_stat(mm_struct*, int, long int, long int)'
  [A] 'function int mmc_add_host(mmc_host*)'
  [A] 'function mmc_host* mmc_alloc_host(int, device*)'
  [A] 'function int mmc_app_cmd(mmc_host*, mmc_card*)'
  [A] 'function unsigned int mmc_calc_max_discard(mmc_card*)'
  [A] 'function int mmc_can_erase(mmc_card*)'
  [A] 'function bool mmc_can_gpio_cd(mmc_host*)'
  [A] 'function int mmc_can_secure_erase_trim(mmc_card*)'
  [A] 'function int mmc_can_trim(mmc_card*)'
  [A] 'function int mmc_cmdq_disable(mmc_card*)'
  [A] 'function int mmc_cmdq_enable(mmc_card*)'
  [A] 'function void mmc_cqe_post_req(mmc_host*, mmc_request*)'
  [A] 'function int mmc_cqe_recovery(mmc_host*)'
  [A] 'function int mmc_cqe_start_req(mmc_host*, mmc_request*)'
  [A] 'function int mmc_detect_card_removed(mmc_host*)'
  [A] 'function void mmc_detect_change(mmc_host*, unsigned long int)'
  [A] 'function int mmc_erase(mmc_card*, unsigned int, unsigned int, unsigned int)'
  [A] 'function int mmc_erase_group_aligned(mmc_card*, unsigned int, unsigned int)'
  [A] 'function int mmc_flush_cache(mmc_card*)'
  [A] 'function void mmc_free_host(mmc_host*)'
  [A] 'function void mmc_get_card(mmc_card*, mmc_ctx*)'
  [A] 'function int mmc_get_ext_csd(mmc_card*, unsigned char**)'
  [A] 'function int mmc_gpio_get_cd(mmc_host*)'
  [A] 'function int mmc_gpio_get_ro(mmc_host*)'
  [A] 'function int mmc_gpiod_request_cd(mmc_host*, const char*, unsigned int, bool, unsigned int)'
  [A] 'function void mmc_gpiod_request_cd_irq(mmc_host*)'
  [A] 'function int mmc_gpiod_request_ro(mmc_host*, const char*, unsigned int, unsigned int)'
  [A] 'function int mmc_hw_reset(mmc_host*)'
  [A] 'function int mmc_of_parse_voltage(device_node*, u32*)'
  [A] 'function void mmc_put_card(mmc_card*, mmc_ctx*)'
  [A] 'function int mmc_register_driver(mmc_driver*)'
  [A] 'function void mmc_release_host(mmc_host*)'
  [A] 'function void mmc_remove_host(mmc_host*)'
  [A] 'function void mmc_request_done(mmc_host*, mmc_request*)'
  [A] 'function void mmc_retune_pause(mmc_host*)'
  [A] 'function void mmc_retune_release(mmc_host*)'
  [A] 'function void mmc_retune_unpause(mmc_host*)'
  [A] 'function void mmc_run_bkops(mmc_card*)'
  [A] 'function int mmc_sanitize(mmc_card*)'
  [A] 'function int mmc_send_status(mmc_card*, unsigned int*)'
  [A] 'function void mmc_set_data_timeout(mmc_data*, const mmc_card*)'
  [A] 'function int mmc_start_request(mmc_host*, mmc_request*)'
  [A] 'function int mmc_switch(mmc_card*, unsigned char, unsigned char, unsigned char, unsigned int)'
  [A] 'function void mmc_unregister_driver(mmc_driver*)'
  [A] 'function int mmc_wait_for_cmd(mmc_host*, mmc_command*, int)'
  [A] 'function void mmc_wait_for_req(mmc_host*, mmc_request*)'
  [A] 'function int netlink_has_listeners(sock*, unsigned int)'
  [A] 'function inode* new_inode(super_block*)'
  [A] 'function loff_t no_seek_end_llseek(file*, loff_t, int)'
  [A] 'function thermal_cooling_device* of_devfreq_cooling_register_power(device_node*, devfreq*, devfreq_cooling_power*)'
  [A] 'function int param_get_uint(char*, const kernel_param*)'
  [A] 'function int param_set_uint(const char*, const kernel_param*)'
  [A] 'function bool pci_device_is_present(pci_dev*)'
  [A] 'function int pci_enable_device_mem(pci_dev*)'
  [A] 'function void pci_free_irq(pci_dev*, unsigned int, void*)'
  [A] 'function int pci_request_irq(pci_dev*, unsigned int, irq_handler_t, irq_handler_t, void*, const char*, ...)'
  [A] 'function int pci_select_bars(pci_dev*, unsigned long int)'
  [A] 'function void pcibios_resource_to_bus(pci_bus*, pci_bus_region*, resource*)'
  [A] 'function bool pcie_aspm_enabled(pci_dev*)'
  [A] 'function void percpu_ref_kill_and_confirm(percpu_ref*, void (percpu_ref*)*)'
  [A] 'function int pinctrl_select_default_state(device*)'
  [A] 'function bool policy_has_boost_freq(cpufreq_policy*)'
  [A] 'function proc_dir_entry* proc_create_single_data(const char*, unsigned short int, proc_dir_entry*, int (seq_file*, void*)*, void*)'
  [A] 'function rb_node* rb_prev(const rb_node*)'
  [A] 'function void rb_replace_node(rb_node*, rb_node*, rb_root*)'
  [A] 'function int regmap_add_irq_chip(regmap*, int, int, int, const regmap_irq_chip*, regmap_irq_chip_data**)'
  [A] 'function void regmap_del_irq_chip(int, regmap_irq_chip_data*)'
  [A] 'function irq_domain* regmap_irq_get_domain(regmap_irq_chip_data*)'
  [A] 'function int regmap_raw_read(regmap*, unsigned int, void*, size_t)'
  [A] 'function int regmap_raw_write(regmap*, unsigned int, void*, size_t)'
  [A] 'function regulator* regulator_get_optional(device*, const char*)'
  [A] 'function int regulator_get_voltage_sel_regmap(regulator_dev*)'
  [A] 'function int regulator_list_voltage_table(regulator_dev*, unsigned int)'
  [A] 'function int regulator_map_voltage_ascend(regulator_dev*, int, int)'
  [A] 'function int regulator_set_voltage_sel_regmap(regulator_dev*, unsigned int)'
  [A] 'function int remap_vmalloc_range(vm_area_struct*, void*, unsigned long int)'
  [A] 'function rfkill_type rfkill_find_type(const char*)'
  [A] 'function int rtc_valid_tm(rtc_time*)'
  [A] 'function int rtc_year_days(unsigned int, unsigned int, unsigned int)'
  [A] 'function void sdio_claim_host(sdio_func*)'
  [A] 'function int sdio_disable_func(sdio_func*)'
  [A] 'function int sdio_enable_func(sdio_func*)'
  [A] 'function unsigned char sdio_f0_readb(sdio_func*, unsigned int, int*)'
  [A] 'function void sdio_f0_writeb(sdio_func*, unsigned char, unsigned int, int*)'
  [A] 'function mmc_pm_flag_t sdio_get_host_pm_caps(sdio_func*)'
  [A] 'function int sdio_memcpy_fromio(sdio_func*, void*, unsigned int, int)'
  [A] 'function int sdio_memcpy_toio(sdio_func*, unsigned int, void*, int)'
  [A] 'function int sdio_readsb(sdio_func*, void*, unsigned int, int)'
  [A] 'function int sdio_register_driver(sdio_driver*)'
  [A] 'function void sdio_release_host(sdio_func*)'
  [A] 'function int sdio_set_block_size(sdio_func*, unsigned int)'
  [A] 'function int sdio_set_host_pm_flags(sdio_func*, mmc_pm_flag_t)'
  [A] 'function void sdio_signal_irq(mmc_host*)'
  [A] 'function void sdio_unregister_driver(sdio_driver*)'
  [A] 'function int sdio_writesb(sdio_func*, unsigned int, void*, int)'
  [A] 'function irqreturn_t serio_interrupt(serio*, unsigned char, unsigned int)'
  [A] 'function void serio_reconnect(serio*)'
  [A] 'function void serio_unregister_port(serio*)'
  [A] 'function int set_page_dirty_lock(page*)'
  [A] 'function size_t sg_zero_buffer(scatterlist*, unsigned int, size_t, off_t)'
  [A] 'function scatterlist* sgl_alloc(long long unsigned int, unsigned int, unsigned int*)'
  [A] 'function void sgl_free(scatterlist*)'
  [A] 'function int simple_statfs(dentry*, kstatfs*)'
  [A] 'function int snd_dmaengine_pcm_prepare_slave_config(snd_pcm_substream*, snd_pcm_hw_params*, dma_slave_config*)'
  [A] 'function int snd_soc_dapm_get_pin_switch(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_dapm_info_pin_switch(snd_kcontrol*, snd_ctl_elem_info*)'
  [A] 'function int snd_soc_dapm_put_pin_switch(snd_kcontrol*, snd_ctl_elem_value*)'
  [A] 'function int snd_soc_jack_add_gpios(snd_soc_jack*, int, snd_soc_jack_gpio*)'
  [A] 'function int snd_soc_of_parse_audio_simple_widgets(snd_soc_card*, const char*)'
  [A] 'function unsigned int snd_soc_of_parse_daifmt(device_node*, const char*, device_node**, device_node**)'
  [A] 'function void snd_soc_of_parse_node_prefix(device_node*, snd_soc_codec_conf*, device_node*, const char*)'
  [A] 'function int snd_soc_of_parse_tdm_slot(device_node*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)'
  [A] 'function int snd_soc_runtime_calc_hw(snd_soc_pcm_runtime*, snd_pcm_hardware*, int)'
  [A] 'function int spi_bus_lock(spi_controller*)'
  [A] 'function int spi_bus_unlock(spi_controller*)'
  [A] 'function int spi_sync_locked(spi_device*, spi_message*)'
  [A] 'function __kernel_size_t strcspn(const char*, const char*)'
  [A] 'function int stream_open(inode*, file*)'
  [A] 'function irqreturn_t tcpci_irq(tcpci*)'
  [A] 'function tcpci* tcpci_register_port(device*, tcpci_data*)'
  [A] 'function void tcpci_unregister_port(tcpci*)'
  [A] 'function int thermal_zone_device_disable(thermal_zone_device*)'
  [A] 'function int thermal_zone_device_enable(thermal_zone_device*)'
  [A] 'function int thermal_zone_get_temp(thermal_zone_device*, int*)'
  [A] 'function thermal_zone_device* thermal_zone_get_zone_by_name(const char*)'
  [A] 'function int usb_add_hcd(usb_hcd*, unsigned int, unsigned long int)'
  [A] 'function int usb_ep_clear_halt(usb_ep*)'
  [A] 'function void usb_ep_fifo_flush(usb_ep*)'
  [A] 'function int usb_ep_fifo_status(usb_ep*)'
  [A] 'function int usb_gadget_probe_driver(usb_gadget_driver*)'
  [A] 'function int usb_gadget_unregister_driver(usb_gadget_driver*)'
  [A] 'function char* usb_get_gadget_udc_name()'
  [A] 'function int usb_hcd_check_unlink_urb(usb_hcd*, urb*, int)'
  [A] 'function void usb_hcd_giveback_urb(usb_hcd*, urb*, int)'
  [A] 'function int usb_hcd_link_urb_to_ep(usb_hcd*, urb*)'
  [A] 'function void usb_hcd_poll_rh_status(usb_hcd*)'
  [A] 'function void usb_hcd_resume_root_hub(usb_hcd*)'
  [A] 'function void usb_hcd_unlink_urb_from_ep(usb_hcd*, urb*)'
  [A] 'function void usb_put_hcd(usb_hcd*)'
  [A] 'function void usb_remove_hcd(usb_hcd*)'
  [A] 'function usb_role_switch* usb_role_switch_get(device*)'
  [A] 'function void usb_role_switch_put(usb_role_switch*)'
  [A] 'function void uuid_gen(__anonymous_struct__61*)'
  [A] 'function int uuid_parse(const char*, uuid_t*)'
  [A] 'function int vfs_fallocate(file*, int, long long int, long long int)'
  [A] 'function int vfs_getattr(const path*, kstat*, u32, unsigned int)'
  [A] 'function void* vmalloc_user(unsigned long int)'
  [A] 'function unsigned int vmf_insert_pfn(vm_area_struct*, unsigned long int, unsigned long int)'
  [A] 'function unsigned long int wait_for_completion_io_timeout(completion*, unsigned long int)'

2242 functions with some sub-type change:

  [C] 'function void* PDE_DATA(const inode*)' at proc_fs.h:112:1 has some sub-type changes:
    CRC (modversions) changed from 0xca6841d to 0x7aae1df7

  [C] 'function void __ClearPageMovable(page*)' at compaction.c:138:1 has some sub-type changes:
    CRC (modversions) changed from 0x6ddde37 to 0x10923ef0

  [C] 'function void __SetPageMovable(page*, address_space*)' at compaction.c:130:1 has some sub-type changes:
    CRC (modversions) changed from 0x75ba553a to 0x78273bab

  ... 2239 omitted; 2242 symbols have only CRC changes

8 Added variables:

  [A] 'tracepoint __tracepoint_android_vh_iommu_setup_dma_ops'
  [A] 'cma* dma_contiguous_default_area'
  [A] 'const vm_operations_struct drm_gem_cma_vm_ops'
  [A] 'static_key_false kasan_flag_enabled'
  [A] 'const unsigned char rfc1042_header[6]'
  [A] 'const inode_operations simple_dir_inode_operations'
  [A] 'const file_operations simple_dir_operations'
  [A] 'const uuid_t uuid_null'

47 Changed variables:

  [C] 'pglist_data contig_page_data' was changed at memblock.c:96:1:
    size of symbol changed from 7168 to 7296
    CRC (modversions) changed from 0xd65ceba4 to 0xdeb74410
    type of variable changed:
      type size changed from 57344 to 58368 (in bits)
      1 data member insertion:
        'task_struct* pglist_data::mkswapd[16]', at offset 52608 (in bits) at mmzone.h:774:1
      there are data member changes:
        15 ('int pglist_data::kswapd_order' .. 'atomic_long_t pglist_data::vm_stat[38]') offsets changed (by +1024 bits)
      2302 impacted interfaces

  [C] 'net init_net' was changed at net_namespace.c:47:1:
    size of symbol changed from 4224 to 4288
    CRC (modversions) changed from 0xa31a2902 to 0x787ff561
    type of variable changed:
      type size changed from 33792 to 34304 (in bits)
      1 data member insertion:
        'netns_ieee802154_lowpan net::ieee802154_lowpan', at offset 18944 (in bits) at net_namespace.h:131:1
      there are data member changes:
        type 'struct netns_ipv4' of 'net::ipv4' changed:
          type size hasn't changed
          1 data member insertion:
            'unsigned long int* netns_ipv4::sysctl_local_unbindable_ports', at offset 6976 (in bits) at ipv4.h:206:1
          there are data member changes:
            7 ('int netns_ipv4::sysctl_ip_prot_sock' .. 'siphash_key_t netns_ipv4::ip_id_key') offsets changed (by +64 bits)
          281 impacted interfaces
        10 ('netns_nf net::nf' .. 'netns_bpf net::bpf') offsets changed (by +128 bits)
        4 ('netns_xfrm net::xfrm' .. 'sock* net::diag_nlsk') offsets changed (by +512 bits)
      281 impacted interfaces

  [C] 'task_struct init_task' was changed at init_task.c:64:1:
    size of symbol changed from 4160 to 4224
    CRC (modversions) changed from 0xacdeb771 to 0x4763faa0
    type of variable changed:
      type size changed from 33280 to 33792 (in bits)
      1 data member deletion:
        'wake_q_head* task_struct::wake_q_head', at offset 15808 (in bits) at sched.h:1011:1
      1 data member insertion:
        'int task_struct::wake_q_count', at offset 16320 (in bits) at sched.h:1011:1
      there are data member changes:
        type 'struct sched_entity' of 'task_struct::se' changed:
          type size changed from 3072 to 3584 (in bits)
          5 data member insertions:
            'int sched_entity::depth', at offset 2560 (in bits) at sched.h:469:1
            'sched_entity* sched_entity::parent', at offset 2624 (in bits) at sched.h:470:1
            'cfs_rq* sched_entity::cfs_rq', at offset 2688 (in bits) at sched.h:472:1
            'cfs_rq* sched_entity::my_q', at offset 2752 (in bits) at sched.h:474:1
            'unsigned long int sched_entity::runnable_weight', at offset 2816 (in bits) at sched.h:476:1
          there are data member changes:
            'sched_avg sched_entity::avg' offset changed (by +512 bits)
          2302 impacted interfaces
        133 ('sched_rt_entity task_struct::rt' .. 'tlbflush_unmap_batch task_struct::tlb_ubc') offsets changed (by +512 bits)
        anonymous data member 'union {refcount_t rcu_users; callback_head rcu;}' offset changed from 19008 to 19520 (in bits) (by +512 bits)
        21 ('pipe_inode_info* task_struct::splice_pipe' .. 'thread_struct task_struct::thread') offsets changed (by +512 bits)
      2302 impacted interfaces

  [C] 'task_group root_task_group' was changed at core.c:7331:1:
    size of symbol changed from 336 to 448
    CRC (modversions) changed from 0x577959a6 to 0xe51acd56
    type of variable changed:
      type size changed from 2688 to 3584 (in bits)
      4 data member insertions:
        'sched_entity** task_group::se', at offset 1600 (in bits) at sched.h:384:1
        'cfs_rq** task_group::cfs_rq', at offset 1664 (in bits) at sched.h:386:1
        'unsigned long int task_group::shares', at offset 1728 (in bits) at sched.h:387:1
        'atomic_long_t task_group::load_avg', at offset 2048 (in bits) at sched.h:395:1
      there are data member changes:
        11 ('callback_head task_group::rcu' .. 'u64 task_group::android_vendor_data1[4]') offsets changed (by +512 bits)
      2302 impacted interfaces

  [C] 'rq runqueues' was changed at core.c:51:1:
    size of symbol changed from 3968 to 4096
    CRC (modversions) changed from 0x590425db to 0x7d8ddb7c
    type of variable changed:
      type size changed from 31744 to 32768 (in bits)
      2 data member insertions:
        'list_head rq::leaf_cfs_rq_list', at offset 19584 (in bits) at sched.h:939:1
        'list_head* rq::tmp_alone_branch', at offset 19712 (in bits) at sched.h:940:1
      there are data member changes:
        type 'struct cfs_rq' of 'rq::cfs' changed:
          type size changed from 2048 to 3072 (in bits)
          10 data member insertions:
            'unsigned long int cfs_rq::tg_load_avg_contrib', at offset 2048 (in bits) at sched.h:562:1
            'long int cfs_rq::propagate', at offset 2112 (in bits) at sched.h:563:1
            'long int cfs_rq::prop_runnable_sum', at offset 2176 (in bits) at sched.h:564:1
            'unsigned long int cfs_rq::h_load', at offset 2240 (in bits) at sched.h:572:1
            'u64 cfs_rq::last_h_load_update', at offset 2304 (in bits) at sched.h:573:1
            'sched_entity* cfs_rq::h_load_next', at offset 2368 (in bits) at sched.h:574:1
            'rq* cfs_rq::rq', at offset 2432 (in bits) at sched.h:579:1
            'int cfs_rq::on_list', at offset 2496 (in bits) at sched.h:589:1
            'list_head cfs_rq::leaf_cfs_rq_list', at offset 2560 (in bits) at sched.h:590:1
            'task_group* cfs_rq::tg', at offset 2688 (in bits) at sched.h:591:1
          2302 impacted interfaces
        2 ('rt_rq rq::rt' .. 'dl_rq rq::dl') offsets changed (by +1024 bits)
        8 ('unsigned long int rq::nr_uninterruptible' .. 'u64 rq::clock') offsets changed (by +1216 bits)
        43 ('u64 rq::clock_task' .. 'u64 rq::android_vendor_data1[96]') offsets changed (by +1024 bits)
      2302 impacted interfaces

  [C] 'bus_type amba_bustype' was changed at bus.c:215:1:
    CRC (modversions) changed from 0x3a27bef1 to 0xa38da620

  [C] 'const clk_ops clk_fixed_factor_ops' was changed at clk-fixed-factor.c:60:1:
    CRC (modversions) changed from 0xf66fcfb6 to 0x6d350258

  [C] 'const clk_ops clk_fixed_rate_ops' was changed at clk-fixed-rate.c:46:1:
    CRC (modversions) changed from 0xa301d63c to 0x6a810889

  ... 39 omitted; 42 symbols have only CRC changes

1 Added function symbol not referenced by debug info:

  [A] clear_page

'struct cfs_rq at sched.h:518:1' changed:
  details were reported earlier

'struct cma at cma.h:7:1' changed:
  type size changed from 1024 to 1280 (in bits)
  3 data member insertions:
    'hlist_head cma::mem_head', at offset 512 (in bits) at cma.h:14:1
    'spinlock_t cma::mem_head_lock', at offset 576 (in bits) at cma.h:15:1
    'debugfs_u32_array cma::dfs_bitmap', at offset 640 (in bits) at cma.h:16:1
  there are data member changes:
    'char cma::name[64]' offset changed (by +256 bits)
  2303 impacted interfaces

'struct dma_buf at dma-buf.h:394:1' changed:
  type size changed from 2112 to 3072 (in bits)
  3 data member insertions:
    'int dma_buf::mmap_count', at offset 2112 (in bits) at dma-buf.h:430:1
    'const vm_operations_struct* dma_buf::exp_vm_ops', at offset 2176 (in bits) at dma-buf.h:431:1
    'vm_operations_struct dma_buf::vm_ops', at offset 2240 (in bits) at dma-buf.h:432:1
  68 impacted interfaces

'struct kmem_cache at slub_def.h:84:1' changed:
  type size changed from 1728 to 1856 (in bits)
  1 data member insertion:
    'kasan_cache kmem_cache::kasan_info', at offset 1600 (in bits) at slub_def.h:129:1
  there are data member changes:
    2 ('unsigned int kmem_cache::useroffset' .. 'unsigned int kmem_cache::usersize') offsets changed (by +96 bits)
    'kmem_cache_node* kmem_cache::node[1]' offset changed (by +128 bits)
  2302 impacted interfaces

'struct mmc_host at host.h:275:1' changed:
  type size changed from 11264 to 12800 (in bits)
  1 data member insertion:
    'blk_keyslot_manager mmc_host::ksm', at offset 11008 (in bits) at host.h:482:1
  there are data member changes:
    'bool mmc_host::hsq_enabled' offset changed (by +1488 bits)
    'unsigned long int mmc_host::private[]' offset changed (by +1536 bits)
  19 impacted interfaces

'struct mmc_request at core.h:144:1' changed:
  type size changed from 1024 to 1152 (in bits)
  3 data member insertions:
    'bool mmc_request::crypto_enabled', at offset 1024 (in bits) at core.h:167:1
    'int mmc_request::crypto_key_slot', at offset 1056 (in bits) at core.h:168:1
    'u32 mmc_request::data_unit_num', at offset 1088 (in bits) at core.h:169:1
  19 impacted interfaces

'struct module at module.h:366:1' changed:
  type size hasn't changed
  1 data member insertion:
    'const char* module::scmversion', at offset 1600 (in bits) at module.h:380:1
  there are data member changes:
    19 ('kobject* module::holders_dir' .. 'int ()* module::init') offsets changed (by +64 bits)
  2302 impacted interfaces

'struct ndisc_options at ndisc.h:111:1' changed:
  type size changed from 1216 to 1408 (in bits)
  1 data member insertion:
    'nd_opt_hdr* ndisc_options::nd_802154_opt_array[3]', at offset 1216 (in bits) at ndisc.h:120:1
  281 impacted interfaces

'struct net at net_namespace.h:56:1' changed:
  details were reported earlier

'struct netns_ipv4 at ipv4.h:43:1' changed:
  details were reported earlier

'struct pglist_data at mmzone.h:726:1' changed:
  details were reported earlier

'struct rproc_ops at remoteproc.h:379:1' changed:
  type size changed from 896 to 960 (in bits)
  1 data member insertion:
    'void (rproc*)* rproc_ops::coredump', at offset 896 (in bits) at remoteproc.h:397:1
  16 impacted interfaces

'struct rq at sched.h:897:1' changed:
  details were reported earlier

'struct sched_class at sched.h:1790:1' changed:
  type size changed from 1536 to 1792 (in bits)
  1 data member insertion:
    'void (task_struct*, int)* sched_class::task_change_group', at offset 1536 (in bits) at sched.h:1845:1
  2302 impacted interfaces

'struct sched_entity at sched.h:452:1' changed:
  details were reported earlier

'struct task_group at sched.h:379:1' changed:
  details were reported earlier

'struct task_struct at sched.h:641:1' changed:
  details were reported earlier

'struct vm_fault at mm.h:519:1' changed:
  type size changed from 1024 to 1088 (in bits)
  3 data member deletions:
    'vm_area_struct* vm_fault::vma', at offset 0 (in bits) at mm.h:520:1
    'gfp_t vm_fault::gfp_mask', at offset 96 (in bits) at mm.h:522:1
    'unsigned long int vm_fault::address', at offset 192 (in bits) at mm.h:524:1
  there are data member changes:
    data member unsigned long int vm_fault::pgoff at offset 128 (in bits) became anonymous data member 'struct {vm_area_struct* vma; gfp_t gfp_mask; unsigned long int pgoff; unsigned long int address;}'
    and size changed from 64 to 256 (in bits) (by +192 bits)
    'unsigned int vm_fault::flags' offset changed (by +320 bits)
    2 ('unsigned int vm_fault::sequence' .. 'pmd_t vm_fault::orig_pmd') offsets changed (by -256 bits)
    7 ('pmd_t* vm_fault::pmd' .. 'spinlock_t* vm_fault::ptl') offsets changed (by +64 bits)
    type 'typedef pgtable_t' of 'vm_fault::prealloc_pte' changed:
      underlying type 'page*' changed:
    and offset changed from 832 to 896 (in bits) (by +64 bits)
    2 ('unsigned long int vm_fault::vma_flags' .. 'pgprot_t vm_fault::vma_page_prot') offsets changed (by +64 bits)
  2302 impacted interfaces

'struct vm_operations_struct at mm.h:578:1' changed:
  type size hasn't changed
  there are data member changes:
    type 'void (vm_fault*, unsigned long int, unsigned long int)*' of 'vm_operations_struct::map_pages' changed:
      pointer type changed from: 'void (vm_fault*, unsigned long int, unsigned long int)*' to: 'typedef vm_fault_t (vm_fault*, unsigned long int, unsigned long int)*'
  2302 impacted interfaces

Bug: 180027765
Change-Id: I9d713d57f26b05e4c91ad21b8ba345f9de3538cf
Signed-off-by: Will McVicker <willmcvicker@google.com>
2021-02-23 16:42:22 -08:00
Will McVicker
adc53e1fd0 ANDROID: modpost: update nits from late review
Updates the documentation and comments for the MODULE_SCMVERSION feature.

Bug: 180027765
Fixes: 4b9c11a373 ("ANDROID: modules: introduce the MODULE_SCMVERSION config")
Change-Id: I648b31c4810c777ec3d2cb141b61f5924559c76f
Signed-off-by: Will McVicker <willmcvicker@google.com>
2021-02-23 16:42:22 -08:00
Will McVicker
49121c77df ANDROID: GKI: Enable CONFIG_MODULE_SCMVERSION=y
This config enables the module attribute `scmversion` to allow
identifying the SCM versions of kernel modules. In particular, this can
be used to identity the SCM version of vendor kernel modules and
external modules which will vary from the GKI kernel's SCM version.

Bug: 180027765
Change-Id: I7ef84228e5cf0b1c792d022ae4bf8e5302c2dc5e
Signed-off-by: Will McVicker <willmcvicker@google.com>
2021-02-23 16:42:22 -08:00
Will McVicker
cca2b40a78 ANDROID: modpost: Support relative paths for module_srcpath
If a relative path is used for EXT_MODULES and -O is defined, then we
need to set the module_srcpath as relative to $(srctree) vs $(objtree).
Refer to [1] for more details.

[1] https://lore.kernel.org/lkml/20210120193100.3414664-1-masahiroy@kernel.org/

Bug: 180027765
Signed-off-by: Will McVicker <willmcvicker@google.com>
Change-Id: I17065f2dc7d5c3297f88500390a6f45aceea7229
2021-02-23 16:42:21 -08:00
Will McVicker
da2089a28a ANDROID: modules: introduce the MODULE_SCMVERSION config
Config MODULE_SCMVERSION introduces a new module attribute --
`scmversion` -- which can be used to identify a given module's SCM
version.  This is very useful for developers that update their kernel
independently from their kernel modules or vice-versa since the SCM
version provided by UTS_RELEASE (`uname -r`) will now differ from the
module's vermagic attribute.

For example, we have a CI setup that tests new kernel changes on the
hikey960 and db845c devices without updating their kernel modules. When
these tests fail, we need to be able to identify the exact device
configuration the test was using. By including MODULE_SCMVERSION, we can
identify the exact kernel and modules' SCM versions for debugging the
failures.

Additionally, by exposing the SCM version via the sysfs node
/sys/module/MODULENAME/scmversion, one can also verify the SCM versions
of the modules loaded from the initramfs. Currently, modinfo can only
retrieve module attributes from the module's ko on disk and not from the
actual module that is loaded in RAM.

You can retrieve the SCM version in two ways,

1) By using modinfo:
    > modinfo -F scmversion MODULENAME
2) By module sysfs node:
    > cat /sys/module/MODULENAME/scmversion

Bug: 180027765
Link: https://lore.kernel.org/lkml/20210121213641.3477522-1-willmcvicker@google.com
Signed-off-by: Will McVicker <willmcvicker@google.com>
Change-Id: Ib7c72c72f95c4545adb7cd4e842729557039ce3a
2021-02-23 16:42:21 -08:00
Will McVicker
8c7a2fec34 ANDROID: scripts/setlocalversion: allow running in a subdir
Getting the scmversion using scripts/setlocalversion currently only
works when run at the root of a git or mecurial project. This was
introduced in commit 8558f59edf ("setlocalversion: Ignote SCMs above
the linux source tree") so that if one is building within a subdir of
a git tree that isn't the kernel git project, then the vermagic wouldn't
include that git sha1.

For Android purposes, this isn't a concern. So let's bring back this
functionality so that we can use scripts/setlocalversion to capture the SCM
version of external modules that reside within subdirectories of an SCM
project.

Bug: 180027765
Link: https://lore.kernel.org/lkml/20201125010541.309848-2-willmcvicker@google.com
Signed-off-by: Will McVicker <willmcvicker@google.com>
Change-Id: If12ea75c6be0c0167f29f69b7cf13d1d85b7331c
2021-02-23 16:42:21 -08:00
Elliot Berman
e146d4c5bd ANDROID: abi_gki_aarch64_qcom: Update symbol list
Synchronize QCOM symbol list in android/abi_gki_aarch644_qcom.

Bug: 180592352
Change-Id: I61cd760763140f170462751625d1fbec7cb0daf5
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
2021-02-24 00:27:45 +00:00