Commit Graph

975007 Commits

Author SHA1 Message Date
Quentin Perret
b542f4c389 Revert "ANDROID: sched: Add vendor hooks for skipping sugov update"
This reverts commit 846bf8e8cb.

Signed-off-by: Quentin Perret <qperret@google.com>
Change-Id: Ib8b7721c2a37393a85108f4c8aee920f68044f0c
2021-03-17 17:40:28 +00:00
Quentin Perret
27d6dac0df Revert "ANDROID: sched: cpufreq_schedutil: move sugov traces to sched"
This reverts commit a68d66b29e.

Signed-off-by: Quentin Perret <qperret@google.com>
Change-Id: Ic8be3d2484d38b9c2f62d518980dcfef8cdb2c87
2021-03-17 17:40:20 +00:00
davidchao
cc574f0d36 ANDROID: thermal: Add logic for filter on-die tz genl event.
Add logic in enable_thermal_genl_check to avoid
thermal-hal being woken up all the time by on-die sensor.

When the temperature of the on-die sensor thermal_zone updates,
the thermal_zone_device_update() will be called to handle thermal
and then the netlink events will be sent
through thermal_notify_tz_trip_().
But there is currently no way to filter thermal_zone
in the thermal_netlink, so many netlink events will be sent
in a short amount of time. Because the on-die sensors
are very sensitive. Their temperature may jump up and down
quickly in a few ms.

Bug: 170682696
Test: boot and thermal-hal can receive thermal genl events from kernel
Change-Id: Idb3f4b07a2a2740c01d8785910878bfe6edc832d
Signed-off-by: davidchao <davidchao@google.com>
2021-03-16 23:42:07 +00:00
Eric Biggers
6c6fac8f39 ANDROID: mmc: support hardware that takes key directly
Currently when an MMC host driver declares crypto support, the MMC core
passes a keyslot and 32-bit DUN down to the driver in each request.

This is enough for the "standard" eMMC v5.2 crypto (cqhci-crypto).
However some SoCs don't follow this standard.  They don't have keyslots
but rather take keys directly, and they support longer DUNs.

To allow such hardware to be supported, modify the MMC core to pass a
pointer to the bio_crypt_ctx along with each request, replacing the
crypto_enabled and data_unit_num fields.  This way is more flexible.

Also update cqhci-crypto accordingly to keep it working.

(Not being sent upstream yet because this isn't really useful by itself;
it would need support for hardware that needs it to be upstreamed too.)

Bug: 180886435
Bug: 182283899
Change-Id: I8faf3135f570ca3f2798cf812b4245a5df5515ba
Signed-off-by: Eric Biggers <ebiggers@google.com>
2021-03-16 21:57:16 +00:00
Minchan Kim
e4636b47ef UPSTREAM: zram: fix broken page writeback
commit 0d8359620d9b ("zram: support page writeback") introduced two
problems.  It overwrites writeback_store's return value as kstrtol's
return value, which makes return value zero so user could see zero as
return value of write syscall even though it wrote data successfully.

It also breaks index value in the loop in that it doesn't increase the
index any longer.  It means it can write only first starting block index
so user couldn't write all idle pages in the zram so lose memory saving
chance.

This patch fixes those issues.

Link: https://lkml.kernel.org/r/20210312173949.2197662-2-minchan@kernel.org
Fixes: 0d8359620d9b("zram: support page writeback")
Signed-off-by: Minchan Kim <minchan@kernel.org>
Reported-by: Amos Bianchi <amosbianchi@google.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: John Dias <joaodias@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 2766f1821600cc7562bae2128ad0b163f744c5d9)

Bug: 182850185
Signed-off-by: Amos Bianchi <amosbianchi@google.com>
Change-Id: I9836b6350727dc4fffc1cc939647235781f0a4ee
2021-03-16 18:51:46 +00:00
Minchan Kim
542d1937ba UPSTREAM: zram: fix return value on writeback_store
writeback_store's return value is overwritten by submit_bio_wait's return
value.  Thus, writeback_store will return zero since there was no IO
error.  In the end, write syscall from userspace will see the zero as
return value, which could make the process stall to keep trying the write
until it will succeed.

Link: https://lkml.kernel.org/r/20210312173949.2197662-1-minchan@kernel.org
Fixes: 3b82a051c101("drivers/block/zram/zram_drv.c: fix error return codes not being returned in writeback_store")
Signed-off-by: Minchan Kim <minchan@kernel.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Colin Ian King <colin.king@canonical.com>
Cc: John Dias <joaodias@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 57e0076e6575a7b7cef620a0bd2ee2549ef77818)

Bug: 182850185
Signed-off-by: Amos Bianchi <amosbianchi@google.com>
Change-Id: I7cbef91b62584826192b7ebdb434675a549a9801
2021-03-16 18:51:38 +00:00
Rick Yiu
475aea007d ANDROID: sched: Add vendor hook for util_est_update
Vendor may have its own estimated utilization.

Bug: 170508405
Signed-off-by: Rick Yiu <rickyiu@google.com>
Change-Id: I6055907de75ace4586c3ad854d40f42e3bf40147
2021-03-16 12:49:49 +00:00
Ram Chandrasekar
89ea2f1eca ANDROID: GKI: Enable DTPM framework
Enable DTPM framework, so that userspace daemons can control the max
power cap for a device.

Bug: 182396925
Change-Id: I7a1bdb658289843af8f4bb6824b424eb76b32143
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-16 09:21:48 +00:00
Siddharth Gupta
a3a580961b ANDROID: GKI: Add remoteproc framework symbols to symbol list
This change adds the symbols that allow subsystems to collect minidumps.

Bug: 180426943
Change-Id: Idfda557600606aeca0c912ca0b3cedab8ff7c23e
Signed-off-by: Siddharth Gupta <quic_sidgup@quicinc.com>
2021-03-16 09:21:22 +00:00
xieliujie
53e8099784 ANDROID: vendor_hooks: Add hooks for scheduler
Add hooks to support oem's scheduler feature.

Bug: 182441701
Signed-off-by: xieliujie <xieliujie@oppo.com>
Change-Id: I31023844b20923bed1ca216831e7a2431e9ab0c9
2021-03-16 09:08:22 +00:00
Daiyue Zhang
7e2c33ac0e FROMGIT: configfs: fix a use-after-free in __configfs_open_file
Commit b0841eefd9 ("configfs: provide exclusion between IO and removals")
uses ->frag_dead to mark the fragment state, thus no bothering with extra
refcount on config_item when opening a file. The configfs_get_config_item
was removed in __configfs_open_file, but not with config_item_put. So the
refcount on config_item will lost its balance, causing use-after-free
issues in some occasions like this:

Test:
1. Mount configfs on /config with read-only items:
drwxrwx--- 289 root   root            0 2021-04-01 11:55 /config
drwxr-xr-x   2 root   root            0 2021-04-01 11:54 /config/a
--w--w--w-   1 root   root         4096 2021-04-01 11:53 /config/a/1.txt
......

2. Then run:
for file in /config
do
echo $file
grep -R 'key' $file
done

3. __configfs_open_file will be called in parallel, the first one
got called will do:
if (file->f_mode & FMODE_READ) {
	if (!(inode->i_mode & S_IRUGO))
		goto out_put_module;
			config_item_put(buffer->item);
				kref_put()
					package_details_release()
						kfree()

the other one will run into use-after-free issues like this:
BUG: KASAN: use-after-free in __configfs_open_file+0x1bc/0x3b0
Read of size 8 at addr fffffff155f02480 by task grep/13096
CPU: 0 PID: 13096 Comm: grep VIP: 00 Tainted: G        W       4.14.116-kasan #1
TGID: 13096 Comm: grep
Call trace:
dump_stack+0x118/0x160
kasan_report+0x22c/0x294
__asan_load8+0x80/0x88
__configfs_open_file+0x1bc/0x3b0
configfs_open_file+0x28/0x34
do_dentry_open+0x2cc/0x5c0
vfs_open+0x80/0xe0
path_openat+0xd8c/0x2988
do_filp_open+0x1c4/0x2fc
do_sys_open+0x23c/0x404
SyS_openat+0x38/0x48

Allocated by task 2138:
kasan_kmalloc+0xe0/0x1ac
kmem_cache_alloc_trace+0x334/0x394
packages_make_item+0x4c/0x180
configfs_mkdir+0x358/0x740
vfs_mkdir2+0x1bc/0x2e8
SyS_mkdirat+0x154/0x23c
el0_svc_naked+0x34/0x38

Freed by task 13096:
kasan_slab_free+0xb8/0x194
kfree+0x13c/0x910
package_details_release+0x524/0x56c
kref_put+0xc4/0x104
config_item_put+0x24/0x34
__configfs_open_file+0x35c/0x3b0
configfs_open_file+0x28/0x34
do_dentry_open+0x2cc/0x5c0
vfs_open+0x80/0xe0
path_openat+0xd8c/0x2988
do_filp_open+0x1c4/0x2fc
do_sys_open+0x23c/0x404
SyS_openat+0x38/0x48
el0_svc_naked+0x34/0x38

To fix this issue, remove the config_item_put in
__configfs_open_file to balance the refcount of config_item.

Fixes: b0841eefd9 ("configfs: provide exclusion between IO and removals")
Signed-off-by: Daiyue Zhang <zhangdaiyue1@huawei.com>
Signed-off-by: Yi Chen <chenyi77@huawei.com>
Signed-off-by: Ge Qiu <qiuge@huawei.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Bug: 174049066
(cherry picked from commit 14fbbc8297728e880070f7b077b3301a8c698ef9
 git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master)
Cc: Daniel Rosenberg <drosen@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I745711ed546c1be97360670b77aedfb929bffcec
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
2021-03-16 05:59:39 +00:00
Choonghoon Park
7656aa0f48 ANDROID: lib/plist.c: Export plist-related APIs
Export plist_add(), plist_del() and plist_requeue() for vendor modules.

Bug: 180865128

Signed-off-by: Choonghoon Park <choong.park@samsung.com>
Change-Id: I0b6fd9becd04428d998c2ce031804bec6ff87be5
2021-03-16 01:19:21 +00:00
Kuan-Ying Lee
4d63efb9ae ANDROID: module: Add vendor hook
Add vendor hook for module init, so we can get memory type and
use it to do memory type check for architecture
dependent page table setting.

Bug: 181639260

Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
Change-Id: I95b70d7a57994f2548fddfb2290d4c9136f58785
2021-03-15 15:39:00 +00:00
Kuan-Ying Lee
2ff446fc4d ANDROID: bpf: Add vendor hook
Add vendor hook for bpf, so we can get memory type and
use it to do memory type check for architecture
dependent page table setting.

Bug: 181639260

Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
Change-Id: Icac325a040fb88c7f6b04b2409029b623bd8515f
2021-03-15 15:38:19 +00:00
Kuan-Ying Lee
dccee128b7 ANDROID: kernel: Add vendor hook in creds
Add vendor hook for creds, so we get the cred information
to monitor cred lifetime.

Bug: 181639260

Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
Change-Id: I8f254464e07f9c88336995152479ce91deb13c75
2021-03-15 15:37:57 +00:00
Kuan-Ying Lee
0a3b407463 ANDROID: security: selinux: Add vendor hook in avc
Add vendor hook for avc, so we can get avc_node information
to monitor avc lifetime.

Bug: 181639260

Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
Change-Id: Idbebeca926c2cb407264f2872b032e1f18462697
2021-03-15 15:37:18 +00:00
Marc Zyngier
a128ec2b2e UPSTREAM: KVM: arm64: Fix exclusive limit for IPA size
When registering a memslot, we check the size and location of that
memslot against the IPA size to ensure that we can provide guest
access to the whole of the memory.

Unfortunately, this check rejects memslot that end-up at the exact
limit of the addressing capability for a given IPA size. For example,
it refuses the creation of a 2GB memslot at 0x8000000 with a 32bit
IPA space.

Fix it by relaxing the check to accept a memslot reaching the
limit of the IPA space.

Fixes: c3058d5da2 ("arm/arm64: KVM: Ensure memslots are within KVM_PHYS_SIZE")
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Reviewed-by: Andrew Jones <drjones@redhat.com>
Link: https://lore.kernel.org/r/20210311100016.3830038-3-maz@kernel.org
(cherry picked from commit 262b003d059c6671601a19057e9fe1a5e7f23722)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 178098380
Test: atest VirtualizationHostTestCases on an EL2-enabled device
Change-Id: I82fcfb372b375c2e35997fdc4b33dbd33f056887
2021-03-15 10:47:51 +00:00
Marc Zyngier
ac821b6257 UPSTREAM: KVM: arm64: Reject VM creation when the default IPA size is unsupported
KVM/arm64 has forever used a 40bit default IPA space, partially
due to its 32bit heritage (where the only choice is 40bit).

However, there are implementations in the wild that have a *cough*
much smaller *cough* IPA space, which leads to a misprogramming of
VTCR_EL2, and a guest that is stuck on its first memory access
if userspace dares to ask for the default IPA setting (which most
VMMs do).

Instead, blundly reject the creation of such VM, as we can't
satisfy the requirements from userspace (with a one-off warning).
Also clarify the boot warning, and document that the VM creation
will fail when an unsupported IPA size is provided.

Although this is an ABI change, it doesn't really change much
for userspace:

- the guest couldn't run before this change, but no error was
  returned. At least userspace knows what is happening.

- a memory slot that was accepted because it did fit the default
  IPA space now doesn't even get a chance to be registered.

The other thing that is left doing is to convince userspace to
actually use the IPA space setting instead of relying on the
antiquated default.

Fixes: 233a7cb235 ("kvm: arm64: Allow tuning the physical address size for VM")
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable@vger.kernel.org
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Link: https://lore.kernel.org/r/20210311100016.3830038-2-maz@kernel.org
(cherry picked from commit 7d717558dd5ef10d28866750d5c24ff892ea3778)
Signed-off-by: Will Deacon <willdeacon@google.com>
Bug: 178098380
Test: atest VirtualizationHostTestCases on an EL2-enabled device
Change-Id: I36332fbe5606affd151976a6354f3e9c45fc214a
2021-03-15 10:47:05 +00:00
Greg Kroah-Hartman
d2eb8b0028 ANDROID: GKI: add android_kabi.h
This header file is to be used for various macros to help make keeping
the kernel ABI "stable" during an "ABI Freeze" period.

They are to be used both before the freeze (to anticipate places where
there will be changes), and after the freeze (to keep the abi stable for
structures where there were changes due to LTS or other changes to the
kernel tree.)

Strongly based on rh_kabi.h from Red Hat's RHEL kernel tree.

This adds support for "real" padding and the ability to replace fields
with other fields.

But, note that ABI changes will still be caught by libabigail at this
point in time, work on that is still ongoing.  When that is completed,
all that will be needed is to modify the _ANDROID_KABI_RESERVE() macro
in this file.  No other file changes should be needed.

Bug: 151154716
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I77038cc251c819c3ed22a9cb8843b185416b6727
2021-03-15 07:47:37 +00:00
Marco Elver
45021f7679 UPSTREAM: MAINTAINERS: add entry for KFENCE
Add entry for KFENCE maintainers.

Link: https://lkml.kernel.org/r/20201103175841.3495947-10-elver@google.com
Signed-off-by: Alexander Potapenko <glider@google.com>
Signed-off-by: Marco Elver <elver@google.com>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: SeongJae Park <sjpark@amazon.de>
Co-developed-by: Alexander Potapenko <glider@google.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christopher Lameter <cl@linux.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Hillf Danton <hdanton@sina.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jann Horn <jannh@google.com>
Cc: Joern Engel <joern@purestorage.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Paul E. McKenney <paulmck@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Bug: 180086542
Bug: 177201604
(cherry picked from commit 0825c1d57f02e3fb228bbecad827956d4c796d3a)
Signed-off-by: Alexander Potapenko <glider@google.com>
Change-Id: I65e4b38dbc3105a1dea096c1f5cf69955fd6a7a2
2021-03-14 08:17:04 +00:00
Giuliano Procida
90d03f6fcf ANDROID: Clang LTO: Comment on symbol visibility workaround
This commit leaves a TODO in the code so we can more easily keep track
of the workaround.

Bug: 182572011
Fixes: be409db652 ("ANDROID: Clang LTO: Only set -fvisibility=hidden for x86")
Signed-off-by: Giuliano Procida <gprocida@google.com>
Change-Id: I0277a8c0704e5caf8885884ec4e3642ebe03667f
2021-03-13 12:38:32 +00:00
Minchan Kim
169ddec367 FROMLIST: mm: fs: Invalidate BH LRU during page migration
Pages containing buffer_heads that are in one of the per-CPU
buffer_head LRU caches will be pinned and thus cannot be migrated.
This can prevent CMA allocations from succeeding, which are often used
on platforms with co-processors (such as a DSP) that can only use
physically contiguous memory. It can also prevent memory
hot-unplugging from succeeding, which involves migrating at least
MIN_MEMORY_BLOCK_SIZE bytes of memory, which ranges from 8 MiB to 1
GiB based on the architecture in use.

Correspondingly, invalidate the BH LRU caches before a migration
starts and stop any buffer_head from being cached in the LRU caches,
until migration has finished.

Bug: 180018981
Link: https://lore.kernel.org/linux-mm/20210310161429.399432-3-minchan@kernel.org/
Signed-off-by: Chris Goldsworthy <cgoldswo@codeaurora.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: I7ac085c2ec14a81c3c4d7b65a7eeedb0cfba4ea6
2021-03-12 12:35:53 -08:00
Minchan Kim
3039d8580c BACKPORT: FROMLIST: mm: disable LRU pagevec during the migration temporarily
LRU pagevec holds refcount of pages until the pagevec are drained.
It could prevent migration since the refcount of the page is greater
than the expection in migration logic. To mitigate the issue,
callers of migrate_pages drains LRU pagevec via migrate_prep or
lru_add_drain_all before migrate_pages call.

However, it's not enough because pages coming into pagevec after the
draining call still could stay at the pagevec so it could keep
preventing page migration. Since some callers of migrate_pages have
retrial logic with LRU draining, the page would migrate at next trail
but it is still fragile in that it doesn't close the fundamental race
between upcoming LRU pages into pagvec and migration so the migration
failure could cause contiguous memory allocation failure in the end.

To close the race, this patch disables lru caches(i.e, pagevec)
during ongoing migration until migrate is done.

Since it's really hard to reproduce, I measured how many times
migrate_pages retried with force mode(it is about a fallback to a
sync migration) with below debug code.

int migrate_pages(struct list_head *from, new_page_t get_new_page,
			..
			..

if (rc && reason == MR_CONTIG_RANGE && pass > 2) {
       printk(KERN_ERR, "pfn 0x%lx reason %d\n", page_to_pfn(page), rc);
       dump_page(page, "fail to migrate");
}

The test was repeating android apps launching with cma allocation
in background every five seconds. Total cma allocation count was
about 500 during the testing. With this patch, the dump_page count
was reduced from 400 to 30.

The new interface is also useful for memory hotplug which currently
drains lru pcp caches after each migration failure. This is rather
suboptimal as it has to disrupt others running during the operation.
With the new interface the operation happens only once. This is also in
line with pcp allocator cache which are disabled for the offlining as
well.

Bug: 180018981
Link: https://lore.kernel.org/linux-mm/20210310161429.399432-2-minchan@kernel.org/
[minchan: Resolved conflict in mm/memory_hotplug.c, mm/swap.c]
Signed-off-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: Ie1e09cf26e3105b674a9aed4ac65070efee608af
2021-03-12 12:35:53 -08:00
Minchan Kim
134ac2d4dc FROMLIST: mm: replace migrate_prep with lru_add_drain_all
Currently, migrate_prep is merely a wrapper of lru_cache_add_all.
There is not much to gain from having additional abstraction.

Use lru_add_drain_all instead of migrate_prep, which would be more
descriptive.

note: migrate_prep_local in compaction.c changed into lru_add_drain
to avoid CPU schedule cost with involving many other CPUs to keep
keep old behavior.

Bug: 180018981
Link: https://lore.kernel.org/linux-mm/20210310161429.399432-1-minchan@kernel.org/
Signed-off-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: I1bd3fcb13993e8a7a7961ceec817ac17304364cb
2021-03-12 12:35:53 -08:00
Jan Stancek
a71a3e1ce6 UPSTREAM: mm: migrate: initialize err in do_migrate_pages
After commit 236c32eb1096 ("mm: migrate: clean up migrate_prep{_local}")',
do_migrate_pages can return uninitialized variable 'err' (which is
propagated to user-space as error) when 'from' and 'to' nodesets are
identical.  This can be reproduced with LTP migrate_pages01, which calls
migrate_pages() with same set for both old/new_nodes.

Add 'err' initialization back.

Bug: 180018981
Link: https://lkml.kernel.org/r/456a021c7ef3636d7668cec9dcb4a446a4244812.1609855564.git.jstancek@redhat.com
Fixes: 236c32eb1096 ("mm: migrate: clean up migrate_prep{_local}")
Signed-off-by: Jan Stancek <jstancek@redhat.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Yang Shi <shy828301@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Song Liu <songliubraving@fb.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit f555befd185dc097ede887eb7b308c2e1c1369d4)
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: Ia0b7012dc4191bf3af5ca015939d9e37a1f7ec43
2021-03-12 12:35:52 -08:00
Yang Shi
059eaf82c0 UPSTREAM: mm: migrate: clean up migrate_prep{_local}
The migrate_prep{_local} never fails, so it is pointless to have return
value and check the return value.

Bug: 180018981
Link: https://lkml.kernel.org/r/20201113205359.556831-5-shy828301@gmail.com
Signed-off-by: Yang Shi <shy828301@gmail.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Song Liu <songliubraving@fb.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 236c32eb109696590b7428957eda50cc05e22af8)
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: I26ae0a4240c704e6127b51532e5de8ba778edd6e
2021-03-12 12:35:52 -08:00
Giuliano Procida
be409db652 ANDROID: Clang LTO: Only set -fvisibility=hidden for x86
Otherwise this upsets ABI monitoring.

Leaf changes summary: 2689 artifacts changed
Changed leaf types summary: 16 leaf types changed
Removed/Changed/Added functions summary: 0 Removed, 2472 Changed, 136 Added functions
Removed/Changed/Added variables summary: 0 Removed, 47 Changed, 18 Added variables

136 Added functions:

  [A] 'function int ___pskb_trim(sk_buff*, unsigned int)'
  [A] 'function void __cfi_slowpath(uint64_t, void*, void*)'
  [A] 'function void __dynamic_dev_dbg(_ddebug*, const device*, const char*, ...)'
  [A] 'function void __dynamic_pr_debug(_ddebug*, const char*, ...)'
  [A] 'function ktime_t __hrtimer_get_remaining(const hrtimer*, bool)'
  [A] 'function zoneref* __next_zones_zonelist(zoneref*, zone_type, nodemask_t*)'
  [A] 'function int __nla_validate(const nlattr*, int, int, const nla_policy*, unsigned int, netlink_ext_ack*)'
  [A] 'function void __skb_get_hash(sk_buff*)'
  [A] 'function sk_buff* __skb_gso_segment(sk_buff*, netdev_features_t, bool)'
  [A] 'function int __trace_bputs(unsigned long int, const char*)'
  [A] 'function int __trace_printk(unsigned long int, const char*, ...)'
  [A] 'function int _raw_spin_trylock_bh(raw_spinlock_t*)'
  [A] 'function int add_memory_subsection(int, u64, u64)'
  [A] 'function int alarm_cancel(alarm*)'
  [A] 'function void alarm_init(alarm*, alarmtimer_type, enum alarmtimer_restart (alarm*, typedef ktime_t)*)'
  [A] 'function void alarm_start_relative(alarm*, ktime_t)'
  [A] 'function int bgpio_init(gpio_chip*, device*, unsigned long int, void*, void*, void*, void*, void*, unsigned long int)'
  [A] 'function int bitmap_parselist(const char*, unsigned long int*, int)'
  [A] 'function int bitmap_parselist_user(const char*, unsigned int, unsigned long int*, int)'
  [A] 'function void bt_err(const char*, ...)'
  [A] 'function int cgroup_path_ns(cgroup*, char*, size_t, cgroup_namespace*)'
  [A] 'function void clk_hw_set_rate_range(clk_hw*, unsigned long int, unsigned long int)'
  [A] 'function unsigned int cpufreq_quick_get(unsigned int)'
  [A] 'function s64 cpuidle_governor_latency_req(unsigned int)'
  [A] 'function int cpuidle_register_governor(cpuidle_governor*)'
  [A] 'function int cpupri_find_fitness(cpupri*, task_struct*, cpumask*, typedef bool (task_struct*, int)*)'
  [A] 'function __sum16 csum_ipv6_magic(const in6_addr*, const in6_addr*, __u32, __u8, __wsum)'
  [A] 'function __wsum csum_partial(void*, int, __wsum)'
  [A] 'function dentry* debugfs_create_blob(const char*, umode_t, dentry*, debugfs_blob_wrapper*)'
  [A] 'function dentry* debugfs_create_symlink(const char*, dentry*, const char*)'
  [A] 'function int dev_pm_genpd_remove_notifier(device*)'
  [A] 'function int dev_pm_genpd_set_next_wakeup(device*, ktime_t)'
  [A] 'function int dev_pm_opp_register_notifier(device*, notifier_block*)'
  [A] 'function int dev_pm_opp_unregister_notifier(device*, notifier_block*)'
  [A] 'function int devfreq_add_governor(devfreq_governor*)'
  [A] 'function int devfreq_remove_governor(devfreq_governor*)'
  [A] 'function void device_remove_groups(device*, const attribute_group**)'
  [A] 'function ssize_t device_show_int(device*, device_attribute*, char*)'
  [A] 'function ssize_t device_store_int(device*, device_attribute*, const char*, size_t)'
  [A] 'function backlight_device* devm_backlight_device_register(device*, const char*, device*, void*, const backlight_ops*, const backlight_properties*)'
  [A] 'function int devm_blk_ksm_init(device*, blk_keyslot_manager*, unsigned int)'
  [A] 'function void devm_extcon_dev_unregister(device*, extcon_dev*)'
  [A] 'function usb_phy* devm_usb_get_phy_by_node(device*, device_node*, notifier_block*)'
  [A] 'function bool drm_edid_is_valid(edid*)'
  [A] 'function bool drm_mode_is_420_only(const drm_display_info*, const drm_display_mode*)'
  [A] 'function pid* find_get_pid(pid_t)'
  [A] 'function task_struct* find_task_by_vpid(pid_t)'
  [A] 'function const char* fwnode_get_name(const fwnode_handle*)'
  [A] 'function fwnode_handle* fwnode_get_named_child_node(const fwnode_handle*, const char*)'
  [A] 'function pid* get_task_pid(task_struct*, pid_type)'
  [A] 'function unsigned long int get_unmapped_area(file*, unsigned long int, unsigned long int, unsigned long int, unsigned long int)'
  [A] 'function void getboottime64(timespec64*)'
  [A] 'function zone_type gfp_zone(gfp_t)'
  [A] 'function void gro_cells_destroy(gro_cells*)'
  [A] 'function int gro_cells_init(gro_cells*, net_device*)'
  [A] 'function int gro_cells_receive(gro_cells*, sk_buff*)'
  [A] 'function hci_dev* hci_alloc_dev()'
  [A] 'function void hci_free_dev(hci_dev*)'
  [A] 'function int hci_recv_frame(hci_dev*, sk_buff*)'
  [A] 'function int hci_register_dev(hci_dev*)'
  [A] 'function void hci_unregister_dev(hci_dev*)'
  [A] 'function bool hrtimer_active(const hrtimer*)'
  [A] 'function i2c_client* i2c_new_scanned_device(i2c_adapter*, i2c_board_info*, const unsigned short int*, int (i2c_adapter*, unsigned short int)*)'
  [A] 'function i2c_adapter* i2c_verify_adapter(device*)'
  [A] 'function int input_mt_assign_slots(input_dev*, int*, const input_mt_pos*, int, int)'
  [A] 'function void input_mt_drop_unused(input_dev*)'
  [A] 'function void input_mt_report_finger_count(input_dev*, int)'
  [A] 'function void input_mt_sync_frame(input_dev*)'
  [A] 'function unsigned long int int_sqrt(unsigned long int)'
  [A] 'function int iommu_attach_group(iommu_domain*, iommu_group*)'
  [A] 'function void iommu_detach_group(iommu_domain*, iommu_group*)'
  [A] 'function int iommu_get_msi_cookie(iommu_domain*, dma_addr_t)'
  [A] 'function phys_addr_t iommu_iova_to_phys(iommu_domain*, dma_addr_t)'
  [A] 'function __sum16 ip_compute_csum(void*, int)'
  [A] 'function bool ipv6_ext_hdr(u8)'
  [A] 'function int ipv6_skip_exthdr(const sk_buff*, int, u8*, __be16*)'
  [A] 'function int kstrtoull_from_user(const char*, size_t, unsigned int, long long unsigned int*)'
  [A] 'function llist_node* llist_reverse_order(llist_node*)'
  [A] 'function nlattr* nla_find(const nlattr*, int, int)'
  [A] 'function nlattr* nla_reserve(sk_buff*, int, int)'
  [A] 'function nlattr* nla_reserve_64bit(sk_buff*, int, int, int)'
  [A] 'function int nvmem_cell_read_u32(device*, const char*, u32*)'
  [A] 'function thermal_cooling_device* of_devfreq_cooling_register(device_node*, devfreq*)'
  [A] 'function device_node* of_find_node_by_phandle(phandle)'
  [A] 'function bool of_graph_is_present(const device_node*)'
  [A] 'function int of_platform_device_destroy(device*, void*)'
  [A] 'function int of_property_read_variable_u16_array(const device_node*, const char*, u16*, size_t, size_t)'
  [A] 'function int param_get_ullong(char*, const kernel_param*)'
  [A] 'function task_struct* pick_highest_pushable_task(rq*, int)'
  [A] 'function pid_t pid_nr_ns(pid*, pid_namespace*)'
  [A] 'function void proc_remove(proc_dir_entry*)'
  [A] 'function void proc_set_user(proc_dir_entry*, kuid_t, kgid_t)'
  [A] 'function void ps2_begin_command(ps2dev*)'
  [A] 'function void ps2_cmd_aborted(ps2dev*)'
  [A] 'function int ps2_command(ps2dev*, u8*, unsigned int)'
  [A] 'function void ps2_drain(ps2dev*, size_t, unsigned int)'
  [A] 'function void ps2_end_command(ps2dev*)'
  [A] 'function bool ps2_handle_ack(ps2dev*, u8)'
  [A] 'function bool ps2_handle_response(ps2dev*, u8)'
  [A] 'function void ps2_init(ps2dev*, serio*)'
  [A] 'function int ps2_sendbyte(ps2dev*, u8, unsigned int)'
  [A] 'function int ps2_sliced_command(ps2dev*, u8)'
  [A] 'function void qdisc_reset(Qdisc*)'
  [A] 'function rb_node* rb_last(const rb_root*)'
  [A] 'function int remove_memory_subsection(int, u64, u64)'
  [A] 'function int scsi_device_quiesce(scsi_device*)'
  [A] 'function void scsi_remove_device(scsi_device*)'
  [A] 'function void serio_rescan(serio*)'
  [A] 'function void serio_unregister_child_port(serio*)'
  [A] 'function void show_regs(pt_regs*)'
  [A] 'function void si_meminfo(sysinfo*)'
  [A] 'function void si_swapinfo(sysinfo*)'
  [A] 'function int skb_append_pagefrags(sk_buff*, page*, int, size_t)'
  [A] 'function __wsum skb_checksum(const sk_buff*, int, int, __wsum)'
  [A] 'function void snd_pcm_stream_lock(snd_pcm_substream*)'
  [A] 'function void snd_pcm_stream_unlock(snd_pcm_substream*)'
  [A] 'function void static_key_disable(static_key*)'
  [A] 'function long int strncpy_from_user(char*, const char*, long int)'
  [A] 'function int sysfs_create_bin_file(kobject*, const bin_attribute*)'
  [A] 'function void sysfs_remove_bin_file(kobject*, const bin_attribute*)'
  [A] 'function bool task_may_not_preempt(task_struct*, int)'
  [A] 'function int thermal_zone_get_slope(thermal_zone_device*)'
  [A] 'function ktime_t tick_nohz_get_sleep_length(ktime_t*)'
  [A] 'function unsigned long int total_swapcache_pages()'
  [A] 'function const char* trace_print_flags_seq(trace_seq*, const char*, unsigned long int, const trace_print_flags*)'
  [A] 'function const char* trace_print_hex_seq(trace_seq*, const unsigned char*, int, bool)'
  [A] 'function int tracepoint_probe_register_prio(tracepoint*, void*, void*, int)'
  [A] 'function int ufshcd_shutdown(ufs_hba*)'
  [A] 'function int update_devfreq(devfreq*)'
  [A] 'function void usb_phy_set_charger_current(usb_phy*, unsigned int)'
  [A] 'function void usb_put_dev(usb_device*)'
  [A] 'function usb_role_switch* usb_role_switch_find_by_fwnode(const fwnode_handle*)'
  [A] 'function int vm_insert_page(vm_area_struct*, unsigned long int, page*)'
  [A] 'function unsigned long int vmalloc_nr_pages()'
  [A] 'function bool zone_watermark_ok(zone*, unsigned int, unsigned long int, int, unsigned int)'
  [A] 'function bool zone_watermark_ok_safe(zone*, unsigned int, unsigned long int, int)'

2472 functions with some sub-type change:

  [C] 'function void* PDE_DATA(const inode*)' at generic.c:799:1 has some sub-type changes:
    CRC (modversions) changed from 0x7aae1df7 to 0x9d4e937a

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

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

  ... 2469 omitted; 2472 symbols have only CRC changes

18 Added variables:

  [A] 'tracepoint __tracepoint_android_rvh_check_preempt_wakeup'
  [A] 'tracepoint __tracepoint_android_rvh_cpufreq_transition'
  [A] 'tracepoint __tracepoint_android_rvh_pick_next_entity'
  [A] 'tracepoint __tracepoint_android_rvh_sched_balance_rt'
  [A] 'tracepoint __tracepoint_android_rvh_select_task_rq_rt'
  [A] 'tracepoint __tracepoint_android_vh_allow_domain_state'
  [A] 'tracepoint __tracepoint_android_vh_ipi_stop'
  [A] 'tracepoint __tracepoint_android_vh_printk_hotplug'
  [A] 'tracepoint __tracepoint_android_vh_timer_calc_index'
  [A] 'tracepoint __tracepoint_cpu_frequency_limits'
  [A] 'tracepoint __tracepoint_ipi_entry'
  [A] 'tracepoint __tracepoint_ipi_raise'
  [A] 'tracepoint __tracepoint_irq_handler_entry'
  [A] 'tracepoint __tracepoint_sched_switch'
  [A] 'device_type i2c_client_type'
  [A] 'int overflowuid'
  [A] 'atomic_long_t vm_node_stat[38]'
  [A] 'atomic_long_t vm_zone_stat[12]'

47 Changed variables:

  [C] 'pglist_data contig_page_data' was changed at memblock.c:96:1:
    CRC (modversions) changed from 0xdeb74410 to 0x17ba9562
    type of variable changed:
      type size hasn't changed
      1 data member insertion:
        'deferred_split pglist_data::deferred_split_queue', at offset 54336 (in bits) at mmzone.h:828:1
      there are data member changes:
        2 ('lruvec pglist_data::__lruvec' .. 'unsigned long int pglist_data::flags') offsets changed (by +256 bits)
      2529 impacted interfaces

  [C] 'rq runqueues' was changed at core.c:51:1:
    CRC (modversions) changed from 0x7d8ddb7c to 0xa7379acd
    type of variable changed:
      type size hasn't changed
      1 data member insertion:
        'ktime_t rq::hrtick_time', at offset 25344 (in bits) at sched.h:1029:1
      there are data member changes:
        11 ('sched_info rq::rq_sched_info' .. 'u64 rq::android_vendor_data1[96]') offsets changed (by +64 bits)
      2529 impacted interfaces

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

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

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

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

'enum cpuhp_state at cpuhotplug.h:25:1' changed:
  type size hasn't changed
  1 enumerator insertion:
    'cpuhp_state::CPUHP_AP_DTPM_CPU_ONLINE' value '215'
  2 enumerator changes:
    'cpuhp_state::CPUHP_AP_ACTIVE' from value '215' to '216' at cpuhotplug.h:25:1
    'cpuhp_state::CPUHP_ONLINE' from value '216' to '217' at cpuhotplug.h:25:1
  5 impacted interfaces
'struct address_space at fs.h:451:1' changed:
  type size changed from 1344 to 1408 (in bits)
  1 data member insertion:
    'atomic_t address_space::nr_thps', at offset 256 (in bits) at fs.h:458:1
  there are data member changes:
    11 ('rb_root_cached address_space::i_mmap' .. 'void* address_space::private_data') offsets changed (by +64 bits)
  2529 impacted interfaces

'struct amba_driver at bus.h:76:1' changed:
  type size hasn't changed
  there are data member changes:
    type 'int (amba_device*)*' of 'amba_driver::remove' changed:
      pointer type changed from: 'int (amba_device*)*' to: 'void (amba_device*)*'
  2 impacted interfaces

'struct block_device at blk_types.h:22:1' changed:
  type size changed from 1472 to 1536 (in bits)
  1 data member insertion:
    'super_block* block_device::bd_fsfreeze_sb', at offset 1472 (in bits) at blk_types.h:49:1
  2529 impacted interfaces

'struct drm_crtc_helper_funcs at drm_modeset_helper_vtables.h:61:1' changed (indirectly):
  type size hasn't changed
  there are data member changes:
    type 'int (drm_crtc*, drm_framebuffer*, int, int, enum mode_set_atomic)*' of 'drm_crtc_helper_funcs::mode_set_base_atomic' changed:
      pointer type changed from: 'int (drm_crtc*, drm_framebuffer*, int, int, enum mode_set_atomic)*' to: 'int (drm_crtc*, drm_framebuffer*, int, int, enum mode_set_atomic)*'
  246 impacted interfaces

'struct em_perf_domain at energy_model.h:43:1' changed:
  type size hasn't changed
  1 data member insertion:
    'int em_perf_domain::milliwatts', at offset 96 (in bits) at energy_model.h:48:1
  2529 impacted interfaces

'struct inode at fs.h:610:1' changed (indirectly):
  type size changed from 4800 to 4864 (in bits)
  there are data member changes:
    type 'struct address_space' of 'inode::i_data' changed, as reported earlier
    'list_head inode::i_devices' offset changed (by +64 bits)
    while looking at anonymous data member 'union {pipe_inode_info* i_pipe; block_device* i_bdev; cdev* i_cdev; char* i_link; unsigned int i_dir_seq;}':
    the internal name of that anonymous data member changed from:
     __anonymous_union__51
    to:
     __anonymous_union__27
     This is usually due to an anonymous member type being added or removed from the containing type
    and offset changed from 4416 to 4480 (in bits) (by +64 bits)
    6 ('__u32 inode::i_generation' .. 'void* inode::i_private') offsets changed (by +64 bits)
  2529 impacted interfaces

'struct module at module.h:366:1' changed:
  type size hasn't changed
  1 data member insertion:
    'cfi_check_fn module::cfi_check', at offset 1920 (in bits) at module.h:389:1
  there are data member changes:
    15 ('mutex module::param_lock' .. 'int ()* module::init') offsets changed (by +64 bits)
  2529 impacted interfaces

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

'struct regulator_desc at driver.h:313:1' changed:
  type size changed from 2240 to 2304 (in bits)
  1 data member insertion:
    'bool regulator_desc::of_match_full_name', at offset 192 (in bits) at driver.h:319:1
  there are data member changes:
    52 ('const char* regulator_desc::regulators_node' .. 'unsigned int (unsigned int)* regulator_desc::of_map_mode') offsets changed (by +64 bits)
  32 impacted interfaces

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

'struct tty_ldisc_ops at tty_ldisc.h:175:1' changed:
  type size hasn't changed
  there are data member changes:
    type 'typedef ssize_t (tty_struct*, file*, unsigned char*, typedef size_t)*' of 'tty_ldisc_ops::read' changed:
      pointer type changed from: 'typedef ssize_t (tty_struct*, file*, unsigned char*, typedef size_t)*' to: 'typedef ssize_t (tty_struct*, file*, unsigned char*, typedef size_t, void**, unsigned long int)*'
  27 impacted interfaces

'struct ufs_hba_variant_ops at ufshcd.h:301:1' changed:
  type size changed from 1728 to 1408 (in bits)
  5 data member deletions:
    'int (ufs_hba*, ufshcd_lrb*, unsigned int)* ufs_hba_variant_ops::fill_prdt', at offset 1408 (in bits) at ufshcd.h:335:1
    'int (ufs_hba*, request*, ufshcd_lrb*)* ufs_hba_variant_ops::prepare_command', at offset 1472 (in bits) at ufshcd.h:337:1
    'int (ufs_hba*)* ufs_hba_variant_ops::update_sysfs', at offset 1536 (in bits) at ufshcd.h:339:1
    'void (ufs_hba*, ufshcd_lrb*)* ufs_hba_variant_ops::send_command', at offset 1600 (in bits) at ufshcd.h:340:1
    'void (ufs_hba*, ufshcd_lrb*)* ufs_hba_variant_ops::compl_command', at offset 1664 (in bits) at ufshcd.h:341:1
  15 impacted interfaces

'struct vm_area_struct at mm_types.h:306:1' changed (indirectly):
  type size changed from 1536 to 1600 (in bits)
  there are data member changes:
    'seqcount_t vm_area_struct::vm_sequence' offset changed (by +64 bits)
    type 'struct vm_userfaultfd_ctx' of 'vm_area_struct::vm_userfaultfd_ctx' changed:
      type size changed from 0 to 64 (in bits)
      1 data member insertion:
        'userfaultfd_ctx* vm_userfaultfd_ctx::ctx', at offset 0 (in bits) at mm_types.h:293:1
      2529 impacted interfaces
    'atomic_t vm_area_struct::vm_ref_count' offset changed (by +64 bits)
  2529 impacted interfaces

'struct vm_userfaultfd_ctx at mm_types.h:297:1' changed:
  details were reported earlier

'struct zone at mmzone.h:450:1' changed:
  type size hasn't changed
  1 data member insertion:
    'unsigned long int zone::cma_pages', at offset 960 (in bits) at mmzone.h:529:1
  there are data member changes:
    4 ('const char* zone::name' .. 'int zone::initialized') offsets changed (by +64 bits)
  2529 impacted interfaces

Bug: 182194803
Fixes: ba01e93b41 ("FROMLIST: kbuild: add support for Clang LTO")
Change-Id: If6011ad739ecccd23a92cfa2f9fd43084f9a0b4f
Signed-off-by: Giuliano Procida <gprocida@google.com>
2021-03-12 17:22:36 +00:00
Badhri Jagan Sridharan
02efd18b77 UPSTREAM: usb: typec: tcpci: Refactor tcpc_presenting_cc1_rd macro
Defining one macro instead of two for tcpc_presenting_*_rd.
This is a follow up of the comment left by Heikki Krogerus.

https://patchwork.kernel.org/project/linux-usb/patch/
20210304070931.1947316-1-badhri@google.com/

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Link: https://lore.kernel.org/r/20210310223536.3471243-1-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit aecb1e452d9e9de593b58330eb0279671be04436)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Iffee064c4aba766d9819673282ffe62835f1fb5d
2021-03-12 16:33:34 +00:00
Minchan Kim
8d03e49505 ANDROID: mm: build alloc_contig_dump_pages in page_alloc.o
GKI has CONFIG_DYNAMIC_DEBUG_CORE. Thus, to enable only the
specific alloc_contig_dump_pages without needing all pr_debug
in every source files is using -DCONFIG_DYNAMIC_MODULE
when the page_alloc.o compiled.

Bug: 182195592
Signed-off-by: Minchan Kim <minchan@google.com>
Change-Id: I93266eb4161b3653389c737d4c767fd5d1083339
2021-03-12 16:08:38 +00:00
Minchan Kim
28f6641041 FROMLIST: mm: page_alloc: dump migrate-failed pages
Currently, debugging CMA allocation failures is quite limited.
The most common source of these failures seems to be page
migration which doesn't provide any useful information on the
reason of the failure by itself. alloc_contig_range can report
those failures as it holds a list of migrate-failed pages.

The information logged by dump_page() has already proven helpful
for debugging allocation issues, like identifying long-term
pinnings on ZONE_MOVABLE or MIGRATE_CMA.

Let's use the dynamic debugging infrastructure, such that we
avoid flooding the logs and creating a lot of noise on frequent
alloc_contig_range() calls. This information is helpful for
debugging only.

There are two ifdefery conditions to support common dyndbg options:

- CONFIG_DYNAMIC_DEBUG_CORE && DYNAMIC_DEBUG_MODULE
It aims for supporting the feature with only specific file
with adding ccflags.

- CONFIG_DYNAMIC_DEBUG
It aims for supporting the feature with system wide globally.

A simple example to enable the feature:

Admin could enable the dump like this(by default, disabled)

	echo "func alloc_contig_dump_pages +p" > control

Admin could disable it.

	echo "func alloc_contig_dump_pages =_" > control

Detail goes Documentation/admin-guide/dynamic-debug-howto.rst

A concern is utility functions in dump_page use inconsistent
loglevels. In the future, we might want to make the loglevels
used inside dump_page() consistent and eventually rework the way
we log the information here. See [1].

[1] https://lore.kernel.org/linux-mm/YEh4doXvyuRl5BDB@google.com/

Bug: 182195592
Link: https://lore.kernel.org/linux-mm/20210311194042.825152-1-minchan@kernel.org/
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Minchan Kim <minchan@kernel.org>
Change-Id: I4db99a76a543d559a05515d6800c66ab48196978
2021-03-12 16:08:03 +00:00
Rick Yiu
cc1f93cb20 ANDROID: sched: Add vendor hook for uclamp_eff_get
Vendor may have their own behavior for determing uclamp value. Also
uclamp_eff_get() is used in uclamp_rq_inc_id() when task is enqueued,
and it is contained in uclamp_eff_value(), there is no much benefit to
hook uclamp_eff_value(), so remove the hook in uclamp_eff_value().

Bug: 170507972
Bug: 180859906
Signed-off-by: Rick Yiu <rickyiu@google.com>
Change-Id: Ibf7c043188a77c40baf5b4040b198a4197236089
2021-03-12 16:33:30 +08:00
Stephen Dickey
5e1e3e9387 ANDROID: cpu/hotplug: failure to offline 2nd to last cpu
cpu_down() checks for num_active_cpus() to ensure that at least one
cpu is left active. If there are two online CPUs, but one of these
is paused this check will fail indicating that only one active
CPU is available. This will prevent the online but inactive cpu
from being offlined.

Correct cpu_down() to ensure that if there is only one active CPU
and that is the CPU being requested, the offline is blocked, allowing
the second to last CPU that is inactive but online to be offlined.

Bug: 182362445
Change-Id: I5b26cb6c5fdba4f2e69e5201e25bfe987d30c405
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
2021-03-11 21:32:28 +00:00
Elliot Berman
2c728929c1 ANDROID: qcom: Add devm_blk_ksm_init to ABI
Add devm_blk_ksm_init to qcom symbol list for crypto engine.

Bug: 182453339
Change-Id: Ibb015293a66a31a8754aafe26b4fc680b7b977d7
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
2021-03-11 20:32:30 +00:00
Sangmoon Kim
9108e9ba66 ANDROID: arm64: add vendor hooks for unusal abort cases
Add hooks to gather data of unsual aborts and summarize it with
other information.

Bug: 177483057

Signed-off-by: Sangmoon Kim <sangmoon.kim@samsung.com>
Change-Id: I5f44b12770ae4976a6e3b098bd95a05dea347764
2021-03-11 19:59:21 +00:00
Colin Ian King
5f1e1f42a5 UPSTREAM: powercap/drivers/dtpm: Fix size of object being allocated
The kzalloc allocation for dtpm_cpu is currently allocating the size
of the pointer and not the size of the structure. Fix this by using
the correct sizeof argument.

Addresses-Coverity: ("Wrong sizeof argument")
Fixes: 0e8f68d7f048 ("powercap/drivers/dtpm: Add CPU energy model based support")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://www.spinics.net/lists/linux-kernel-janitors/msg56960.html
Bug: 182396925
Change-Id: Iac5e069ca027136d85089b8eab9ba6dfe10034b7
(cherry picked from commit 66e713fbbbc6c259559d4937a3b016d36ab529ff)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:17:37 +00:00
Dan Carpenter
fd2c659694 UPSTREAM: powercap/drivers/dtpm: Fix an IS_ERR() vs NULL check
The powercap_register_control_type() function never returns NULL, it
returns error pointers on error so update this check.

Fixes: a20d0ef97abf ("powercap/drivers/dtpm: Add API for dynamic thermal power management")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://www.spinics.net/lists/linux-kernel-janitors/msg56987.html
Bug: 182396925
Change-Id: Ica228174817bbaa5819778ef55f56e7177e51e94
(cherry picked from commit f8f706ad75abbc65fee365853e7b24731223fd6d)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:17:29 +00:00
Dan Carpenter
2a1cd71862 UPSTREAM: powercap/drivers/dtpm: Fix some missing unlock bugs
We need to unlock on these paths before returning.

Fixes: a20d0ef97abf ("powercap/drivers/dtpm: Add API for dynamic thermal power management")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://www.spinics.net/lists/linux-kernel-janitors/msg57004.html
Bug: 182396925
Change-Id: Idc13f42fc1c74e6b923edeabeacd9a782ef77e11
(cherry picked from commit 0fe1329b7b518f67c8f1760711eb0eaf90433fd3)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:17:22 +00:00
Dan Carpenter
7112d4320f UPSTREAM: powercap/drivers/dtpm: Fix a double shift bug
The DTPM_POWER_LIMIT_FLAG is used for test_bit() etc which take a bit
number so it should be bit 0.  But currently it's set to BIT(0) then
that is double shifted equivalent to BIT(BIT(0)).  This doesn't cause a
run time problem because it's done consistently.

Fixes: a20d0ef97abf ("powercap/drivers/dtpm: Add API for dynamic thermal power management")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://www.spinics.net/lists/linux-kernel-janitors/msg57003.html
Bug: 182396925
Change-Id: I4245d8d0de695fa4c07916113df2097ec8ab8bcf
(cherry picked from commit 2185c23071e2c1f26fbccb323aa831732540cfcc)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:17:14 +00:00
Daniel Lezcano
578572c48c UPSTREAM: powercap/drivers/dtpm: Fix __udivdi3 and __aeabi_uldivmod unresolved symbols
32-bit architectures do not support u64 divisions, so the macro
DIV_ROUND_CLOSEST is not adequate as the compiler will replace the
call to an unexisting function for the platform, leading to
unresolved references to symbols.

Fix this by using the compatible macros:

DIV64_U64_ROUND_CLOSEST and DIV_ROUND_CLOSEST_ULL.

Fixes: a20d0ef97abf ("powercap/drivers/dtpm: Add API for dynamic thermal power management")
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://lkml.org/lkml/2020/12/30/304
Bug: 182396925
Change-Id: I1a67791b071acb2fe6ed0d348f4462985ebabdc3
(cherry picked from commit 8f50db4b5c79af2ba54f5fbe8a5173fd7f37a493)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:16:48 +00:00
Daniel Lezcano
7f17016dc8 UPSTREAM: powercap/drivers/dtpm: Add CPU energy model based support
With the powercap dtpm controller, we are able to plug devices with
power limitation features in the tree.

The following patch introduces the CPU power limitation based on the
energy model and the performance states.

The power limitation is done at the performance domain level. If some
CPUs are unplugged, the corresponding power will be subtracted from
the performance domain total power.

It is up to the platform to initialize the dtpm tree and add the CPU.

Here is an example to create a simple tree with one root node called
"pkg" and the CPU's performance domains.

static int dtpm_register_pkg(struct dtpm_descr *descr)
{
	struct dtpm *pkg;
	int ret;

	pkg = dtpm_alloc(NULL);
	if (!pkg)
		return -ENOMEM;

	ret = dtpm_register(descr->name, pkg, descr->parent);
	if (ret)
		return ret;

	return dtpm_register_cpu(pkg);
}

static struct dtpm_descr descr = {
	.name = "pkg",
	.init = dtpm_register_pkg,
};
DTPM_DECLARE(descr);

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Tested-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://lkml.org/lkml/2020/12/8/736
Bug: 182396925
Change-Id: I01f949c0cb685806de1194fef3ad8a740301046d
(cherry picked from commit 0e8f68d7f04856a9e2ad4817b477fa35124888bd)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:16:38 +00:00
Daniel Lezcano
082e8dcea9 UPSTREAM: powercap/drivers/dtpm: Add API for dynamic thermal power management
On the embedded world, the complexity of the SoC leads to an
increasing number of hotspots which need to be monitored and mitigated
as a whole in order to prevent the temperature to go above the
normative and legally stated 'skin temperature'.

Another aspect is to sustain the performance for a given power budget,
for example virtual reality where the user can feel dizziness if the
GPU performance is capped while a big CPU is processing something
else. Or reduce the battery charging because the dissipated power is
too high compared with the power consumed by other devices.

The userspace is the most adequate place to dynamically act on the
different devices by limiting their power given an application
profile: it has the knowledge of the platform.

These userspace daemons are in charge of the Dynamic Thermal Power
Management (DTPM).

Nowadays, the dtpm daemons are abusing the thermal framework as they
act on the cooling device state to force a specific and arbitrary
state without taking care of the governor decisions. Given the closed
loop of some governors that can confuse the logic or directly enter in
a decision conflict.

As the number of cooling device support is limited today to the CPU
and the GPU, the dtpm daemons have little control on the power
dissipation of the system. The out of tree solutions are hacking
around here and there in the drivers, in the frameworks to have
control on the devices. The common solution is to declare them as
cooling devices.

There is no unification of the power limitation unit, opaque states
are used.

This patch provides a way to create a hierarchy of constraints using
the powercap framework. The devices which are registered as power
limit-able devices are represented in this hierarchy as a tree. They
are linked together with intermediate nodes which are just there to
propagate the constraint to the children.

The leaves of the tree are the real devices, the intermediate nodes
are virtual, aggregating the children constraints and power
characteristics.

Each node have a weight on a 2^10 basis, in order to reflect the
percentage of power distribution of the children's node. This
percentage is used to dispatch the power limit to the children.

The weight is computed against the max power of the siblings.

This simple approach allows to do a fair distribution of the power
limit.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Tested-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://lkml.org/lkml/2020/12/8/736
Bug: 182396925
Change-Id: I1786b8f4de45e8f0abbdb9bac99da80245a4d7f7
(cherry picked from commit a20d0ef97abf486a917aff066c457bdb930425af)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:05:21 +00:00
Daniel Lezcano
b2267c21c0 UPSTREAM: units: Add Watt units
As there are the temperature units, let's add the Watt macros definition.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://lkml.org/lkml/2020/12/8/736
Bug: 182396925
Change-Id: Iabcd01a02f52c55ba018aca59104807778f1d866
(cherry picked from commit 2ee5f8f05949735fa2f4c463a5e13fcb3660c719)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:02:50 +00:00
Daniel Lezcano
7847beabbe UPSTREAM: Documentation/powercap/dtpm: Add documentation for dtpm
The dynamic thermal and power management is a technique to dynamically
adjust the power consumption of different devices in order to ensure a
global thermal constraint.

An userspace daemon is usually monitoring the temperature and the
power to take immediate action on the device.

The DTPM framework provides an unified API to userspace to act on the
power.

Document this framework.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Link: https://lkml.org/lkml/2020/12/8/736
Bug: 182396925
Change-Id: I72d7326f3f1f97bb367fd0b6efd6af6776e512b3
(cherry picked from commit f5ad1c747956d501516610ee7900f4a6d57ee2f5)
Signed-off-by: Ram Chandrasekar <quic_rkumbako@quicinc.com>
2021-03-11 16:02:39 +00:00
Mathias Nyman
39d4d9a6e8 UPSTREAM: xhci: Fix repeated xhci wake after suspend due to uncleared internal wake state
If port terminations are detected in suspend, but link never reaches U0
then xHCI may have an internal uncleared wake state that will cause an
immediate wake after suspend.

This wake state is normally cleared when driver clears the PORT_CSC bit,
which is set after a device is enabled and in U0.

Write 1 to clear PORT_CSC for ports that don't have anything connected
when suspending. This makes sure any pending internal wake states in
xHCI are cleared.

Cc: stable@vger.kernel.org
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20210311115353.2137560-5-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit d26c00e7276fc92b18c253d69e872f6b03832bad)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I26c39851c5c3c646c4d8ea84d2e608e2ddfebb9d
2021-03-11 15:47:31 +01:00
Forest Crossman
a6d2369a63 UPSTREAM: usb: xhci: Fix ASMedia ASM1042A and ASM3242 DMA addressing
I've confirmed that both the ASMedia ASM1042A and ASM3242 have the same
problem as the ASM1142 and ASM2142/ASM3142, where they lose some of the
upper bits of 64-bit DMA addresses. As with the other chips, this can
cause problems on systems where the upper bits matter, and adding the
XHCI_NO_64BIT_SUPPORT quirk completely fixes the issue.

Cc: stable@vger.kernel.org
Signed-off-by: Forest Crossman <cyrozap@gmail.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20210311115353.2137560-4-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit b71c669ad8390dd1c866298319ff89fe68b45653)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I5d8ed7834b15a4415a1dfeb778f616e235172046
2021-03-11 15:47:31 +01:00
Mathias Nyman
a4ed825aee UPSTREAM: xhci: Improve detection of device initiated wake signal.
A xHC USB 3 port might miss the first wake signal from a USB 3 device
if the port LFPS reveiver isn't enabled fast enough after xHC resume.

xHC host will anyway be resumed by a PME# signal, but will go back to
suspend if no port activity is seen.
The device resends the U3 LFPS wake signal after a 100ms delay, but
by then host is already suspended, starting all over from the
beginning of this issue.

USB 3 specs say U3 wake LFPS signal is sent for max 10ms, then device
needs to delay 100ms before resending the wake.

Don't suspend immediately if port activity isn't detected in resume.
Instead add a retry. If there is no port activity then delay for 120ms,
and re-check for port activity.

Cc: <stable@vger.kernel.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20210311115353.2137560-3-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 253f588c70f66184b1f3a9bbb428b49bbda73e80)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I30e4e5f6859e4e4605a32c03a1090ccb5222ae0e
2021-03-11 15:47:31 +01:00
Stanislaw Gruszka
5cff5fab36 UPSTREAM: usb: xhci: do not perform Soft Retry for some xHCI hosts
On some systems rt2800usb and mt7601u devices are unable to operate since
commit f8f80be501 ("xhci: Use soft retry to recover faster from
transaction errors")

Seems that some xHCI controllers can not perform Soft Retry correctly,
affecting those devices.

To avoid the problem add xhci->quirks flag that restore pre soft retry
xhci behaviour for affected xHCI controllers. Currently those are
AMD_PROMONTORYA_4 and AMD_PROMONTORYA_2, since it was confirmed
by the users: on those xHCI hosts issue happen and is gone after
disabling Soft Retry.

[minor commit message rewording for checkpatch -Mathias]

Fixes: f8f80be501 ("xhci: Use soft retry to recover faster from transaction errors")
Cc: <stable@vger.kernel.org> # 4.20+
Reported-by: Bernhard <bernhard.gebetsberger@gmx.at>
Tested-by: Bernhard <bernhard.gebetsberger@gmx.at>
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=202541
Link: https://lore.kernel.org/r/20210311115353.2137560-2-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit a4a251f8c23518899d2078c320cf9ce2fa459c9f)
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: Ie909d0e08b51795ad3db0975881157a04aafc8a7
2021-03-11 15:47:31 +01:00
Sangmoon Kim
f23fe39801 FROMGIT: rcu/tree: Add a trace event for RCU CPU stall warnings
This commit adds a trace event which allows tracing the beginnings of RCU
CPU stall warnings on systems where sysctl_panic_on_rcu_stall is disabled.

The first parameter is the name of RCU flavor like other trace events.
The second parameter indicates whether this is a stall of an expedited
grace period, a self-detected stall of a normal grace period, or a stall
of a normal grace period detected by some CPU other than the one that
is stalled.

RCU CPU stall warnings are often caused by external-to-RCU issues,
for example, in interrupt handling or task scheduling.  Therefore,
this event uses TRACE_EVENT, not TRACE_EVENT_RCU, to avoid requiring
those interested in tracing RCU CPU stalls to rebuild their kernels
with CONFIG_RCU_TRACE=y.

Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Reviewed-by: Neeraj Upadhyay <neeraju@codeaurora.org>
Signed-off-by: Sangmoon Kim <sangmoon.kim@samsung.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
(cherry picked from commit 71580d6503f747f1b06ef8dbb7cdbbe20400a2ec
 git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev)
Bug: 177483057
Change-Id: Ie2f0340725a2fb582d026ecfaf5e1d35cc90fece
Signed-off-by: Sangmoon Kim <sangmoon.kim@samsung.com>
2021-03-11 21:06:44 +09:00
Alistair Delva
7ca48748e5 ANDROID: GKI: Update virtual_device symbol list
For fvp and bt vhci.

Bug: 174674728
Change-Id: I083c1c54b7884913f8873aa2b0b0324c0a49f631
Signed-off-by: Alistair Delva <adelva@google.com>
2021-03-11 12:10:57 +00:00
Jack Pham
6c997d153d ANDROID: usb: host: export additional xhci symbols for ring management
Export the following xhci symbols which will allow vendor modules
to perform their own ring management. These will be used to create
and manage additional secondary rings that are used to offload to a
separate coprocessor which interacts with the xHC controller.

xhci_ring_alloc
    - Allocate a struct xhci_ring.

xhci_alloc_erst
xhci_free_erst
    - Allocate and free event ring segment tables.

xhci_trb_virt_to_dma
    - Used to retrieve the DMA address of a TRB

xhci_ring_cmd_db
    - Notify the controller when a new command is issued

xhci_alloc_command
xhci_free_command
    - Allocate and free a struct xhci_command

xhci_queue_stop_endpoint
    - Issue a stop endpoint command to the controller

Bug: 182336717
Change-Id: I9d4c5884108e656e890aca8137d4ef580bcd7a12
Signed-off-by: Jack Pham <jackp@codeaurora.org>
2021-03-11 07:48:30 +00:00