Commit Graph

11228 Commits

Author SHA1 Message Date
Dongjin Kim
39e8c749c5 ODROID-COMMON: mm: quick fix if 'CONFIG_AMLOGIC_PAGE_TRACE' is not enabled
Change-Id: Id63e7c4cd0decfacc3708bd8887758d16df132ea
Signed-off-by: Dongjin Kim <tobetter@gmail.com>
2019-03-07 12:44:57 +09:00
Mauro (mdrjr) Ribeiro
a79c7062da Merge tag 'v4.9.162' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.162 stable release

Change-Id: I8042a515f639d3857bb6aae03284aabaede1f7b9
2019-03-06 10:45:14 -03:00
Mauro (mdrjr) Ribeiro
2ab9e6444f Merge tag 'v4.9.161' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.161 stable release
2019-03-06 10:45:05 -03:00
Jann Horn
331fc4df77 mm: enforce min addr even if capable() in expand_downwards()
commit 0a1d52994d upstream.

security_mmap_addr() does a capability check with current_cred(), but
we can reach this code from contexts like a VFS write handler where
current_cred() must not be used.

This can be abused on systems without SMAP to make NULL pointer
dereferences exploitable again.

Fixes: 8869477a49 ("security: protect from stack expansion into low vm addresses")
Cc: stable@kernel.org
Signed-off-by: Jann Horn <jannh@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-03-05 17:57:07 +01:00
Nick Desaulniers
5ac69185d4 mm/zsmalloc.c: fix -Wunneeded-internal-declaration warning
commit 3457f41476 upstream.

is_first_page() is only called from the macro VM_BUG_ON_PAGE() which is
only compiled in as a runtime check when CONFIG_DEBUG_VM is set,
otherwise is checked at compile time and not actually compiled in.

Fixes the following warning, found with Clang:

  mm/zsmalloc.c:472:12: warning: function 'is_first_page' is not needed and will not be emitted [-Wunneeded-internal-declaration]
  static int is_first_page(struct page *page)
           ^

Link: http://lkml.kernel.org/r/20170524053859.29059-1-nick.desaulniers@gmail.com
Signed-off-by: Nick Desaulniers <nick.desaulniers@gmail.com>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-27 10:07:03 +01:00
Matthias Kaehlcke
d069e8ca02 mm/zsmalloc.c: change stat type parameter to int
commit 3eb95feac1 upstream.

zs_stat_inc/dec/get() uses enum zs_stat_type for the stat type, however
some callers pass an enum fullness_group value.  Change the type to int to
reflect the actual use of the functions and get rid of 'enum-conversion'
warnings

Link: http://lkml.kernel.org/r/20170731175000.56538-1-mka@chromium.org
Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Cc: Doug Anderson <dianders@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-27 10:07:02 +01:00
Ralph Campbell
17ef08517a numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
commit 050c17f239 upstream.

The system call, get_mempolicy() [1], passes an unsigned long *nodemask
pointer and an unsigned long maxnode argument which specifies the length
of the user's nodemask array in bits (which is rounded up).  The manual
page says that if the maxnode value is too small, get_mempolicy will
return EINVAL but there is no system call to return this minimum value.
To determine this value, some programs search /proc/<pid>/status for a
line starting with "Mems_allowed:" and use the number of digits in the
mask to determine the minimum value.  A recent change to the way this line
is formatted [2] causes these programs to compute a value less than
MAX_NUMNODES so get_mempolicy() returns EINVAL.

Change get_mempolicy(), the older compat version of get_mempolicy(), and
the copy_nodes_to_user() function to use nr_node_ids instead of
MAX_NUMNODES, thus preserving the defacto method of computing the minimum
size for the nodemask array and the maxnode argument.

[1] http://man7.org/linux/man-pages/man2/get_mempolicy.2.html
[2] https://lore.kernel.org/lkml/1545405631-6808-1-git-send-email-longman@redhat.com

Link: http://lkml.kernel.org/r/20190211180245.22295-1-rcampbell@nvidia.com
Fixes: 4fb8e5b89bcbbbb ("include/linux/nodemask.h: use nr_node_ids (not MAX_NUMNODES) in __nodemask_pr_numnodes()")
Signed-off-by: Ralph Campbell <rcampbell@nvidia.com>
Suggested-by: Alexander Duyck <alexander.duyck@gmail.com>
Cc: Waiman Long <longman@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-27 10:06:58 +01:00
Tao Zeng
cfe5efa496 mm: fix too many wrong kasan report [1/1]
PD#SWPL-3583

Problem:
After merge change:
http://scgit.amlogic.com:8080/#/c/55018/
Too many wrong kasan report occur when booting kernel

Solution:
Fix kasan poison address range when free wasted memory.

Verify:
P212

Change-Id: I576a7edb7b4e70f9c6c782639f433ad45bafba1d
Signed-off-by: Tao Zeng <tao.zeng@amlogic.com>
2019-02-26 18:16:48 +09:00
tao zeng
6ccdb9f0f1 mm: save wasted memory by slab [1/1]
PD#SWPL-1767

Problem:
When driver/kernel call kmalloc with large size, memory may waste
if size is not equal to 2^n. For example, driver call kmalloc with
size 129KB, kmalloc will allocate a 256KB memory block to caller.
Then 127kb memory will be wasted if this caller don't free it.

Solution:
Free tail of slab memory if size is not match to 2^n. This change
can save about 900KB memory after boot, and more than 100KB during
run time.

Verify:
P212

Change-Id: Iba378792ec30003358b64384361c0f0c4c2800d8
Signed-off-by: tao zeng <tao.zeng@amlogic.com>
2019-02-26 18:16:48 +09:00
Tao Zeng
85a1cc4b4c mm: subtract CMA isolated pages when allocate TVP [1/1]
PD#SWPL-2933

Problem:
When allocate CMA pages in buildroot enverioment, system will
hung in congestion_wait:
Call trace:
[<ffffff8009086a78>] __switch_to+0xa0/0xc8
[<ffffff8009de3eb8>] __schedule+0x268/0x7d8
[<ffffff8009de4464>] schedule+0x3c/0xa0
[<ffffff8009de7c9c>] schedule_timeout+0x1b4/0x448
[<ffffff8009de3be8>] io_schedule_timeout+0x98/0x100
[<ffffff80091e3fb8>] congestion_wait+0x90/0x190
[<ffffff80091ebcf4>] isolate_migratepages_block+0x7ec/0x890
[<ffffff80091ec794>] isolate_migratepages_range+0x8c/0x100
[<ffffff8009a8f34c>] aml_alloc_contig_migrate_range+0x104/0x158
[<ffffff8009a8f518>] cma_boost_work_func+0x178/0x270
[<ffffff80090cc228>] kthread+0xf8/0x110
[<ffffff80090836c0>] ret_from_fork+0x10/0x50

Solution:
subtract isolated CMA pages when allocation large CMA for TVP.

Verify:
local

Change-Id: I96153cf104abb009a8965c2230a5242e495dd031
Signed-off-by: Tao Zeng <tao.zeng@amlogic.com>
2019-02-26 18:13:09 +09:00
tao zeng
76789cadf7 mm: optimize thread stack usage on arm64 [1/1]
PD#SWPL-1219

Problem:
On arm64, thread stack is 16KB for each task. If running task number
is large, this type of memory may over 40MB. It's a large amount on
small memory platform. But most case thread only use less 4KB stack.
It's waste of memory and we need optimize it.

Solution:
1. Pre-allocate a vmalloc address space for task stack;
2. Only map 1st page for stack and handle page fault in EL1
   when stack growth triggered exception;
3. handle stack switch for exception.

Verify:
p212

Change-Id: I47f511ccfa2868d982bc10a820ed6435b6d52ba9
Signed-off-by: tao zeng <tao.zeng@amlogic.com>
2019-02-26 18:13:09 +09:00
Mauro (mdrjr) Ribeiro
b8fc2fa121 Merge tag 'v4.9.159' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.159 stable release
2019-02-25 05:49:30 -03:00
Hugh Dickins
eede34e949 mm: stop leaking PageTables
commit b0b9b3df27 upstream.

4.10-rc loadtest (even on x86, and even without THPCache) fails with
"fork: Cannot allocate memory" or some such; and /proc/meminfo shows
PageTables growing.

Commit 953c66c2b2 ("mm: THP page cache support for ppc64") that got
merged in rc1 removed the freeing of an unused preallocated pagetable
after do_fault_around() has called map_pages().

This is usually a good optimization, so that the followup doesn't have
to reallocate one; but it's not sufficient to shift the freeing into
alloc_set_pte(), since there are failure cases (most commonly
VM_FAULT_RETRY) which never reach finish_fault().

Check and free it at the outer level in do_fault(), then we don't need
to worry in alloc_set_pte(), and can restore that to how it was (I
cannot find any reason to pte_free() under lock as it was doing).

And fix a separate pagetable leak, or crash, introduced by the same
change, that could only show up on some ppc64: why does do_set_pmd()'s
failure case attempt to withdraw a pagetable when it never deposited
one, at the same time overwriting (so leaking) the vmf->prealloc_pte?
Residue of an earlier implementation, perhaps? Delete it.

Fixes: 953c66c2b2 ("mm: THP page cache support for ppc64")
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michael Neuling <mikey@neuling.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-20 10:18:34 +01:00
Mauro (mdrjr) Ribeiro
3b7e1f914d Merge tag 'v4.9.156' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.156 stable release
2019-02-13 20:10:32 -02:00
Mauro (mdrjr) Ribeiro
a4c58a195e Merge tag 'v4.9.155' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.155 stable release
2019-02-13 20:10:25 -02:00
Mauro (mdrjr) Ribeiro
33464973cc Merge tag 'v4.9.153' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.153 stable release
2019-02-13 20:10:13 -02:00
Mauro (mdrjr) Ribeiro
d6a65d5b04 Merge tag 'v4.9.152' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.152 stable release
2019-02-13 20:10:04 -02:00
Mauro (mdrjr) Ribeiro
0407aed495 Merge tag 'v4.9.151' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.151 stable release
2019-02-13 20:06:26 -02:00
Mauro (mdrjr) Ribeiro
16fbab977e Merge tag 'v4.9.150' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.150 stable release
2019-02-13 20:06:19 -02:00
Mauro (mdrjr) Ribeiro
a6422fb9fc Merge tag 'v4.9.145' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.145 stable release
2019-02-13 20:02:43 -02:00
Mauro (mdrjr) Ribeiro
836ef42e01 Merge tag 'v4.9.144' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.144 stable release
2019-02-13 20:02:29 -02:00
Mauro (mdrjr) Ribeiro
b598b5aeab Merge tag 'v4.9.143' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.143 stable release
2019-02-13 08:43:33 -02:00
Mauro (mdrjr) Ribeiro
663a04717d Merge tag 'v4.9.142' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.142 stable release
2019-02-13 08:40:45 -02:00
Tetsuo Handa
7f3829912e oom, oom_reaper: do not enqueue same task twice
commit 9bcdeb51bd upstream.

Arkadiusz reported that enabling memcg's group oom killing causes
strange memcg statistics where there is no task in a memcg despite the
number of tasks in that memcg is not 0.  It turned out that there is a
bug in wake_oom_reaper() which allows enqueuing same task twice which
makes impossible to decrease the number of tasks in that memcg due to a
refcount leak.

This bug existed since the OOM reaper became invokable from
task_will_free_mem(current) path in out_of_memory() in Linux 4.7,

  T1@P1     |T2@P1     |T3@P1     |OOM reaper
  ----------+----------+----------+------------
                                   # Processing an OOM victim in a different memcg domain.
                        try_charge()
                          mem_cgroup_out_of_memory()
                            mutex_lock(&oom_lock)
             try_charge()
               mem_cgroup_out_of_memory()
                 mutex_lock(&oom_lock)
  try_charge()
    mem_cgroup_out_of_memory()
      mutex_lock(&oom_lock)
                            out_of_memory()
                              oom_kill_process(P1)
                                do_send_sig_info(SIGKILL, @P1)
                                mark_oom_victim(T1@P1)
                                wake_oom_reaper(T1@P1) # T1@P1 is enqueued.
                            mutex_unlock(&oom_lock)
                 out_of_memory()
                   mark_oom_victim(T2@P1)
                   wake_oom_reaper(T2@P1) # T2@P1 is enqueued.
                 mutex_unlock(&oom_lock)
      out_of_memory()
        mark_oom_victim(T1@P1)
        wake_oom_reaper(T1@P1) # T1@P1 is enqueued again due to oom_reaper_list == T2@P1 && T1@P1->oom_reaper_list == NULL.
      mutex_unlock(&oom_lock)
                                   # Completed processing an OOM victim in a different memcg domain.
                                   spin_lock(&oom_reaper_lock)
                                   # T1P1 is dequeued.
                                   spin_unlock(&oom_reaper_lock)

but memcg's group oom killing made it easier to trigger this bug by
calling wake_oom_reaper() on the same task from one out_of_memory()
request.

Fix this bug using an approach used by commit 855b018325 ("oom,
oom_reaper: disable oom_reaper for oom_kill_allocating_task").  As a
side effect of this patch, this patch also avoids enqueuing multiple
threads sharing memory via task_will_free_mem(current) path.

Link: http://lkml.kernel.org/r/e865a044-2c10-9858-f4ef-254bc71d6cc2@i-love.sakura.ne.jp
Link: http://lkml.kernel.org/r/5ee34fc6-1485-34f8-8790-903ddabaa809@i-love.sakura.ne.jp
Fixes: af8e15cc85 ("oom, oom_reaper: do not enqueue task if it is on the oom_reaper_list head")
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reported-by: Arkadiusz Miskiewicz <arekm@maven.pl>
Tested-by: Arkadiusz Miskiewicz <arekm@maven.pl>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Roman Gushchin <guro@fb.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Aleksa Sarai <asarai@suse.de>
Cc: Jay Kamat <jgkamat@fb.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-12 19:45:02 +01:00
David Hildenbrand
d2de58eb6e mm: migrate: don't rely on __PageMovable() of newpage after unlocking it
commit e0a352fabc upstream.

We had a race in the old balloon compaction code before b1123ea6d3
("mm: balloon: use general non-lru movable page feature") refactored it
that became visible after backporting 195a8c43e9 ("virtio-balloon:
deflate via a page list") without the refactoring.

The bug existed from commit d6d86c0a7f ("mm/balloon_compaction:
redesign ballooned pages management") till b1123ea6d3 ("mm: balloon:
use general non-lru movable page feature").  d6d86c0a7f
("mm/balloon_compaction: redesign ballooned pages management") was
backported to 3.12, so the broken kernels are stable kernels [3.12 -
4.7].

There was a subtle race between dropping the page lock of the newpage in
__unmap_and_move() and checking for __is_movable_balloon_page(newpage).

Just after dropping this page lock, virtio-balloon could go ahead and
deflate the newpage, effectively dequeueing it and clearing PageBalloon,
in turn making __is_movable_balloon_page(newpage) fail.

This resulted in dropping the reference of the newpage via
putback_lru_page(newpage) instead of put_page(newpage), leading to
page->lru getting modified and a !LRU page ending up in the LRU lists.
With 195a8c43e9 ("virtio-balloon: deflate via a page list")
backported, one would suddenly get corrupted lists in
release_pages_balloon():

- WARNING: CPU: 13 PID: 6586 at lib/list_debug.c:59 __list_del_entry+0xa1/0xd0
- list_del corruption. prev->next should be ffffe253961090a0, but was dead000000000100

Nowadays this race is no longer possible, but it is hidden behind very
ugly handling of __ClearPageMovable() and __PageMovable().

__ClearPageMovable() will not make __PageMovable() fail, only
PageMovable().  So the new check (__PageMovable(newpage)) will still
hold even after newpage was dequeued by virtio-balloon.

If anybody would ever change that special handling, the BUG would be
introduced again.  So instead, make it explicit and use the information
of the original isolated page before migration.

This patch can be backported fairly easy to stable kernels (in contrast
to the refactoring).

Link: http://lkml.kernel.org/r/20190129233217.10747-1-david@redhat.com
Fixes: d6d86c0a7f ("mm/balloon_compaction: redesign ballooned pages management")
Signed-off-by: David Hildenbrand <david@redhat.com>
Reported-by: Vratislav Bendel <vbendel@redhat.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Rafael Aquini <aquini@redhat.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Vratislav Bendel <vbendel@redhat.com>
Cc: Rafael Aquini <aquini@redhat.com>
Cc: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: <stable@vger.kernel.org>	[3.12 - 4.7]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-06 17:33:29 +01:00
Naoya Horiguchi
5a3c49bb61 mm: hwpoison: use do_send_sig_info() instead of force_sig()
commit 6376360ecb upstream.

Currently memory_failure() is racy against process's exiting, which
results in kernel crash by null pointer dereference.

The root cause is that memory_failure() uses force_sig() to forcibly
kill asynchronous (meaning not in the current context) processes.  As
discussed in thread https://lkml.org/lkml/2010/6/8/236 years ago for OOM
fixes, this is not a right thing to do.  OOM solves this issue by using
do_send_sig_info() as done in commit d2d393099d ("signal:
oom_kill_task: use SEND_SIG_FORCED instead of force_sig()"), so this
patch is suggesting to do the same for hwpoison.  do_send_sig_info()
properly accesses to siglock with lock_task_sighand(), so is free from
the reported race.

I confirmed that the reported bug reproduces with inserting some delay
in kill_procs(), and it never reproduces with this patch.

Note that memory_failure() can send another type of signal using
force_sig_mceerr(), and the reported race shouldn't happen on it because
force_sig_mceerr() is called only for synchronous processes (i.e.
BUS_MCEERR_AR happens only when some process accesses to the corrupted
memory.)

Link: http://lkml.kernel.org/r/20190116093046.GA29835@hori1.linux.bs1.fc.nec.co.jp
Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Reported-by: Jane Chu <jane.chu@oracle.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-06 17:33:29 +01:00
Shakeel Butt
274be582b7 mm, oom: fix use-after-free in oom_kill_process
commit cefc7ef3c8 upstream.

Syzbot instance running on upstream kernel found a use-after-free bug in
oom_kill_process.  On further inspection it seems like the process
selected to be oom-killed has exited even before reaching
read_lock(&tasklist_lock) in oom_kill_process().  More specifically the
tsk->usage is 1 which is due to get_task_struct() in oom_evaluate_task()
and the put_task_struct within for_each_thread() frees the tsk and
for_each_thread() tries to access the tsk.  The easiest fix is to do
get/put across the for_each_thread() on the selected task.

Now the next question is should we continue with the oom-kill as the
previously selected task has exited? However before adding more
complexity and heuristics, let's answer why we even look at the children
of oom-kill selected task? The select_bad_process() has already selected
the worst process in the system/memcg.  Due to race, the selected
process might not be the worst at the kill time but does that matter?
The userspace can use the oom_score_adj interface to prefer children to
be killed before the parent.  I looked at the history but it seems like
this is there before git history.

Link: http://lkml.kernel.org/r/20190121215850.221745-1-shakeelb@google.com
Reported-by: syzbot+7fbbfa368521945f0e3d@syzkaller.appspotmail.com
Fixes: 6b0c81b3be ("mm, oom: reduce dependency on tasklist_lock")
Signed-off-by: Shakeel Butt <shakeelb@google.com>
Reviewed-by: Roman Gushchin <guro@fb.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-06 17:33:29 +01:00
Brian Foster
c6e4be626e mm/page-writeback.c: don't break integrity writeback on ->writepage() error
[ Upstream commit 3fa750dcf2 ]

write_cache_pages() is used in both background and integrity writeback
scenarios by various filesystems.  Background writeback is mostly
concerned with cleaning a certain number of dirty pages based on various
mm heuristics.  It may not write the full set of dirty pages or wait for
I/O to complete.  Integrity writeback is responsible for persisting a set
of dirty pages before the writeback job completes.  For example, an
fsync() call must perform integrity writeback to ensure data is on disk
before the call returns.

write_cache_pages() unconditionally breaks out of its processing loop in
the event of a ->writepage() error.  This is fine for background
writeback, which had no strict requirements and will eventually come
around again.  This can cause problems for integrity writeback on
filesystems that might need to clean up state associated with failed page
writeouts.  For example, XFS performs internal delayed allocation
accounting before returning a ->writepage() error, where applicable.  If
the current writeback happens to be associated with an unmount and
write_cache_pages() completes the writeback prematurely due to error, the
filesystem is unmounted in an inconsistent state if dirty+delalloc pages
still exist.

To handle this problem, update write_cache_pages() to always process the
full set of pages for integrity writeback regardless of ->writepage()
errors.  Save the first encountered error and return it to the caller once
complete.  This facilitates XFS (or any other fs that expects integrity
writeback to process the entire set of dirty pages) to clean up its
internal state completely in the event of persistent mapping errors.
Background writeback continues to exit on the first error encountered.

[akpm@linux-foundation.org: fix typo in comment]
Link: http://lkml.kernel.org/r/20181116134304.32440-1-bfoster@redhat.com
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-01-26 09:38:35 +01:00
Michal Hocko
5cf3e5ff95 mm, memcg: fix reclaim deadlock with writeback
commit 63f3655f95 upstream.

Liu Bo has experienced a deadlock between memcg (legacy) reclaim and the
ext4 writeback

  task1:
    wait_on_page_bit+0x82/0xa0
    shrink_page_list+0x907/0x960
    shrink_inactive_list+0x2c7/0x680
    shrink_node_memcg+0x404/0x830
    shrink_node+0xd8/0x300
    do_try_to_free_pages+0x10d/0x330
    try_to_free_mem_cgroup_pages+0xd5/0x1b0
    try_charge+0x14d/0x720
    memcg_kmem_charge_memcg+0x3c/0xa0
    memcg_kmem_charge+0x7e/0xd0
    __alloc_pages_nodemask+0x178/0x260
    alloc_pages_current+0x95/0x140
    pte_alloc_one+0x17/0x40
    __pte_alloc+0x1e/0x110
    alloc_set_pte+0x5fe/0xc20
    do_fault+0x103/0x970
    handle_mm_fault+0x61e/0xd10
    __do_page_fault+0x252/0x4d0
    do_page_fault+0x30/0x80
    page_fault+0x28/0x30

  task2:
    __lock_page+0x86/0xa0
    mpage_prepare_extent_to_map+0x2e7/0x310 [ext4]
    ext4_writepages+0x479/0xd60
    do_writepages+0x1e/0x30
    __writeback_single_inode+0x45/0x320
    writeback_sb_inodes+0x272/0x600
    __writeback_inodes_wb+0x92/0xc0
    wb_writeback+0x268/0x300
    wb_workfn+0xb4/0x390
    process_one_work+0x189/0x420
    worker_thread+0x4e/0x4b0
    kthread+0xe6/0x100
    ret_from_fork+0x41/0x50

He adds
 "task1 is waiting for the PageWriteback bit of the page that task2 has
  collected in mpd->io_submit->io_bio, and tasks2 is waiting for the
  LOCKED bit the page which tasks1 has locked"

More precisely task1 is handling a page fault and it has a page locked
while it charges a new page table to a memcg.  That in turn hits a
memory limit reclaim and the memcg reclaim for legacy controller is
waiting on the writeback but that is never going to finish because the
writeback itself is waiting for the page locked in the #PF path.  So
this is essentially ABBA deadlock:

                                        lock_page(A)
                                        SetPageWriteback(A)
                                        unlock_page(A)
  lock_page(B)
                                        lock_page(B)
  pte_alloc_pne
    shrink_page_list
      wait_on_page_writeback(A)
                                        SetPageWriteback(B)
                                        unlock_page(B)

                                        # flush A, B to clear the writeback

This accumulating of more pages to flush is used by several filesystems
to generate a more optimal IO patterns.

Waiting for the writeback in legacy memcg controller is a workaround for
pre-mature OOM killer invocations because there is no dirty IO
throttling available for the controller.  There is no easy way around
that unfortunately.  Therefore fix this specific issue by pre-allocating
the page table outside of the page lock.  We have that handy
infrastructure for that already so simply reuse the fault-around pattern
which already does this.

There are probably other hidden __GFP_ACCOUNT | GFP_KERNEL allocations
from under a fs page locked but they should be really rare.  I am not
aware of a better solution unfortunately.

[akpm@linux-foundation.org: fix mm/memory.c:__do_fault()]
[akpm@linux-foundation.org: coding-style fixes]
[mhocko@kernel.org: enhance comment, per Johannes]
  Link: http://lkml.kernel.org/r/20181214084948.GA5624@dhcp22.suse.cz
Link: http://lkml.kernel.org/r/20181213092221.27270-1-mhocko@kernel.org
Fixes: c3b94f44fc ("memcg: further prevent OOM with too many dirty pages")
Signed-off-by: Michal Hocko <mhocko@suse.com>
Reported-by: Liu Bo <bo.liu@linux.alibaba.com>
Debugged-by: Liu Bo <bo.liu@linux.alibaba.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Liu Bo <bo.liu@linux.alibaba.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Shakeel Butt <shakeelb@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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-23 08:10:57 +01:00
Jan Stancek
be22579ac9 mm: page_mapped: don't assume compound page is huge or THP
commit 8ab88c7169 upstream.

LTP proc01 testcase has been observed to rarely trigger crashes
on arm64:
    page_mapped+0x78/0xb4
    stable_page_flags+0x27c/0x338
    kpageflags_read+0xfc/0x164
    proc_reg_read+0x7c/0xb8
    __vfs_read+0x58/0x178
    vfs_read+0x90/0x14c
    SyS_read+0x60/0xc0

The issue is that page_mapped() assumes that if compound page is not
huge, then it must be THP.  But if this is 'normal' compound page
(COMPOUND_PAGE_DTOR), then following loop can keep running (for
HPAGE_PMD_NR iterations) until it tries to read from memory that isn't
mapped and triggers a panic:

        for (i = 0; i < hpage_nr_pages(page); i++) {
                if (atomic_read(&page[i]._mapcount) >= 0)
                        return true;
	}

I could replicate this on x86 (v4.20-rc4-98-g60b548237fed) only
with a custom kernel module [1] which:
 - allocates compound page (PAGEC) of order 1
 - allocates 2 normal pages (COPY), which are initialized to 0xff (to
   satisfy _mapcount >= 0)
 - 2 PAGEC page structs are copied to address of first COPY page
 - second page of COPY is marked as not present
 - call to page_mapped(COPY) now triggers fault on access to 2nd COPY
   page at offset 0x30 (_mapcount)

[1] https://github.com/jstancek/reproducers/blob/master/kernel/page_mapped_crash/repro.c

Fix the loop to iterate for "1 << compound_order" pages.

Kirrill said "IIRC, sound subsystem can producuce custom mapped compound
pages".

Link: http://lkml.kernel.org/r/c440d69879e34209feba21e12d236d06bc0a25db.1543577156.git.jstancek@redhat.com
Fixes: e1534ae950 ("mm: differentiate page_mapped() from page_mapcount() for compound pages")
Signed-off-by: Jan Stancek <jstancek@redhat.com>
Debugged-by: Laszlo Ersek <lersek@redhat.com>
Suggested-by: "Kirill A. Shutemov" <kirill@shutemov.name>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Andrea Arcangeli <aarcange@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-16 22:12:32 +01:00
Christoph Lameter
cab4248597 slab: alien caches must not be initialized if the allocation of the alien cache failed
commit 09c2e76ed7 upstream.

Callers of __alloc_alien() check for NULL.  We must do the same check in
__alloc_alien_cache to avoid NULL pointer dereferences on allocation
failures.

Link: http://lkml.kernel.org/r/010001680f42f192-82b4e12e-1565-4ee0-ae1f-1e98974906aa-000000@email.amazonses.com
Fixes: 49dfc304ba ("slab: use the lock on alien_cache, instead of the lock on array_cache")
Fixes: c8522a3a58 ("Slab: introduce alloc_alien")
Signed-off-by: Christoph Lameter <cl@linux.com>
Reported-by: syzbot+d6ed4ec679652b4fd4e4@syzkaller.appspotmail.com
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-16 22:12:32 +01:00
Michal Hocko
cb1206e85d hwpoison, memory_hotplug: allow hwpoisoned pages to be offlined
commit b15c87263a upstream.

We have received a bug report that an injected MCE about faulty memory
prevents memory offline to succeed on 4.4 base kernel.  The underlying
reason was that the HWPoison page has an elevated reference count and the
migration keeps failing.  There are two problems with that.  First of all
it is dubious to migrate the poisoned page because we know that accessing
that memory is possible to fail.  Secondly it doesn't make any sense to
migrate a potentially broken content and preserve the memory corruption
over to a new location.

Oscar has found out that 4.4 and the current upstream kernels behave
slightly differently with his simply testcase

===

int main(void)
{
        int ret;
        int i;
        int fd;
        char *array = malloc(4096);
        char *array_locked = malloc(4096);

        fd = open("/tmp/data", O_RDONLY);
        read(fd, array, 4095);

        for (i = 0; i < 4096; i++)
                array_locked[i] = 'd';

        ret = mlock((void *)PAGE_ALIGN((unsigned long)array_locked), sizeof(array_locked));
        if (ret)
                perror("mlock");

        sleep (20);

        ret = madvise((void *)PAGE_ALIGN((unsigned long)array_locked), 4096, MADV_HWPOISON);
        if (ret)
                perror("madvise");

        for (i = 0; i < 4096; i++)
                array_locked[i] = 'd';

        return 0;
}
===

+ offline this memory.

In 4.4 kernels he saw the hwpoisoned page to be returned back to the LRU
list
kernel:  [<ffffffff81019ac9>] dump_trace+0x59/0x340
kernel:  [<ffffffff81019e9a>] show_stack_log_lvl+0xea/0x170
kernel:  [<ffffffff8101ac71>] show_stack+0x21/0x40
kernel:  [<ffffffff8132bb90>] dump_stack+0x5c/0x7c
kernel:  [<ffffffff810815a1>] warn_slowpath_common+0x81/0xb0
kernel:  [<ffffffff811a275c>] __pagevec_lru_add_fn+0x14c/0x160
kernel:  [<ffffffff811a2eed>] pagevec_lru_move_fn+0xad/0x100
kernel:  [<ffffffff811a334c>] __lru_cache_add+0x6c/0xb0
kernel:  [<ffffffff81195236>] add_to_page_cache_lru+0x46/0x70
kernel:  [<ffffffffa02b4373>] extent_readpages+0xc3/0x1a0 [btrfs]
kernel:  [<ffffffff811a16d7>] __do_page_cache_readahead+0x177/0x200
kernel:  [<ffffffff811a18c8>] ondemand_readahead+0x168/0x2a0
kernel:  [<ffffffff8119673f>] generic_file_read_iter+0x41f/0x660
kernel:  [<ffffffff8120e50d>] __vfs_read+0xcd/0x140
kernel:  [<ffffffff8120e9ea>] vfs_read+0x7a/0x120
kernel:  [<ffffffff8121404b>] kernel_read+0x3b/0x50
kernel:  [<ffffffff81215c80>] do_execveat_common.isra.29+0x490/0x6f0
kernel:  [<ffffffff81215f08>] do_execve+0x28/0x30
kernel:  [<ffffffff81095ddb>] call_usermodehelper_exec_async+0xfb/0x130
kernel:  [<ffffffff8161c045>] ret_from_fork+0x55/0x80

And that latter confuses the hotremove path because an LRU page is
attempted to be migrated and that fails due to an elevated reference
count.  It is quite possible that the reuse of the HWPoisoned page is some
kind of fixed race condition but I am not really sure about that.

With the upstream kernel the failure is slightly different.  The page
doesn't seem to have LRU bit set but isolate_movable_page simply fails and
do_migrate_range simply puts all the isolated pages back to LRU and
therefore no progress is made and scan_movable_pages finds same set of
pages over and over again.

Fix both cases by explicitly checking HWPoisoned pages before we even try
to get reference on the page, try to unmap it if it is still mapped.  As
explained by Naoya:

: Hwpoison code never unmapped those for no big reason because
: Ksm pages never dominate memory, so we simply didn't have strong
: motivation to save the pages.

Also put WARN_ON(PageLRU) in case there is a race and we can hit LRU
HWPoison pages which shouldn't happen but I couldn't convince myself about
that.  Naoya has noted the following:

: Theoretically no such gurantee, because try_to_unmap() doesn't have a
: guarantee of success and then memory_failure() returns immediately
: when hwpoison_user_mappings fails.
: Or the following code (comes after hwpoison_user_mappings block) also impli=
: es
: that the target page can still have PageLRU flag.
:
:         /*
:          * Torn down by someone else?
:          */
:         if (PageLRU(p) && !PageSwapCache(p) && p->mapping =3D=3D NULL) {
:                 action_result(pfn, MF_MSG_TRUNCATED_LRU, MF_IGNORED);
:                 res =3D -EBUSY;
:                 goto out;
:         }
:
: So I think it's OK to keep "if (WARN_ON(PageLRU(page)))" block in
: current version of your patch.

Link: http://lkml.kernel.org/r/20181206120135.14079-1-mhocko@kernel.org
Signed-off-by: Michal Hocko <mhocko@suse.com>
Reviewed-by: Oscar Salvador <osalvador@suse.com>
Debugged-by: Oscar Salvador <osalvador@suse.com>
Tested-by: Oscar Salvador <osalvador@suse.com>
Acked-by: David Hildenbrand <david@redhat.com>
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-01-13 10:03:51 +01:00
jiejing.wang
6b2d479409 ODROID-COMMON:Merge AMLogic BSP 181208
ODROID-COMMON:Merge AMLogic BSP 181208
audioinfo: fix kasan compile problem [1/1]

PD#173553

Problem:
check stack out of bounds

Solution:
change variable's definition

Verify:
verifyed by r311

Change-Id: Id6efc3ac56b297b6812e2af786732e65867a07da
Signed-off-by: jiejing.wang <jiejing.wang@amlogic.com>

buildroot: Enable fb memory allocation in g12b_skt dts [1/1]

PD#SWPL-802

Problem:
  Kernel crash when run GPU slt program

Solution:
  Enable meson fb memory allocation in g12b_skt dts

Verify:
  w400

Change-Id: I3074c2053cda06cf4ae237d24bad2c89d789f90d
Signed-off-by: Blance Tang <guofeng.tang@amlogic.com>

amvecm: hdr: add hdr10 plus support [1/2]

PD#SWPL-869

Problem:
new feature, add hdr10 plus support

Solution:
1. add hdr10 plus metadat parser
2. add hdr10 plus code support
3. add hdr10 plus bypass mode

Verify:
verify on U200

Change-Id: I957954ce148021882e17f2913dd2552e64f1298c
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

irqchip: add a new gpio IRQ driver to support double-edge detection [1/1]

PD#SWPL-922

Problem:
the existing gpio IRQ driver(porting from the upstream) does not
double-edge detection

Solution:
add a new gpio IRQ driver to support the double-edge detection,
the new driver is with different software structure but compatible
with functions of the existing driver

Verify:
test pass on s400

Change-Id: Id69dd0b4459eef20a6755947c7d95a24d7b17fa9
Signed-off-by: Xingyu Chen <xingyu.chen@amlogic.com>

pinctrl: fix some mistakes [1/1]

PD#172438

Problem:
1. return a negative when parsing the dts property
"output-high/output-low"
2. the prefix "bt565" don't meet corepinmux document

Solution:
1. add break statement in case PIN_CONFIG_OUTPUT to avoid
returning a negative value.
2. rename the "bt565" to "bt656" according to corepinmux document

Verify:
test pass on U200

Change-Id: Ieeb98367e2269007a6774592abac86ef05ee8f64
Signed-off-by: Xingyu Chen <xingyu.chen@amlogic.com>

amvecm: fix flicker when change between Launcher and Signal Source [1/1]

PD#SWPL-848

Problem:
ioctrl set the same gamma value again

Solution:
if the gamma value is same as the ioctrl userspace value, do not set again

Verify:
txlx

Change-Id: I6f17f5ff234513c5a886004aedea81b9945c5b98
Signed-off-by: Bencheng Jing <bencheng.jing@amlogic.com>

vpu: add support for tl1 [1/1]

PD#172587

Problem:
Bringup vpu for TL1.

Solution:
Add vpu support for TL1.

Verify:
Verified on PTM/PXP.

Change-Id: Ic2fb7682ddc1b21840e1be1d8462d4c0902e739d
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>

lcd: add tl1 support [1/1]

PD#172587

Problem:
not support tl1

Solution:
add tl1 support

Verify:
test pass on PTM

Change-Id: I5a9073fc08a98ae95d4961297a7427864d92279b
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>

backlight: add support for tl1 [1/1]

PD#172587

Problem:
do not suppoert for tl1

Solution:
add backlight support for fl1

Verify:
verified on PTM

Change-Id: I052a7ef93ec9cb21a544e4823a4c9a339d38b5f9
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>

arm: dts: tl1: add decoder device tree [3/3]

PD#174543

PD#172587

Problem:
new added function for tl1

Solution:
add vdin afbce support for tl1

Verify:
verified on PTM

Change-Id: I42054b8228161713ac10446491ebdb50a71975ad
Signed-off-by: shihong.zheng <shihong.zheng@amlogic.com>

media: add codec support for tl1 [1/1]

PD#172587

Problem:
Bringup codec for TL1.

Solution:
Add codec iomap device tree node for TL1.
Add canvas device tree node for TL1.

Verify:
Verified on PXP/PTM.

Change-Id: I8b9a6645f1f9fd7d4aa9cae6166895e61ddc3e36
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

rdma: add rdma support for tl1 [1/1]

PD#172587

Problem:
Bringup rdma for TL1.

Solution:
Add rdma support for TL1.

Verify:
Verified on PXP/PTM.

Change-Id: I425edc1e47db2ea834fcc5acb0e3d0ee1f30a9f7
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

osd: tl1: add osd support for tl1 [1/1]

PD#172587

Problem:
Bringup osd for TL1.

Solution:
Add osd support for TL1.
Add ge2d device tree node for TL1.

Verify:
Verified on PXP/PTM.

Change-Id: I3d20934f015108f545c3c72b979d1bd8187b282e
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

amvideo: add amvideo support for tl1 [1/1]

PD#172587

Problem:
TL1 needs support amvideo driver.

Solution:
1. Add amvideo node into dts file, default enable.
2. Change the vd mif and sr reg offset.
3. Force bypass dolby vision function.
4. Change the register following hardware design.
5. Make amvideo afbc work for tl1.

Verify:
On PTM.

Change-Id: I0d857f8a707328383328daa23e6ba8e156c2e6e0
Signed-off-by: Brian Zhu <brian.zhu@amlogic.com>

audio: auge: add sound card support for tl1 [1/1]

PD#172587

Problem:
Bringup tl1 sound card.

Solution:
Add tl1 sound card.
Add external interface for audio input/output.

Verify:
Tested by PTM
Sound card is setup.
TDM and SPDIF internel loopback is ok

Change-Id: I60830ca44a62ee2a8e16343e91e7311152cab161
Signed-off-by: Xing Wang <xing.wang@amlogic.com>

vdac: vdac: add vdac support for tl1 [1/1]

PD#172587

Problem:
do not suppoert for tl1

Solution:
add vdac support for fl1

Verify:
test pass on local

Change-Id: I7b3da34289dfe0638a24b812658db7e462ebdd4c
Signed-off-by: Nian Jing <nian.jing@amlogic.com>

avin: add avin detect support for tl1 [1/1]

PD#172587

Problem:
do not suppoert for tl1

Solution:
add avin detect support for fl1

Verify:
just coding for tl1 will test later

Change-Id: I809f7068c9d0a45c89bd7dc4e6615db99b11f015
Signed-off-by: Nian Jing <nian.jing@amlogic.com>

tvin: add vdin and viu support for tl1 [1/1]

PD#172587

Problem:
do not suppoert for tl1

Solution:
add vdin and viu support for fl1

Verify:
verified on PTM

Change-Id: If4e267356fa666541853cfc7b49008795f9ec301
Signed-off-by: xuhua zhang <xuhua.zhang@amlogic.com>

vdin: add afbce function for tl1 [1/1]

PD#172587

Problem:
new added function for tl1

Solution:
add vdin afbce support for tl1

Verify:
verified on PTM

Change-Id: I5e3e2487b6cdbed2d2ca794a6a21ed885e4bf469
Signed-off-by: xuhua zhang <xuhua.zhang@amlogic.com>

hdmirx: hdmirx driver for tl1 [1/1]

PD#172587

Problem:
hdmirx bringup for tl1

Solution:
1.modify write top api, add addr offset -qy
2.modify write edid api -qy
3.replace top hw reset api
4.add aocec access register idle -qy
5.for tl1 bypass sw eq -qy
6.replace pddq api -qy
7.modify arc control for tl1 -qy
8.add n/cts auto mode
9.add hdcp balance path
10.add sscp mode
11.optimize reg map(rm unused reg addr)
12.add recent commits from 4.9 trunk
13.modify top clk cntl bit definition
14.modify top offset addr handle(x4)
15.add audio pll setting -qy
16.update phy setting - qy
17.modify audio pll ctrl api for tl1 -qy
	-add clk monitor function
	-add clk stable api for tl1
18.add emp data to pfifo -qy
19.modify edid write and other function -qy
20.add emp data to ddr -qy
21.add tmds data to ddr -qy
22.add cec for tl1 -qy
	-fix ctc 7-1
	-add status register for cec a/b
23.add cec and hdmirx dts -qy
24.clean tl1 rx related clk measure
25.hdmirx and cec dts

Verify:
1.run PTM
2.need verify on chip

Change-Id: Ia7cc5a2d84925587bdfae825936ba763713926af
Signed-off-by: Yong Qin <yong.qin@amlogic.com>

audio: codec: add tl1_acodec support for tl1 [1/1]

PD#172587

Problem:
Add aml_tl1_acodec driver support for tl1

Solution:
1.add files sound/soc/codecs/amlogic/aml_codec_tl1.acodec.c(.h)
2.update files sound/soc/codecs/amlogic/Kconfig(Makefile)

Verify:
kernel build passed, need verified after chipback

Change-Id: I19717a442f22f5b6844627475992ef7c8cc20a71
Signed-off-by: shuyu.li <shuyu.li@amlogic.com>

hdmirx: add hdmirx repeater function [1/6]

PD#SWPL-323:

Problem:
add hdmi repeater function

Solution:
1.add the edid receive and mix.
2.add the flow of repeater.

Verify:
R321

Change-Id: I9942c5f345e2fdfff110f01d4d0c2b4b23120c07
Signed-off-by: hongmin hua <hongmin.hua@amlogic.com>

ddr: fix bandwidth read result 0 on 32bit OS [1/1]

PD#SWPL-960

Problem:
Reading bandwidth of DDR from sysfs get all 0 result on 32
bit kernel

Solution:
Fix overflow when calculating bandwidth.

Verify:
P212

Change-Id: I35837db653bdc2d97ced98689546a9ffc0db21c7
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

mm: reduce watermark if free cma is too large [1/1]

PD#SWPL-807

Problem:
Sometimes driver can't allocation memory under atomic environment.
And free pages is enough but they are nearly ALL CMA pages.

Solution:
Reduce watermark with harf of free cma pages even allocation support
CMA.

Verify:
P212

Change-Id: I8e49768d4384ed064775537754a2b7f09a5bbb7c
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

avb: avb enable need to translate more types [1/1]

PD#SWPL-1095

Problem:
avb need more command line size.

Solution:
change max size to 2048

Verify:
verify by ampere

Change-Id: I9c1089a3ea0888e8ccd82f16d2b1111b6d88922a
Signed-off-by: Luan Yuan <luan.yuan@amlogic.com>

mm: avoid pages migrated to different zone [1/1]

PD#SWPL-881

Problem:
Amlogic modified code when compatcion from normal case.
And side effect is that pages in normal zone maybe migrated to
highmem zone. Which caused page_address get a NULL value and
kernel panic occurred.

Solution:
Avoid pages migarte to different zone by adding forbid_to_cma
flags.

Verify:
P212

Change-Id: I1d9c6653dc1069562db3c1be3f53a3510a51f0d1
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

usb: adb reboot and then adb disconnect [1/1]

PD#174155

Problem:
complete_ep 0xffffffc05bed2858, ep->queue empty!
1. After adb process be killed, data buffer is freed and
this memory is allocated for the other. But the address
is hold by the controller.
2. Adbd in PC is running. So, the controller receive the
data and write to this memory.
3.The value of this memory is modified by the controller.
This could cause the memory problem.

Solution:
whenever io_data->aio equals 1, the data buffer is from a fixed array.

Verify:
Test: adb devices, adb shell, exit, adb push
in android8(p212) and android9(w400)
verified by he he

Change-Id: Idac755d3646639e2944a82f42abf9adb9aeaea8c
Signed-off-by: he.he <he.he@amlogic.com>

dts: support 32bit for gxm_q201 [1/1]

PD#SWPL-1140

Problem:
add support 32bit for gxm_q201.

Solution:
add 32bit dts for gxm_q201.

Verify:
gxm_q201

Change-Id: I3c9a6ae72fad6575bd814818967d9ff80e62f5d4
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

amvecm: pq: add amvecm support for tl1 [1/1]

PD#172587

Problem:
new feature, add amvecm support for tl1

Solution:
1. add cm hist for tl1
2. add 3dlut for tl1
3. add hdr support for tl1
4. add wb for tl1
5. add local contrast

Verify:
verify on tl1 ptm

Change-Id: I1c7ebb83a1fb72a4529415fb9bf4acfd134e6b11
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

dts: add ir cut control GPIO [1/1]

PD#SWPL-900

Problem:
add ir cut control

Solution:
add ir cut control GPIO

Verify:
g12b-skt

Change-Id: I16c7d03ed4cc1dd3842cab80a987dde1a83e5cbc
Signed-off-by: yu.zhang <yu.zhang@amlogic.com>

hdmitx: add init code for repeater [2/6]

PD#SWPL-323

Problem:
For TXLX/T962E, it has both HDMI Rx and TX, and lacks of HDMI repeater
functions, including HDCP repeater function.

Solution:
Add the init code for hdmi repeater

Verify:
TXLX/T962E/R321

Change-Id: Iaf17ae62c590ff4f8478dd5556f3ed24b9ff3bb1
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

atv_demod: switch channel with the script, the ATV shows no signal [1/1]

PD#SWPL-791

Problem:
Switch channel with the script lasts 14 hours, the ATV shows no signal.

Solution:
To avoid conflict, don't need to check the CLK
and PLL states in atv demod write and read function.

Verify:
verified by p321

Change-Id: I033c54f14541ed540dfce1b9c4e21d2b5a8b9487
Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>

media: keep last normal frame before reset [2/2]

PD#OTT-71

Problem:
google cast display green lump when seek.
reset after seek opration.

Solution:
keep last normal frame before reset and buf free.

Verify:
U211, Atom

Change-Id: I02304998c9434f1055de1138700510f4c19f466f
Signed-off-by: shihong.zheng <shihong.zheng@amlogic.com>

unifykey: add the hdmirx repeater key block [3/6]

PD#SWPL-323:

Problem:
add the hdmirx repeater key block

Solution:
add the hdmirx repeater key block.

Verify:
R321

Change-Id: I61920b706b5dd08c6be9647add287f85b35fb0ee
Signed-off-by: hongmin hua <hongmin.hua@amlogic.com>

mm: make sure the gtp flag is low default [1/1]

PD#SWPL-807

Problem:
The app's window cound be black screen when launched if the ion system
does not retry to allocate memory with the gtp high flag.

Solution:
make sure the gtp flag is low default

Verify:
P212

Change-Id: I562125573f8175cd180196ca73eb04d7dd36add0
Signed-off-by: an.xi <an.xi@amlogic.com>

dts: emmc: uboot enable emmc config [2/3]

PD#SWPL-736

Problem:
The s400 emmc platform uboot cannot be loaded
into kernel normally

Solution:
enable enable emmc node in dtb by fdt command.
    and modify malloc max size to 18M.

Verify:
s400

Change-Id: Iaef58f1b05a952793d414eb82ac476d88d910fe1
Signed-off-by: yuegui.he <yuegui.he@amlogic.com>

dts: GVSDK: modify loopback and led device name [1/1]

PD#173996

Problem:
1. to support hw loopback channel 2,3 for GVSDK.
2. led is31fl32xx device name register fail.

Solution:
1. change boolback to channel 2,3
2. register led is31fl32xx name success.

Verify:
S400_GVSDK/S420_GVSDK

Change-Id: Ie1bbc01c4624fd1e2e2662c4d9c876e56c301a99
Signed-off-by: Renjun Xu <renjun.xu@amlogic.com>

mm: exclude free cma pages when calculate watermark [1/1]

PD#SWPL-1210

Problem:
Some drivers(eth/wifi) occasionally can't allocate memory under
atomic context. From mem status print, there are enough free
pages but most of them are CMA.

Solution:
Exclude free cma pages when calculate water mark. This can push
kswapd/compaction work more aggressive.

Verify:
P212

Change-Id: Ia723f21c0316eff1a38e759ff9f044bb59aa8efa
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

dv: set stb core run_mode_delay as 0 [1/1]

PD#SWPL-781

Problem:
when starting to play video, the manu bar shakes

Solution:
stb core don't need run mode delay.

Verify:
t962e (txlx)

Change-Id: I22ba5d778eedd72f87b4c687b38acf1b8c6d6fc9
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

dv: fix the green screen when changing dv mode [1/1]

PD#SWPL-1029

Problem:
when changing dv mode from standard to ll mode.
wn tp vks should be enabled

Solution:
enable wn tp vks when setting ll mode

Verify:
t962e (txlx)

Change-Id: I3b399132cf1a3c7b1799f36f9bc3a0696883029f
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

lcd: lcd_extern: fix get invalid extern_driver null pointer mistake [1/1]

PD#SWPL-1152

Problem:
There is a null pointer mistake in lcd_extern_get_driver for invalid driver

Solution:
add null pointer protection

Verify:
txlx r311

Change-Id: I171d10ab26e6c298b8eb4065dfa054a237bfd53b
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>

crypto: Enable ARMCE and set aes dma to slow mode [1/1]

PD#SWPL-574

Problem:
xfrm test failed randomly in VtsKernelNetTest
due to random failed in gcm(aes)

Solution:
Use ARMCE for small sized crypto processing and use
copy mode when HW dma is used

Verify:
verified on ampere

Change-Id: I31cd75cfcd85da9fc9e9640135c7ce76623ef715
Signed-off-by: Matthew Shyu <matthew.shyu@amlogic.com>

USB: host: tuning disconnect threshold on g12a/g12b [2/2]

PD#174736

Problem:
Some usb device may disconnect when handshake

Solution:
tuning disconnect threshold when usb host initial
now default is 0x24, only three value can tuning, 0x2c,0x34,0x3c
we set 0x34 now

Verify:
Google estelle boards which return from factory
no side effect on refernce u200 board

Change-Id: I71d974a6bac43452b20bd7f2a6827d3a46fa39fb
Signed-off-by: qi duan <qi.duan@amlogic.com>

audio: solve av out output level low issue [2/2]

PD#SWPL-766

Problem:
  av output level only 100mv

Solution:
  change the channel map for av out,
  use orignal pcm for output w/o volume
  control and postprocess.

Verify:
  verified by r311

Change-Id: Ibeaf0ecfda03f81ff6061dc9c4975049452ba659
Signed-off-by: Lianlian Zhu <lianlian.zhu@amlogic.com>
Signed-off-by: Jian Xu <jian.xu@amlogic.com>

chipid: meson: add ops id for S805Y [1/2]

PD#SWPL-940

Problem:
Need ops id api for S805Y

Solution:
Add ops id api

Verify:
s805y_p215

Change-Id: I179f87acbc3f57456e0359bd0d502c58cc3a9b9c
Signed-off-by: Qiufang Dai <qiufang.dai@amlogic.com>

hdmitx: add feature limited [3/3]

PD#174490

Problem:
Lack feature limited for certain types

Solution:
Add feature limited for certain types

Verify:
TBD

Change-Id: Ifbe104fe98fe1e3875f2f1af7793348856275b92
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

dts: support 32bit for g12b_w400 [1/1]

PD#SWPL-1010

Problem:
add support 32bit for g12b_w400

Solution:
add 32bit dts of g12b_w400.

Verify:
g12b_a311d_w400

Change-Id: I30ac9cb80721b04a13532ceb5c14f76bdf1cc575
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

display: dts modify [1/1]

PD#TV-405

Problem:
Should create a 720p ui display mode on p321.

Solution:
Created a folder named t962_p321_720p under device/amlogic
and modified some variate.
The diffs that compare with txl_t962_p321.dts
amlogic-dt-id = "txl_p321_v1_720p";
	size = <0x400000>;
	alloc-ranges = <0x3fc00000 0x400000>;
	mem_size = <0x00400000 0x00b00000 0x00100000>;
	/* uboot logo,fb0/fb1 memory size,if afbcd fb0=0x0b51000*/
	display_mode_default = "720p60hz";
	/*1280*720*4*3 = 0xA8C000*/
	display_size_default = <1280 720 1280 2160 32>;
	logo_addr = "0x3fc00000";

Verify:
p321

Change-Id: Ia397cd6cbcf4fdd9fb139259099805bdad90b92f
Signed-off-by: Guotai Shen <guotai.shen@amlogic.com>

dts: support 32bit for gxl_p230 [1/1]

PD#SWPL-1116

Problem:
add support 32bit for gxl_p230.

Solution:
add 32bit dts for gxl_p230.

Verify:
gxl_p230

Change-Id: Icc62c45e7bd36e8248ad0bb11a67a0151cf7ea34
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

dts: sync difference between arch32 and arch64 [1/1]

PD#SWPL-959

Problem:
sync arch32 and arch64 dts.

Solution:
sync arch32 and arch64 dts.

Verify:
r311

Change-Id: I493c83f38899628ac65c637e81f053a7c22bd24f
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

cec: for support multi-logical address [1/2]

PD#SWPL-418

Problem:
cec: for support mult-logical address

Solution:
1.add interface: remove logical address
2.for support multi-logical address

Verify:
r311 r321

Change-Id: I9ea8b1004f43fb84855d41dd684c117fa5cbd7ae
Signed-off-by: Yong Qin <yong.qin@amlogic.com>

cec: for support multi-logical address [2/2]

PD#SWPL-418

Problem:
cec: support multi-logical address

Solution:
1.enable cec_a, cec_b
2.enable two interrupt
3.enable two pinmux oa_7, ao_8
4.cec_a only send all msg
5.cec_b only receive all msg
6.discard ceca broadcast msg

Verify:
r311 r321

Change-Id: I8f983ed6ad329ca5ec0144587a7ad1f03ad68031
Signed-off-by: Yong Qin <yong.qin@amlogic.com>

emmc: ffu: add emmc ffu update support [1/1]

PD#174683

Problem:
kernel emmc ffu is not supported.

Solution:
add emmc ffu update support with mmc untils.

Verify:
p212

Change-Id: Ice9ffb174c061e3f114b0b68af290492808b0a5e
Signed-off-by: Nan Li <nan.li@amlogic.com>

codec_mm: add reserved & cma support for 4.9. [1/1]

PD#172483

Problem:
Add reserved & cma support for 4.9.

Solution:
1. add tvp padding, for test.
2. add no-cma-tvp,to force not used cma for tvp.
3. add nomap for reserved memroy detective.
4. add res & cma two mem region on same board.
5. add clear-map property for codec_mm_cma.

Verify:
Test this function with Android_O-MR1(GTVS) & ExoPlayer.

Change-Id: Ib20e0e9bc4725afb271de97543ce5ebf3bfcfb29
Signed-off-by: Zhi Zhou <zhi.zhou@amlogic.com>

mm: clear MMU mapping for secure os memory [1/1]

PD#SWPL-1631

Problem:
If Cortex A73 accessed memory near secure memory range, an
SError may occur due to prefetch of A73 core.

Solution:
Remove mmu maping of secure memory range.
Note: must add clear-map and set clear range property in DTS

Verify:
W400

Change-Id: I718919c1b4873584eb87e00332622a1626672808
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

cec: revert changesy [1/1]

PD#SWPL-418

Problem:
TXL can't bootup

Solution:
revert it

Verify:
p321

Revert "cec: for support multi-logical address [2/2]"
This reverts commit cc185dc81d.

Revert "cec: for support multi-logical address [1/2]"
This reverts commit b7922078ea.

Change-Id: I1cef0ac194464d75ffff3fe765f15b5f944406b2
Signed-off-by: Lei Qian <lei.qian@amlogic.com>

aarch64: enable swp software emulation [1/1]

PD#IPTV-14

Problem:
3D Benchmark.apk crash

Solution:
Add swp instruction support on armv8

Verify:
local

Change-Id: Ice2bef5c0ef7110b3adb4af811f99d4bfca1e8dc
Signed-off-by: Jianxin Pan <jianxin.pan@amlogic.com>

emmc: Modify delay of command line to 1/4 command window [1/1]

PD#SWPL-1184

Problem:
emmc data crc error

Solution:
Modify delay of command line

Verify:
A113d_s400

Change-Id: I7211da9da75569aebaf0c2790e3134e88a6f3077
Signed-off-by: Ruixuan Li <ruixuan.li@amlogic.com>

adc_key: delete early_suspend code [1/1]

PD#OTT-144

Problem:
after the dark screen, the adc button does not work

Solution:
The adc_keypad introduces earlysuspend for MID project:
after the LCD backlight disable, prevent the user from
pressing the key to open some applications and not complete standby.
Now check the adc button using the "system_freezable_wq" system queue,
which replaces the function of the code.So can remove it.

Verify:
g12b socket

Change-Id: I2333ba3dc406d2624962d116293a0b9d36f97534
Signed-off-by: Yingyuan Zhu <yingyuan.zhu@amlogic.com>

audio: fix errors of coverity [1/1]

PD#166793

Problem:
coverity check errors of format

Solution:
fix err

Verify:
verify locally

Change-Id: Ie3a404fe50c5bdaa6a9cf4a4194659502defdbd2
Signed-off-by: jiejing.wang <jiejing.wang@amlogic.com>

hdmirx: fix sound noise when switch hdmi port [1/1]

PD#SWPL-1224

Problem:
There will sound noise when switch hdmi port.

Solution:
Remove bandgap off when close port.

Verify:
Locally

Change-Id: Ibd9be3aa6f32072918f7b1ec151463452b2b879a
Signed-off-by: yicheng shen <yicheng.shen@amlogic.com>

mm: clear MMU mapping for secure os memory [1/1]

PD#SWPL-1631

Problem:
If Cortex A73 accessed memory near secure memory range, an
SError may occur due to prefetch of A73 core.

Solution:
Add clear mmu property for arm platform

Verify:
W400

Change-Id: I2e396f77772aeea231d0bf5f38a81440117ecdd6
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

video: merged from A wait AFBC idle when report state [1/1]

PD#169128:

[Problem]
When quick switch video between 2 vsync isr, the AFBC may read wrong
data, and green screen or distortion image occurs.

[Solution]
1. Add delay when get video layer state, to make sure afbc is stopped
2. Remove ambiguous log print

[Platform]
Blanche
BranchTo: NONE

[Test]

Change-Id: I94ccf25373f29ce188829ab1b7db6f9df1fb49ad
Signed-off-by: Zhi Zhou <zhi.zhou@amlogic.com>

dts: add isp and galcore support to w400-buildroot [1/2]

PD#SWPL-1819

Problem:
lack of isp and galcore support in buildroot dts

Solution:
merge configurations from skt board

Verify:
local

Change-Id: I5936341fc24719f345c7707e16e692ae292ca6fe
Signed-off-by: Jun Zhang <jun.zhang@amlogic.com>

dts: modified atom.dts support 32bit. [1/1]

PD#SWPL-1942

Problem:
add atom.dts support 32bit.

Solution:
modified length of reg, mem etc.

Verify:
r321

Change-Id: I2a518af2a76b8cb17ded68e994c3065072b92b9c
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

vccktest: add vccktest dts for buildroot [1/1]

PD#174851

Problem:
buildroot no vccktest dts

Solution:
add vccktest dts

Verify:
g12a/g12b test pass

Change-Id: I6907fa3cfc087ac84395956ddbda678f7a5e3f4b
Signed-off-by: Huan Biao <huan.biao@amlogic.com>

script: segments can appear in descriptive information [1/1]

PD#174488

Problem:
segmentation in descriptive information is reasonable and
should be allowed.

Solution:
modify the check codes.

Verify:
test locally.

Change-Id: I5e34ef2dd26077bb54adee7597a1aa3c789566c9
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

vlock: optimize vlock process for interlace input [1/1]

PD#SWPL-743

Problem:
The picthre is shaking when press DVD remote
control in AV source

Solution:
add delay work for vlock process interlace input

Verify:
T962X-R311

Change-Id: Ic2ed077e0684ecc6b0990336e7a4ab7022931886
Signed-off-by: Dezhi Kong <dezhi.kong@amlogic.com>

atv_demod: pc bad value in panic after change source [1/1]

PD#SWPL-1636

Problem:
1.pc bad value in kernel panic after change source.
2.System crash down when change source.

Solution:
optimize atv demod code.

Verify:
verified by p321

Change-Id: I655d1253950475dfb49ae1b174597797000adb73
Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>

vout: add bist test on vout [1/1]

PD#SWPL-1630

Problem:
add cvbs/hdmi/lcd bist test on vout

Solution:
add cvbs bist test on vout

Verify:
test pass on u200/p212

Change-Id: Ie61d9b0d63649ec3022fd720068b689f4d721e3b
Signed-off-by: Nian Jing <nian.jing@amlogic.com>

osd: meson-hwc screen always blank [1/1]

PD#163001

Problem:
TL1 code merged caused meson-hwc screen always blank

Solution:
fix meson-hwc screen always blank

Verify:
verified in u200 board

Change-Id: I0a9371b42546e2713e6dcb926e7c94598e29da1d
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

osd: osd shift-workaround one line fixed [1/1]

PD#163001

Problem:
current osd code have one line missing issue in meson-hwc

Solution:
osd blend used +1 line to fix shift issue,
and used freescale to cut it.

Verify:
verified in u200 board

Change-Id: I2354742d456327d9f1aa5713ee782648895034db
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

smartcard: fix defects for coverity [1/1]

PD#166793

Problem:
conditional statement not is valid.

Solution:
change type u32 to type int.

Verify:
module owner confirmed.

Change-Id: I9fdfa444b29104c7afc9b7a380748ebe82ed390b
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

osd: uboot logo scaler down in 4k issue [1/1]

PD#163001

Problem:
uboot logo scaler down in 4k

Solution:
uboot logo size adjust when vout changed before
first page flip command

Verify:
verified in u200 board

Change-Id: Ic23e695fe716811eaf3faa62069c808a03c26f9d
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

osd: add hdr mode set via meson-hwc support [1/1]

PD#163001

Problem:
hdr mode set not supported

Solution:
add hdr mode set via meson-hwc support

Verify:
verified in u200 board

Change-Id: Iaad75982003870f9469e4155aedb9c13349b60b9
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

dts: fix some errors on g12b_w400 for 32bit [1/1]

PD#SWPL-1010

Problem:
some errors of reg address.

Solution:
modify to support 32bit.

Verify:
w400.

Change-Id: Ia35e95ac59084a9c57a9a4ab32fecb64f78c772e
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

ddr: detect bandwidth except mali and reduce bandwidth [2/3]

PD#SWPL-122

Problem:
ddr bandwidth is tightly in many cases, such as HDR/4K video playing,
and then refresh osd at the same time

Solution:
in most cases the problem is refreshing osd when bandwidth tightly,
so detect ddr bandwidth usage except mali and reduce it when it is tightly

Verify:
verify by p321/r311

Change-Id: Ia594f08dbe9a8a7a8d78b5104c93bddaa8229c0b
Signed-off-by: wenbiao zhang <wenbiao.zhang@amlogic.com>

arm: dts: gxl: replace watchdog with new version [1/1]

PD#SWPL-1600

Problem:
The current watchdog is not the upstream standard driver.

Solution:
Replace watchdog device tree to use the standard watchdog driver.

Verify:
S905X P215/P212 Android-32bit Kernel-32bit.

Change-Id: I972c8ebb0158caa2df393d9a2d687d9298181102
Signed-off-by: Bo Yang <bo.yang@amlogic.com>

arm64: dts: g12a: fine-tune voltage OPP [1/1]

PD#165143

Proble:
fine-tune voltage OPP

Solution:
fine-tune voltage OPP

Verify:
G12A/G12B,PASS

Change-Id: I0b3fb0e4624e2ddfa635c8225a740ed7a8ff3e51
Signed-off-by: Hong Guo <hong.guo@amlogic.com>

audio: fix audio driver del_timer BUG_ON crash issue  [1/1]

PD#SWPL-972

Problem:
    audio crash when ATV switch channel long time burning test

Solution:
    there is a risk to fetch the timer lock. when input stop, stop_timer
    will call del_timer, at the same time the function
    "aml_i2s_hrtimer_callback" is waiting for the timer lock,after
    stop_timer release the lock,"aml_i2s_hrtimer_callback" get the
    lock and call mod_timer again, which will set the timer to pending
    status. It will cause the next  "start input" stage,add_timer will
    trigger BUG_ON.Now we put the lock before the active status
    checking then we will not touch the timer.

Verify:
    Need burning test

Change-Id: I1fb66903a4d31e9491ac0533e477e1597575d4cf
Signed-off-by: Jian Xu <jian.xu@amlogic.com>

hdmitx: enable repeater_tx in r321/atom dts [2/3]

PD#SWPL-1303

Problem:
For TXLX/T962E/R321 cases, there are both HDMI TX and RX.
Should consider it as repeater.

Solution:
Enable repeater_tx in r321/atom dts
Also, add a missing ksv_lists[] clear.

Verify:
r321/atom

Change-Id: I7b512c34123481380220f9262466fde56b0ae6e3
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

hdmitx: remove a wrong Y422 format judgement [1/1]

PD#IPTV-55

Problem:
When connect to a Samsung TV(support 4k60 422 12bit), get a wrong
0 of 'echo 2160p60hz422,12bit > valid_mode'

Solution:
Remove a wrong Y422 format judgement

Verify:
P212

Change-Id: Ic0f2cefc1e0893390ac38298b55272877d81e04b
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

tsync: tsync change the apts set code [1/2]

PD#SWPL-1774

Problem:
DD program has avysnc problem over one night play

Solution:
fix the apts set bug

Verify:
p321

Change-Id: I0f6a5b47d3e3171a3dd8fa9a0b721cd11ec20b9e
Signed-off-by: live.li <live.li@amlogic.com>

amvecm: overscan: fix video local play, screen mode set error [1/1]

PD#SWPL-206

Problem:
overscan set error when local play

Solution:
overscan don't set at vpp

Verify:
verify on txlx

Change-Id: Ifd4ad4f5fcdb9fbc7ad05a540d0ed11b24d4ca66
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

thermal: sensor: fix thermal disabled mode issue [1/1]

PD#SWPL-2130

Problem:
tsensor driver update thermal event when mode disabled

Solution:
fix tsensor disable mode issue

Verify:
A311D W400 pass

Change-Id: If9e3d3ea15732a0efbd8314003b27bc0bdf3e476
Signed-off-by: Huan Biao <huan.biao@amlogic.com>

deinterface: add afbc support on g12a and txlx [1/1]

PD#SWPL-1618

Problem:
Add afbc support on g12a and txlx

Solution:
add afbc support on g12a and txlx

Verify:
T962X-R311, U200(G12A)

Change-Id: Ia0cce8516a98653b01c3bc628e812c3a81b1df59
Signed-off-by: huaihao.guo <huaihao.guo@amlogic.com>

dts: change CMA layout [1/1]

PD#SWPL-1909

Problem:
On 32bit kernel, codec cma is located in normal zone by
"alloc-ranges" parameter with large size. This takse up
memory space for kernel and drivers. Sometimes we can see
memory allocation fail log but there are still enought
free pages. But most of these pages are CMA pages.

Solution:
Move codec cma location to high memzone. On 32bit, low
768MB memory is normal zone.
This change also correct first 1MB memory lost problem
for chips later than TXLX

Verify:
P212

Change-Id: I4592d34d08ee4dbb6700bbbfc4e0fadaceab0310
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

media: remap the addr to prevent crash on the 32bit & 2G board [1/1]

PD#SWPL-1909

Problem:
mem rw exception caused crashed.

Solution:
1. add mapping the highmem address by the func vmap().
2. remove the flag CODEC_MM_FLAGS_CPU if not necessary.

Verify:
p212, w400

Change-Id: I982c775d7c009335cae5802f0eb6287d22037db6
Signed-off-by: Nanxin Qin <nanxin.qin@amlogic.com>

media: fix some coverity error: [1/1]

PD#SWPL-2053

Problem:
Coverity detected some code defects.

Solution:
Fixed these code defects.

Verify:
Verified u212

Change-Id: Ie3c0907c7ee3db94f65f58aa5d5c96812a7fe38c
Signed-off-by: Peng Yixin <yixin.peng@amlogic.com>

dts: modify the remaining 64bit dts to support 32bit [1/1]

PD#SWPL-2046

Problem:
some of the remaining 64bit boards do not support 32bit.

Solution:
modify the dts to support 32bit.

Verify:
axg, g12a, g12b, gxl, gxm, txl, txlx.

Change-Id: I951f8d32b18243a64e2abc5008bbb015c2e21e7a
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

dv: set avi info limited range when dv output hdr mode [1/1]

PD#SWPL-1127

Problem:
when dv output hdr mode, the quantization range is default value
instead of limited range

Solution:
set quantization range to limited range in avi info

Verify:
t962e (txlx)

Change-Id: Ib4fbeb1c7efcedd7194143772ee5c663284a1c77
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

drm: pq: G12A DRM support gamma and ctm setting [1/1]

PD#165492

Problem:
G12A DRM add gamma and ctm setting  support

Solution:
1. amvecm: add gamma apis for drm
2. drm: add gamma and ctm setting

Verify:
Verified on customer platfor

Change-Id: Iff5204ae7f719542463ac15140e471cd762c9c27
Signed-off-by: Bencheng Jing <bencheng.jing@amlogic.com>

di: fix dump_status log error [1/1]

PD#174473

Problem:
dump_status log error

Solution:
fix dump_status log error

Verify:
verified in t962X_r311 board

Change-Id: I53cec7b93f6e2649bd527b8591995d54bec6450d
Signed-off-by: wenfeng.guo <wenfeng.guo@amlogic.com>

sdio: optimize sd & wifi TDMA [1/1]

PD#SWPL-1908

Problem:
sdio wifi error TDMA.

Solution:
optimize host reg value set error.

Verify:
u211 & u212

Change-Id: I0e0d52ac2bce42cf163f0065d46badc938832a65
Signed-off-by: Nan Li <nan.li@amlogic.com>

atv_demod: Output big "PO" sound when change source from ATV [1/3]

PD#SWPL-318

Problem:
Output big "PO" sound when change source from ATV to others,
or switch between small window and full screen in ATV source.

Solution:
disable atv status early when exit ATV source.

Verify:
verified by p321

Change-Id: I82af7f8eaef181f1f72ef1f9d194e33c1efdcdb5
Signed-off-by: nengwen.chen <nengwen.chen@amlogic.com>

deinterlace: fix di coverity & di_trace [1/1]

PD#SWPL-2138

Problem:
Fix di coverity & di_trace

Solution:
fix di coverity & di

Verify:
T962X-R311

Change-Id: I9be91832eeed89ebd715276c75414e4e6da55240
Signed-off-by: wenfeng.guo <wenfeng.guo@amlogic.com>

vdin: enable vdin0 urgent for T950 default [1/1]

PD#TV-288

Problem:
There is flicker and jitter in HDMI

Solution:
enable vdin0 urgent for T950 default

Verify:
p321-T950

Change-Id: I17e472d7a47411093e9ade70a342807bed060a3a
Signed-off-by: Dezhi Kong <dezhi.kong@amlogic.com>

clk: g12a/g12b: fix 32bit set mpll clk overflow [1/1]

PD#SWPL-1933

Problem:
32bit system clk overflow

Solution:
let mpll clock not overflow

Verify:
g12b

Change-Id: Ie1c7c611e637776348bb35a3e0c1624cee57716f
Signed-off-by: shunzhou.jiang <shunzhou.jiang@amlogic.com>

reboot: reason: add reboot_reason quiescent [1/4]

PD#SWPL-1887

Problem:
Android TV need reboot_reason quiescent

Solution:
add reboot_reason quiescent

Verify:
ampere

Change-Id: Ie5a748faae05be93c56722b7806df6179116a047
Signed-off-by: Xindong Xu <xindong.xu@amlogic.com>

arm64: dts: p230: add dvb module

PD#172865

Problem:
Customer requests a new release for linux dvb
Need enable dvb for QA testing

Solution:
Need enable dvb for QA testing

Verify:

Change-Id: Ib082c457d6f43ef4d6a5d16059a7e8ce068a332e
Signed-off-by: yeping.miao <yeping.miao@amlogic.com>

emmc: clean emmc reg val for probe [1/1]

PD#SWPL-2286

Problem:
emmc response crc error in emmc init.

Solution:
clean emmc reg val from uboot to kernel.

Verify:
w400

Change-Id: I6a4763187f18e9e284c887c5c788f3a88c8548ff
Signed-off-by: Nan Li <nan.li@amlogic.com>

dts: dtsi: add dtsi for ab update [1/6]

PD#SWPL-1513

Problem:
ab update can not work on P

Solution:
add dtsi for ab update for P

Verify:
test pass in ampere

Change-Id: I6ff219170a16c0081fba7297110e8dfaadcff401
Signed-off-by: Xindong Xu <xindong.xu@amlogic.com>

backlight: ldim: update usage for new spi driver [1/1]

PD#SWPL-1603

Problem:
don't support old spi driver now

Solution:
update new spi driver api for ldim driver

Verify:
txlx r311

Change-Id: I4dff13e4cab5666a30488730e27c6275b933a922
Signed-off-by: Evoke Zhang <evoke.zhang@amlogic.com>

hdmitx: fix wrong power uevent in suspend/resume [1/1]

PD#SWPL-1931

Problem:
Wrong hdmi_power uevent in suspend/resume flow

Solution:
Remove current mode judgement

Verify:
R321

Change-Id: Ib36e8d6cb4988f7b2be91146b12e974c194526ca
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

ddr: fix dmc_monitor register bit missmatch on G12A/G12B [1/1]

PD#172256

Problem:
On G12A/G12B, bit for ddr0 protection 0 vilation is not same

Solution:
Fix bit missmatch problem

Verify:
U212

Change-Id: I5dca14c8bc96bdcb85dbe8bbd5a9a18157834bcf
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

deinterlace: fix kasan bug in di_task_handle [1/1]

PD#173820

Problem:
kasan bug in di_task_handle

Solution:
delete cma_mutex because it has no effect

Verify:
P321

Change-Id: Ie6ca7973576e7350870c5466b54b38b490dff65e
Signed-off-by: Jihong Sui <jihong.sui@amlogic.com>

mmc: fixup toshiba emmc secure discard [1/1]

PD#SWPL-1937

Problem:
secure discard and trim may cost 5mins on toshiba
"004GA0" emmc.

Solution:
using normal discard operation instead.

Verify:
W400

Change-Id: I7fd23867f8ae0af9192377de8f8c15609ef809ed
Signed-off-by: Yonghui Yu <yonghui.yu@amlogic.com>

ionvideo: Add thread stop protection when the process exits [1/1]

PD#SWPL-1689

Problem:
The thread still exists when the process exits

Solution:
Check if the thread exits when the process exits

Verify:
local

Change-Id: I6d805da6bfa0df85b6d39d065c95eed49b3cb7da
Signed-off-by: Renjiang Han <renjiang.han@amlogic.com>

dts: the memory of the reserved 1MB was recovered. [1/1]

PD#SWPL-2250

Problem:
h265 & vp9 4K playback abnormal because HEVC FRONT &
VPU READ2 pollute the phy address of near 0x0.

Solution:
it's only a temporary modification, the real reason
needs to take more time fixed.

Verify:
U212

Change-Id: I3dcc47f8979960e95c89cf53fe10eadc1a7ae5ad
Signed-off-by: Nanxin Qin <nanxin.qin@amlogic.com>

dts: r314: increase board dts file [2/3]

PD#SWPL-1978

Problem:
bring up board r314.

Solution:
increase board dts file

feature:
The Dts file with Einstein is identical except for the memory difference
R314 1.5G, Einstein 1G.

Verify:
Verified on txlx_t962x_r314  board.

Change-Id: I271cb92a9cbcab174fb0bb76cfbc8beff9c730d3
Signed-off-by: guotai.shen <guotai.shen@amlogic.com>

vrtc: vrtc time update for stick mem [2/2]

PD#174867

Problem:
vrtc time update for stick mem.

Solution:
vrtc time update for stick mem.

Verify:
g12a txl.

Change-Id: I65074422569370b253882a4e66fb771da10ccdbf
Signed-off-by: Hong Guo <hong.guo@amlogic.com>

irblaster: add synchronous transmit [1/1]

PD#SWPL-2170

Problem:
cts fail
android.hardware.consumerir.cts.ConsumerIrTest#test_timing

Solution:
add synchronous transmit
when it returns the pattern has been transmitted

Verify:
verify on franklin

Change-Id: I7e490236e5effc13f81e4fab3a1c7fc10c5dcfb3
Signed-off-by: Wencai You <wencai.you@amlogic.com>

amvecm: pq: add dnlp/bri/contrast for tl1 [1/1]

PD#172587

Problem:
dnlp/bri/contrast can not finetune

Solution:
1. add dnlp regisiter 10bit write
2. add brightness/contrast/sr for tl1

Verify:
verify on tl1

Change-Id: I90b363f57fbf2cd485e2acaddb5ce60a8715a47b
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

ramdump: add ramdump support for ARM32 [1/1]

PD#165764

Problem:
ramdump is not enabled on ARM32

Solution:
Enable it and fix compatible with ARM64

Verify:
R311

Change-Id: I337ef019ecab05d25b7d9dc0cacab7a03149aa7b
Signed-off-by: tao zeng <tao.zeng@amlogic.com>

avsync: tsync: fix the avsync problem [1/1]

PD#SWPL-1158

Problem:
The video will become un-smooth after change
between several audio languages

Solution:
when apts and vpts distance is large then 60*90000
then set the tsync mode to vmaster and  set the tysnc
enable to 0

Verify:
P321

Change-Id: I7c7e32f49ca12645cf6a1aa58caeb968a9234c8c
Signed-off-by: live.li <live.li@amlogic.com>

dtv_demod: fix dtv demod crash switch once every 2s [1/1]

PD#SWPL-2293

Problem:
dtv demod switch once every 2s cause crash

Solution:
fix dtv demod crash switch once every 2s

Verify:
P321

Change-Id: Ibfd919a503e3dae41f51637cdff6e01ed27bac71
Signed-off-by: wenfeng.guo <wenfeng.guo@amlogic.com>

ramdump: fix a warning of cast [1/1]

PD#165764

Problem:
have a warning of the "ram" variable cast.

Solution:
add a "void *" to the ram variable.

Verify:
test locally.

Change-Id: I037a89a28e98ae8c8ab965e908877bf4a72d3ead
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>

vpp: fix p212 osd sdr2hdr luma too dark [1/1]

PD#SWPL-1707

Problem:
{NTS}Manual,HDR-001-TC2 Failed step 8/12/16/20 VID
and GFX doesn't match

Solution:
add osd hdr2sdr convert table for 400nit on p212

Verify:
verify on p212

Change-Id: I9a9dcf13ab0deaa8b676c5c409919367420b6d1b
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

vpp: fix p212 osd sdr2hdr luma too dark compile [1/1]

PD#SWPL-1707

Problem:
{NTS}Manual,HDR-001-TC2 Failed step 8/12/16/20 VID
and GFX doesn't match

Solution:
add osd hdr2sdr convert table for 400nit on p212

Verify:
verify on p212

Change-Id: I16637652b6d07ba81b25f46c2684ff7ae3e1c68c
Signed-off-by: MingLiang Dong <mingliang.dong@amlogic.com>

vdac: fix atv/dtv resume no signal issue [1/1]

PD#SWPL-2351

Problem:
atv/dtv no signal when suspend after switch from hdmi

Solution:
disable vdac bandgap when suspend

Verify:
test pass on P321

Change-Id: I0449f0d9673f46928b8951249f5759a4a1f16562
Signed-off-by: Nian Jing <nian.jing@amlogic.com>

spicc: fix miss bytes/time consume/loopback issue [1/1]

PD#SWPL-215

Problem:
1. additional or missing bytes be sent on mosi sometimes.
2. Customer DSP load firmware through SPICC. the loading time is 12s with
buildroot release 20180907 while 6s with 20180131.
3. rx error when work in loopback mode at high speed.

Solution:
1. change to disable irq at the irq-handle begining;
change to enable irq after all data pulled.
2. pre-setup of every spi transfer spends most of time on clk_set_rate().
this time is not obvious while cpu work at a high frequence such as
1000MHz.
In fact, a slave speed is almost fixed and we needn't set it for every
transfer but set only when speed changed.
3. disable auto io delay when in loopback mode.

Verify:
verified on axg-s400-v03 and tl1-skt

Change-Id: I61bcceccc243b218879b2b0711d0aff7538151f6
Signed-off-by: Sunny Luo <sunny.luo@amlogic.com>

framebuffer: remove lock in fbmem ioctl. [1/1]

PD#SWPL-2497

Problem:
on 32bit kernel, when user space call WAITFORVSYNC,
we cannot send other command to framebuffer.

Solution:
remove lock in fbioctl as fb compat_ioctl do.
Our driver have locks to protect internal resources.

Verify:
verified on franklin.

Change-Id: I1789c09a7ea459aed4b782748847687c7f974526
Signed-off-by: sky zhou <sky.zhou@amlogic.com>

dv: fix osd color matrix when dv enabled [1/1]

PD#SWPL-1804

Problem:
fix osd color matrix when dv enabled

Solution:
enable osd matrix when dv enabled

Verify:
verified on u212 dev board

Change-Id: I4b4206f4d8c447873f23a3a0066af0d0fa85e18c
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

osd: fix osd color error when osd hdr enabled [1/1]

PD#SWPL-1804

Problem:
osd color error when osd hdr enabled

Solution:
div alpha when osd hdr enabled

Verify:
verified on u212 dev board

Change-Id: I1f5ea0db404d1956f454bd5da2532bded89626ee
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

osd: add meson-hwc repodution rate support [1/2]

PD#SWPL-1810

Problem:
osd blend repodution rate not supported

Solution:
add meson-hwc repodution rate support

Verify:
verified on u212 dev board

Change-Id: Ied10393e240e8d3f2a1eefe17a2d4d3c965e3383
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

dts: GXL: defendkey: support secure upgrade check [3/3]

PD#SWPL-2100

Problem:
GXL need to support secure upgrade check

Solution:
add defendkey support in all GXL dts

Verify:
GXL skt board verify pass

Change-Id: I73b84b86f23f512ddc556b61f3a07d015c717e8c
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

GXL: defendkey: support secure upgrade check [2/3]

PD#SWPL-2100

Problem:
GXL need to support secure upgrade check

Solution:
1.add dtb decrypt support
2.add 32bit defendkey support

Verify:
GXL skt board verify pass

Change-Id: I501967530b2a61d9b90c20241b82f92b00829453
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

PM_SUSPEND: suspend: set wakeup reason to stick mem [2/2]

PD#SWPL-2287

Problem:
set wakeup reason to stick mem

Solution:
set wakeup reason to stick mem

Verify:
gxl,test pass

Change-Id: Iff6f1824ea4ac9ec12b8295d4283992fdac03b14
Signed-off-by: Hong Guo <hong.guo@amlogic.com>

deinterlace: fix CMA layout adaptation di_cma_reserved [1/1]

PD#SWPL-2308

Problem:
CMA layout adaptation di_cma_reserved cause crash

Solution:
fix CMA layout adaptation di_cma_reserved

Verify:
P321

Change-Id: Ia24e811a02d47d70afa1c06361fd0852c357394c
Signed-off-by: wenfeng.guo <wenfeng.guo@amlogic.com>

media: media_sync: remove serial port debug logs [1/1]

PD#SWPL-2494

Problem:
serial port always print timestamp log

Solution:
remove this log output

Verify:
P321

Change-Id: I875dffab483269374b9939f556a3ed01e9d2b215
Signed-off-by: xiaoming.sui <xiaoming.sui@amlogic.com>

dts: GXL/TXL: adjust defendkey_reserved location [1/1]

PD#SWPL-2539

Problem:
defendkey_reserved have influenced on display
during the system boot up

Solution:
adjust defendkey_reserved node location

Verify:
GXL/TXL skt board verify pass

Change-Id: I5cf0245f9653e20224c4e3bab1f6f05527011210
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

DTS: p230 board config spdif out pin [3/3]

PD# SWPL-1223

Problem:
p230 board spdif out no audio sound

Solution:
config p230 board spdif out pin

Verify:
verify on p230

Change-Id: I0c35e6d526aab98955206f78322fcc873ff01b8c
Signed-off-by: Chaomin Zheng <chaomin.zheng@amlogic.com>

hdmitx: disable encryption hdcp1.4 fail [1/1]

PD#SWPL-2302

Problem:
Play online video,half an hour later, the TV shows
a pink screen and the sound is normal.

Solution:
Check hdcp1.4 status and disable encryption when fail.

Verify:
S922X

Change-Id: I6ce51824726b267d140750f9e9d80aa8bb921cac
Signed-off-by: Kaifu Hu <kaifu.hu@amlogic.com>

dv: fix the flickered problem [1/1]

PD#SWPL-1207

Problem:
fix the filckered problem when playing transition
video in sdr tv

Solution:
when dv core2 don't run, the reset can't be executed

Verify:
r321

Change-Id: I719325f1722589e02a40d46442258b0d1e3feb17
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

display: Modify the value of register afbc_gclk_ctrl [1/1]

PD#SWPL-2565

Problem:
The splash screen problem for first frame after starting up.

Solution:
Modify the value of register afbc_gclk_ctrl.

Verify:
u211

Change-Id: Ie1ddfade0566ff8cd571c43ba8490a8c277a8758
Signed-off-by: Peng Yixin <yixin.peng@amlogic.com>

dts: fix SD card read issue for g12a board [2/3]

PD#SWPL-2588

Problem:
g12a u220/u221 boad cann't read SD card

Solution:
auto detect revA and revB chip

Verify:
test pass on u220/u221 board

Change-Id: Ia153bb3f966fe2a58d5f3ed1bf1d3f610d00ff5a
Signed-off-by: Sandy Luo <sandy.luo@amlogic.com>

frame_sync: fix last few seconds of the DD+ stream are not smooth [4/4]

PD#SWPL-714

Problem:
The last few seconds of the DD+ stream are not smooth by DTV playback.

Solution:
check the apts and vpts both discontinue,then replay the stream.

Verify:
P321

Change-Id: I6cbbdecc052dfe9fef76b44f36545b231332ee12
Signed-off-by: Yinming Ding <yinming.ding@amlogic.com>

dvb: tuner: USB DVB tuner support from Google

PD#SWPL-932

Problem:
USB DVB Dongle search program Function is not implemented

Solution:
merge usb dvb tuner from kernel3.14
http://10.8.9.5/kernel/common/commit/?h=amlogic-3.14-dev&id=7af9c5c38efdc96f5d3235f17788232a630b3d32
fixed frontend.h structures

Verify:
Ampere P

Change-Id: I16d68c2507711eda43313619d210d05699abcc25
Signed-off-by: qi duan <qi.duan@amlogic.com>

scripts/dtc: Update to upstream version v1.4.5-3-gb1a60033c110

PD#SWPL-2193

This adds the following commits from upstream:

b1a60033c110 tests: Add a test for overlays syntactic sugar
737b2df39cc8 overlay: Add syntactic sugar version of overlays
497432fd2131 checks: Use proper format modifier for size_t
22a65c5331c2 dtc: Bump version to v1.4.5
c575d8059fff Add fdtoverlay to .gitignore
b6a6f9490d19 fdtoverlay: Sanity check blob size
8c1eb1526d2d pylibfdt: Use Python2 explicitly
ee3d26f6960b checks: add interrupts property check
c1e7738988f5 checks: add gpio binding properties check
b3bbac02d5e3 checks: add phandle with arg property checks
fe50bd1ecc1d fdtget: Split out cell list display into a new function
62d812308d11 README: Add a note about test_tree1.dts
5bed86aee9e8 pylibfdt: Add support for fdt_subnode_offset()
46f31b65b3b3 pylibfdt: Add support for fdt_node_offset_by_phandle()
a3ae43723687 pylibfdt: Add support for fdt_parent_offset()
a198af80344c pylibfdt: Add support for fdt_get_phandle()
b9eba92ea50f tests: Return a failure code when any tests fail
155faf6cc209 pylibfdt: Use local pylibfdt module
50e5cd07f325 pylibfdt: Add a test for use of uint32_t
ab78860f09f5 pylibfdt: Add stdint include to fix uint32_t
36f511fb1113 tests: Add stacked overlay tests on fdtoverlay
1bb00655d3e5 fdt: Allow stacked overlays phandle references
a33c2247ac8d Introduce fdt_setprop_placeholder() method
0016f8c2aa32 dtc: change default phandles to ePAPR style instead of both
e3b9a9588a35 tests: fdtoverlay unit test
42409146f2db fdtoverlay: A tool that applies overlays
aae22722fc8d manual: Document missing options
13ce6e1c2fc4 dtc: fix sprintf() format string error, again
d990b8013889 Makefile: Fix build on MSYS2 and Cygwin
51f56dedf8ea Clean up shared library compile/link options
21a2bc896e3d Suppress expected error message in fdtdump test
2a42b14d0d03 dtc: check.c fix compile error
a10cb3c818d3 Fix get_node_by_path string equality check
548aea2c436a fdtdump: Discourage use of fdtdump
c2258841a785 fdtdump: Fix over-zealous version check
9067ee4be0e6 Fix a few whitespace and style nits
e56f2b07be38 pylibfdt: Use setup.py to build the swig file
896f1c133265 pylibfdt: Use Makefile constructs to implement NO_PYTHON
90db6d9989ca pylibfdt: Allow setup.py to operate stand-alone
e20d9658cd8f Add Coverity Scan support
b04a2cf08862 pylibfdt: Fix code style in setup.py
1c5170d3a466 pylibfdt: Rename libfdt.swig to libfdt.i
580a9f6c2880 Add a libfdt function to write a property placeholder
ab15256d8d02 pylibfdt: Use the call function to simplify the Makefile
9f2e3a3a1f19 pylibfdt: Use the correct libfdt version in the module
e91c652af215 pylibfdt: Enable installation of Python module
8a892fd85d94 pylibfdt: Allow building to be disabled
741cdff85d3e .travis.yml: Add builds with and without Python library prerequisites
14c4171f4f9a pylibfdt: Use package_dir to set the package directory
89a5062ab231 pylibfdt: Use environment to pass C flags and files
4e0e0d049757 pylibfdt: Allow pkg-config to be supplied in the environment
6afd7d9688f5 Correct typo: s/pylibgfdt/pylibfdt/

Change-Id: Ib23ca90f1e34ed85db3aae9d223fc921e6f2114e
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: jiamin ma <jiamin.ma@amlogic.com>

deinterface: temporary remove afbc support on chip after g12a [1/1]

PD#172587

Problem:
afbc now support on chip txlx and g12a,
but we use cpu_after_eq(G12A) to judge
if afbc is support or not.

Solution:
use is_meson_g12a_cpu() replace cpu_after_eq(G12A).

Verify:
u200(g12a),t962x_r311

Change-Id: I3fb7ed54f7137fada97481177e40a2543cf8df9f
Signed-off-by: huaihao guo <huaihao.guo@amlogic.com>

osd: osd: a black line below the screen when play video [1/1]

PD#SWPL-2558

Problem:
a black horizontal line below the screen when play video

Solution:
set dummy data alpha

Verify:
verified on p321

Change-Id: I36dc924b9bc89f4f8ea61eb86c6f5bc9199e40ae
Signed-off-by: Jian Cao <jian.cao@amlogic.com>

osd: call osd_update_enable if needed [2/2]

PD#SWPL-2580

Problem:
The vd1 postblend bit in vpp misc is overwriten.

Solution:
osd: call osd_update_enable if needed

Verify:
verify by p212

Change-Id: I438848dc843ea370d65dc3c6b4befb32d1f2b5f8
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

video: vpp: add more check for vd1 postblend in vpp_misc [1/2]

PD#SWPL-2580

Problem:
The vd1 postblend bit in vpp misc is overwriten.

Solution:
add more check for vd1 postblend bit in vsync

Verify:
verify by p212

Change-Id: I367e920c13764af41446d7d759aaf8388fb08722
Signed-off-by: Brian Zhu <brian.zhu@amlogic.com>

osd: adjust free_scale_dst if interlaced [1/1]

PD#SWPL-2600

Problem:
osd display half menu when in 1080i

Solution:
osd: adjust free_scale_dst if interlaced

Verify:
verify by p212

Change-Id: Ie9faffbb5942faa317b380ca0cdbee072a30c01f
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>
Signed-off-by: Jian Cao <jian.cao@amlogic.com>

osd: call osd_update_enable directly if osd cursor [1/1]

PD#SWPL-2744

Problem:
osd mouse can't see before platform g12a

Solution:
call osd_update_enable directly if osd cursor

Verify:
verify by p212

Change-Id: Ia8488a5bd0f707de2a02aa2b74e4a07582ef7f60
Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>

deinterlace: there's a change to hang in shutdown [1/1]

PD#OTT-778

Problem:
1.kernel received reboot command, but hang in shutdown

Solution:
move tasklet_disable behind tasklet_kill

Verify:
P321

Change-Id: I994c21c5aeb42dbbb4e3b50ccac8376db4d4039d
Signed-off-by: Jihong Sui <jihong.sui@amlogic.com>

Conflicts:
	drivers/amlogic/media/deinterlace/deinterlace.c

fdto: peripheral driver support dtbo [1/4]

PD#SWPL-2193

Problem:
We cannot compile dtbo file in a way like
make ARCH=arm foo.dtbo

Solution:
Add dtbo target and reuse the dtb rules

Verify:
Locally verifed

Change-Id: I34b88e61b409defe553cf5ed1077c160b9a6f350
Signed-off-by: jiamin ma <jiamin.ma@amlogic.com>

fdto: peripheral driver support dtbo [2/4]

PD#SWPL-2193

Problem:
Node dummy-battery and dummy-charger are android version
dependent, and should be "fdt overlayed"

Solution:
Add fdt overlay file android_p_overlay_dt.dts, and configure
dummy-battery and dummy-charger in it

Verify:
Locally on P212 and R311

Change-Id: I75a27a0ad1253556cae5273f36e0eb828291fd73
Signed-off-by: Jianxiong Pan <jianxiong.pan@amlogic.com>
Signed-off-by: jiamin ma <jiamin.ma@amlogic.com>

dts: fdto: the fdt is damaged in booting process [1/1]

PD#SWPL-2960

Problem:
If the overlay dts refers to a node which does not exist in the base
device tree, the final fdt will be in a damaged state after doing fdt
overlay

Solution:
Use the standard overlay dts syntax to note node to be applied instead
of the google recommended one

Verify:
Locally on P230

Change-Id: Ibf45abff1348437bc3fc2745e6d955cc8292db46
Signed-off-by: Jiamin Ma <jiamin.ma@amlogic.com>

dv: fix the error hsize and vsize of dv core 2 [1/1]

PD#OTT-776

Problem:
dv core 2 get the error hsize and vsize from OSD module

Solution:
when opening 3 osd paths. we get the accurate the parameters again

Verify:
g12b s922

Change-Id: Ib6af084910c8cf1896060295c7cea75971cd86b6
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

codec_mm: show current tvp flag [1/2]

PD#OTT-937

Problem:
When kill mediacodec during playing drm, tvp memory not be freed

Solution:
Check tvp flag in kernel, free tvp memory if flag is not zero

Verify:
P212

Change-Id: I35cbb2808bf179710ec59bd5227995949946ee77
Signed-off-by: Tao Guo <tao.guo@amlogic.com>

Revert "arm: dts: gxl: replace watchdog with new version [1/1]"

This reverts commit d932cb0022.

Change-Id: Ie9af906663de4f49a5f21fe026d68e55238b3642

defendkey: G12A: support secure upgrade check [3/4]

PD#SWPL-2347

Problem:
G12A need to support secure upgrade check

Solution:
1.modify reserve memory mode
2.only use cpu0 in defendkey write process

Verify:
G12A skt board verify pass

Change-Id: Iad771381e959a79dcba7a0adb862295fa5ba5dee
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

dts: G12A: defendkey: support secure upgrade check [4/4]

PD#SWPL-2347

Problem:
G12A need to support secure upgrade check

Solution:
add defendkey support in all G12A dts

Verify:
G12A skt board verify pass

Change-Id: I7343c2c553dfe776eefcfff9ab3a270c87014118
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

emmc: modify device node name [1/1]

PD#SWPL-2719

Problem:
Can't idetify correctlly when move disk have multi
partition

Solution:
Remove the function of using the partition name as
the device node name

Verify:
test pass on tl1 ref board

Change-Id: I113e63f209c529149fb94b0bb10b0b254717c2bf
Signed-off-by: Ruixuan Li <ruixuan.li@amlogic.com>

arm: dts: gxl: replace watchdog with new version [1/1]

PD#SWPL-1600

Problem:
The current watchdog is not the upstream standard driver.

Solution:
Replace watchdog device tree to use the standard watchdog driver.

Verify:
S905X P215/P212 Android-32bit Kernel-32bit.

Change-Id: I972c8ebb0158caa2df393d9a2d687d9298181102
Signed-off-by: Bo Yang <bo.yang@amlogic.com>

watchdog: Change the feed watchdog mode [1/1]

PD#SWPL-2378

Problem:
Using Android to feed watchdog is not easy to debug the
crash problem, in addition, the Android does not open
the dog feeding service.

Solution:
Change the DTS configuration and change into driver feed watchdog.

Verify:
test pass on g12a-u200

Change-Id: Ie0a91fd8451fdccf3038ba6290a277c9048c52cd
Signed-off-by: Yingyuan Zhu <yingyuan.zhu@amlogic.com>

hdmitx: add parsing for non-standard dv edid [1/1]

PD#SWPL-1968

Problem:
some error edid need to be parsed

Solution:
add parsing for non-standard dv edid

Verify:
t962e (txlx)

Change-Id: Ia952ed59650fd0b1c665ca03175a38c1cf3ae5bb
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>

media: video: fix cvbs black dot issue [1/1]

PD#SWPL-1910

Problem:
Black dot on cvbsout when local play 4k

Solution:
Set limit rang when vpp output yuv for cvbs

Verify:
test pass on u200/s905x

Change-Id: Ia3e93078eb1a00d8c974bae8cc373a3a679f8b9f
Signed-off-by: Nian Jing <nian.jing@amlogic.com>

hdmitx: fix a resmue panic isse [1/1]

PD#SWPL-3188

Problem:
When HDMI cable is not connected(that is CVBS out), and system
may be panic after resume.

Solution:
Add NULL pointer protection check

Verify:
P212

Change-Id: I60818faaf7049667501e31990fa557b754ea7f1b
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>

dts: G12B: defendkey: support secure upgrade check [3/3]

PD#SWPL-2348

Problem:
G12B need to support secure upgrade check

Solution:
add defendkey support in all G12B dts

Verify:
G12B skt board verify pass

Change-Id: I2c3f51e761531cf2169dda483991b3d876039686
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

dts: GXL: defendkey: modify reserve memory mode [2/2]

PD#SWPL-2100

Problem:
GXL need to modify reserve memory mode

Solution:
remove defendkey reserved memory in GXL dts

Verify:
GXL skt board verify pass

Change-Id: Ie5ed01c6dd8f88c5594d6bc73f13282e535071a2
Signed-off-by: Zhongfu Luo <zhongfu.luo@amlogic.com>

cec: for support multi-logical address [1/1]

PD#SWPL-418

Problem:
cec: support multi-logical address

Solution:
if working on multi-logical address, enable two ip
1.enable cec_a, cec_b
2.enable two interrupt
3.enable two pinmux oa_7, ao_8
4.cec_a only send all msg
5.cec_b only receive all msg
6.discard ceca broadcast msg

Verify:
r311
r321
p321

Change-Id: I1dc93429876ede951657102bcd7d41a500946719
Signed-off-by: Yong Qin <yong.qin@amlogic.com>

cec: add device match for tl1 [1/1]

PD#172587

Problem:
add device match for tl1

Solution:
1.add cecb ver
2.add ceca status reg flag

Verify:
1.run TPM
2.run chip

Change-Id: I304abfd1d6f1f216f9f0c56ca19a8bdb2ccfeabb
Signed-off-by: Yong Qin <yong.qin@amlogic.com>

cec: update cec platform data for tl1 [1/1]

PD#172587

Problem:
the line check always return low.
the print of check too much.

Solution:
modify the cec gpio from 7 to 10.
modify the check line.

Verify:
tl1 x301 board

Change-Id: I09ae5eee455d83e51e65957cd293e07da1c0046a
Signed-off-by: hongmin hua <hongmin.hua@amlogic.com>

cec: auto shutdown case crash [1/1]

PD#SWPL-2258

Problem:
1.running autoshutdown cause device crashed

Solution:
1.optimize cec power on proble flow

Verify:
1.p212

Change-Id: Ia78c76cdb4b72a1a275628b3ad77ea6d71696d89
Signed-off-by: Yong Qin <yong.qin@amlogic.com>
2019-01-04 15:31:37 +09:00
Tetsuo Handa
fbb78e978a mm: don't warn about allocations which stall for too long
commit 400e22499d upstream.

Commit 63f53dea0c ("mm: warn about allocations which stall for too
long") was a great step for reducing possibility of silent hang up
problem caused by memory allocation stalls.  But this commit reverts it,
for it is possible to trigger OOM lockup and/or soft lockups when many
threads concurrently called warn_alloc() (in order to warn about memory
allocation stalls) due to current implementation of printk(), and it is
difficult to obtain useful information due to limitation of synchronous
warning approach.

Current printk() implementation flushes all pending logs using the
context of a thread which called console_unlock().  printk() should be
able to flush all pending logs eventually unless somebody continues
appending to printk() buffer.

Since warn_alloc() started appending to printk() buffer while waiting
for oom_kill_process() to make forward progress when oom_kill_process()
is processing pending logs, it became possible for warn_alloc() to force
oom_kill_process() loop inside printk().  As a result, warn_alloc()
significantly increased possibility of preventing oom_kill_process()
from making forward progress.

---------- Pseudo code start ----------
Before warn_alloc() was introduced:

  retry:
    if (mutex_trylock(&oom_lock)) {
      while (atomic_read(&printk_pending_logs) > 0) {
        atomic_dec(&printk_pending_logs);
        print_one_log();
      }
      // Send SIGKILL here.
      mutex_unlock(&oom_lock)
    }
    goto retry;

After warn_alloc() was introduced:

  retry:
    if (mutex_trylock(&oom_lock)) {
      while (atomic_read(&printk_pending_logs) > 0) {
        atomic_dec(&printk_pending_logs);
        print_one_log();
      }
      // Send SIGKILL here.
      mutex_unlock(&oom_lock)
    } else if (waited_for_10seconds()) {
      atomic_inc(&printk_pending_logs);
    }
    goto retry;
---------- Pseudo code end ----------

Although waited_for_10seconds() becomes true once per 10 seconds,
unbounded number of threads can call waited_for_10seconds() at the same
time.  Also, since threads doing waited_for_10seconds() keep doing
almost busy loop, the thread doing print_one_log() can use little CPU
resource.  Therefore, this situation can be simplified like

---------- Pseudo code start ----------
  retry:
    if (mutex_trylock(&oom_lock)) {
      while (atomic_read(&printk_pending_logs) > 0) {
        atomic_dec(&printk_pending_logs);
        print_one_log();
      }
      // Send SIGKILL here.
      mutex_unlock(&oom_lock)
    } else {
      atomic_inc(&printk_pending_logs);
    }
    goto retry;
---------- Pseudo code end ----------

when printk() is called faster than print_one_log() can process a log.

One of possible mitigation would be to introduce a new lock in order to
make sure that no other series of printk() (either oom_kill_process() or
warn_alloc()) can append to printk() buffer when one series of printk()
(either oom_kill_process() or warn_alloc()) is already in progress.

Such serialization will also help obtaining kernel messages in readable
form.

---------- Pseudo code start ----------
  retry:
    if (mutex_trylock(&oom_lock)) {
      mutex_lock(&oom_printk_lock);
      while (atomic_read(&printk_pending_logs) > 0) {
        atomic_dec(&printk_pending_logs);
        print_one_log();
      }
      // Send SIGKILL here.
      mutex_unlock(&oom_printk_lock);
      mutex_unlock(&oom_lock)
    } else {
      if (mutex_trylock(&oom_printk_lock)) {
        atomic_inc(&printk_pending_logs);
        mutex_unlock(&oom_printk_lock);
      }
    }
    goto retry;
---------- Pseudo code end ----------

But this commit does not go that direction, for we don't want to
introduce a new lock dependency, and we unlikely be able to obtain
useful information even if we serialized oom_kill_process() and
warn_alloc().

Synchronous approach is prone to unexpected results (e.g.  too late [1],
too frequent [2], overlooked [3]).  As far as I know, warn_alloc() never
helped with providing information other than "something is going wrong".
I want to consider asynchronous approach which can obtain information
during stalls with possibly relevant threads (e.g.  the owner of
oom_lock and kswapd-like threads) and serve as a trigger for actions
(e.g.  turn on/off tracepoints, ask libvirt daemon to take a memory dump
of stalling KVM guest for diagnostic purpose).

This commit temporarily loses ability to report e.g.  OOM lockup due to
unable to invoke the OOM killer due to !__GFP_FS allocation request.
But asynchronous approach will be able to detect such situation and emit
warning.  Thus, let's remove warn_alloc().

[1] https://bugzilla.kernel.org/show_bug.cgi?id=192981
[2] http://lkml.kernel.org/r/CAM_iQpWuPVGc2ky8M-9yukECtS+zKjiDasNymX7rMcBjBFyM_A@mail.gmail.com
[3] commit db73ee0d46 ("mm, vmscan: do not loop on too_many_isolated for ever"))

Link: http://lkml.kernel.org/r/1509017339-4802-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reported-by: Cong Wang <xiyou.wangcong@gmail.com>
Reported-by: yuwang.yuwang <yuwang.yuwang@alibaba-inc.com>
Reported-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Dave Hansen <dave.hansen@intel.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

[Resolved backport conflict due to missing 8225196, a8e9925, 9e80c71 and
 9a67f64 in 4.9 -- all of which modified this hunk being removed.]
Signed-off-by: Amit Shah <amit@kernel.org>

Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-13 09:20:26 +01:00
Mike Kravetz
447effd30f hugetlbfs: check for pgoff value overflow
commit 63489f8e82 upstream.

A vma with vm_pgoff large enough to overflow a loff_t type when
converted to a byte offset can be passed via the remap_file_pages system
call.  The hugetlbfs mmap routine uses the byte offset to calculate
reservations and file size.

A sequence such as:

  mmap(0x20a00000, 0x600000, 0, 0x66033, -1, 0);
  remap_file_pages(0x20a00000, 0x600000, 0, 0x20000000000000, 0);

will result in the following when task exits/file closed,

  kernel BUG at mm/hugetlb.c:749!
  Call Trace:
    hugetlbfs_evict_inode+0x2f/0x40
    evict+0xcb/0x190
    __dentry_kill+0xcb/0x150
    __fput+0x164/0x1e0
    task_work_run+0x84/0xa0
    exit_to_usermode_loop+0x7d/0x80
    do_syscall_64+0x18b/0x190
    entry_SYSCALL_64_after_hwframe+0x3d/0xa2

The overflowed pgoff value causes hugetlbfs to try to set up a mapping
with a negative range (end < start) that leaves invalid state which
causes the BUG.

The previous overflow fix to this code was incomplete and did not take
the remap_file_pages system call into account.

[mike.kravetz@oracle.com: v3]
  Link: http://lkml.kernel.org/r/20180309002726.7248-1-mike.kravetz@oracle.com
[akpm@linux-foundation.org: include mmdebug.h]
[akpm@linux-foundation.org: fix -ve left shift count on sh]
Link: http://lkml.kernel.org/r/20180308210502.15952-1-mike.kravetz@oracle.com
Fixes: 045c7a3f53 ("hugetlbfs: fix offset overflow in hugetlbfs mmap")
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Reported-by: Nic Losby <blurbdust@gmail.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Yisheng Xie <xieyisheng1@huawei.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-08 13:05:11 +01:00
Mike Kravetz
e5deaa5441 mm/hugetlb.c: don't call region_abort if region_chg fails
commit ff8c0c53c4 upstream.

Changes to hugetlbfs reservation maps is a two step process.  The first
step is a call to region_chg to determine what needs to be changed, and
prepare that change.  This should be followed by a call to call to
region_add to commit the change, or region_abort to abort the change.

The error path in hugetlb_reserve_pages called region_abort after a
failed call to region_chg.  As a result, the adds_in_progress counter in
the reservation map is off by 1.  This is caught by a VM_BUG_ON in
resv_map_release when the reservation map is freed.

syzkaller fuzzer (when using an injected kmalloc failure) found this
bug, that resulted in the following:

 kernel BUG at mm/hugetlb.c:742!
 Call Trace:
  hugetlbfs_evict_inode+0x7b/0xa0 fs/hugetlbfs/inode.c:493
  evict+0x481/0x920 fs/inode.c:553
  iput_final fs/inode.c:1515 [inline]
  iput+0x62b/0xa20 fs/inode.c:1542
  hugetlb_file_setup+0x593/0x9f0 fs/hugetlbfs/inode.c:1306
  newseg+0x422/0xd30 ipc/shm.c:575
  ipcget_new ipc/util.c:285 [inline]
  ipcget+0x21e/0x580 ipc/util.c:639
  SYSC_shmget ipc/shm.c:673 [inline]
  SyS_shmget+0x158/0x230 ipc/shm.c:657
  entry_SYSCALL_64_fastpath+0x1f/0xc2
 RIP: resv_map_release+0x265/0x330 mm/hugetlb.c:742

Link: http://lkml.kernel.org/r/1490821682-23228-1-git-send-email-mike.kravetz@oracle.com
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-08 13:05:11 +01:00
Pavel Tikhomirov
60b3d44f05 mm: cleancache: fix corruption on missed inode invalidation
commit 6ff38bd402 upstream.

If all pages are deleted from the mapping by memory reclaim and also
moved to the cleancache:

__delete_from_page_cache
  (no shadow case)
  unaccount_page_cache_page
    cleancache_put_page
  page_cache_delete
    mapping->nrpages -= nr
    (nrpages becomes 0)

We don't clean the cleancache for an inode after final file truncation
(removal).

truncate_inode_pages_final
  check (nrpages || nrexceptional) is false
    no truncate_inode_pages
      no cleancache_invalidate_inode(mapping)

These way when reading the new file created with same inode we may get
these trash leftover pages from cleancache and see wrong data instead of
the contents of the new file.

Fix it by always doing truncate_inode_pages which is already ready for
nrpages == 0 && nrexceptional == 0 case and just invalidates inode.

[akpm@linux-foundation.org: add comment, per Jan]
Link: http://lkml.kernel.org/r/20181112095734.17979-1-ptikhomirov@virtuozzo.com
Fixes: commit 91b0abe36a ("mm + fs: store shadow entries in page cache")
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
Reviewed-by: Vasily Averin <vvs@virtuozzo.com>
Reviewed-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-08 13:05:09 +01:00
Yu Zhao
3c470638b6 mm: use swp_offset as key in shmem_replace_page()
commit c1cb20d437 upstream.

We changed the key of swap cache tree from swp_entry_t.val to
swp_offset.  We need to do so in shmem_replace_page() as well.

Hugh said:
 "shmem_replace_page() has been wrong since the day I wrote it: good
  enough to work on swap "type" 0, which is all most people ever use
  (especially those few who need shmem_replace_page() at all), but
  broken once there are any non-0 swp_type bits set in the higher order
  bits"

Link: http://lkml.kernel.org/r/20181121215442.138545-1-yuzhao@google.com
Fixes: f6ab1f7f6b ("mm, swap: use offset of swap entry as key of swap cache")
Signed-off-by: Yu Zhao <yuzhao@google.com>
Reviewed-by: Matthew Wilcox <willy@infradead.org>
Acked-by: Hugh Dickins <hughd@google.com>
Cc: <stable@vger.kernel.org>	[4.9+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-05 19:42:41 +01:00
Hugh Dickins
dc62803e27 mm/khugepaged: collapse_shmem() do not crash on Compound
commit 06a5e1268a upstream.

collapse_shmem()'s VM_BUG_ON_PAGE(PageTransCompound) was unsafe: before
it holds page lock of the first page, racing truncation then extension
might conceivably have inserted a hugepage there already.  Fail with the
SCAN_PAGE_COMPOUND result, instead of crashing (CONFIG_DEBUG_VM=y) or
otherwise mishandling the unexpected hugepage - though later we might
code up a more constructive way of handling it, with SCAN_SUCCESS.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261529310.2275@eggly.anvils
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:38 +01:00
Hugh Dickins
8dcbb5f215 mm/khugepaged: collapse_shmem() without freezing new_page
commit 87c460a0bd upstream.

khugepaged's collapse_shmem() does almost all of its work, to assemble
the huge new_page from 512 scattered old pages, with the new_page's
refcount frozen to 0 (and refcounts of all old pages so far also frozen
to 0).  Including shmem_getpage() to read in any which were out on swap,
memory reclaim if necessary to allocate their intermediate pages, and
copying over all the data from old to new.

Imagine the frozen refcount as a spinlock held, but without any lock
debugging to highlight the abuse: it's not good, and under serious load
heads into lockups - speculative getters of the page are not expecting
to spin while khugepaged is rescheduled.

One can get a little further under load by hacking around elsewhere; but
fortunately, freezing the new_page turns out to have been entirely
unnecessary, with no hacks needed elsewhere.

The huge new_page lock is already held throughout, and guards all its
subpages as they are brought one by one into the page cache tree; and
anything reading the data in that page, without the lock, before it has
been marked PageUptodate, would already be in the wrong.  So simply
eliminate the freezing of the new_page.

Each of the old pages remains frozen with refcount 0 after it has been
replaced by a new_page subpage in the page cache tree, until they are
all unfrozen on success or failure: just as before.  They could be
unfrozen sooner, but cause no problem once no longer visible to
find_get_entry(), filemap_map_pages() and other speculative lookups.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261527570.2275@eggly.anvils
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Hugh Dickins
c2ca73b7ab mm/khugepaged: minor reorderings in collapse_shmem()
commit 042a308248 upstream.

Several cleanups in collapse_shmem(): most of which probably do not
really matter, beyond doing things in a more familiar and reassuring
order.  Simplify the failure gotos in the main loop, and on success
update stats while interrupts still disabled from the last iteration.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261526400.2275@eggly.anvils
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Hugh Dickins
5c0ecc2ba5 mm/khugepaged: collapse_shmem() remember to clear holes
commit 2af8ff2918 upstream.

Huge tmpfs testing reminds us that there is no __GFP_ZERO in the gfp
flags khugepaged uses to allocate a huge page - in all common cases it
would just be a waste of effort - so collapse_shmem() must remember to
clear out any holes that it instantiates.

The obvious place to do so, where they are put into the page cache tree,
is not a good choice: because interrupts are disabled there.  Leave it
until further down, once success is assured, where the other pages are
copied (before setting PageUptodate).

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261525080.2275@eggly.anvils
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Hugh Dickins
0dba3e5492 mm/khugepaged: fix crashes due to misaccounted holes
commit aaa52e3400 upstream.

Huge tmpfs testing on a shortish file mapped into a pmd-rounded extent
hit shmem_evict_inode()'s WARN_ON(inode->i_blocks) followed by
clear_inode()'s BUG_ON(inode->i_data.nrpages) when the file was later
closed and unlinked.

khugepaged's collapse_shmem() was forgetting to update mapping->nrpages
on the rollback path, after it had added but then needs to undo some
holes.

There is indeed an irritating asymmetry between shmem_charge(), whose
callers want it to increment nrpages after successfully accounting
blocks, and shmem_uncharge(), when __delete_from_page_cache() already
decremented nrpages itself: oh well, just add a comment on that to them
both.

And shmem_recalc_inode() is supposed to be called when the accounting is
expected to be in balance (so it can deduce from imbalance that reclaim
discarded some pages): so change shmem_charge() to update nrpages
earlier (though it's rare for the difference to matter at all).

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261523450.2275@eggly.anvils
Fixes: 800d8c63b2 ("shmem: add huge pages support")
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Mike Rapoport
9815b0fcec shmem: introduce shmem_inode_acct_block
commit 0f07969456 upstream.

The shmem_acct_block and the update of used_blocks are following one
another in all the places they are used.  Combine these two into a
helper function.

Link: http://lkml.kernel.org/r/1497939652-16528-3-git-send-email-rppt@linux.vnet.ibm.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Mike Rapoport
cae7ed256d shmem: shmem_charge: verify max_block is not exceeded before inode update
commit b1cc94ab2f upstream.

Patch series "userfaultfd: enable zeropage support for shmem".

These patches enable support for UFFDIO_ZEROPAGE for shared memory.

The first two patches are not strictly related to userfaultfd, they are
just minor refactoring to reduce amount of code duplication.

This patch (of 7):

Currently we update inode and shmem_inode_info before verifying that
used_blocks will not exceed max_blocks.  In case it will, we undo the
update.  Let's switch the order and move the verification of the blocks
count before the inode and shmem_inode_info update.

Link: http://lkml.kernel.org/r/1497939652-16528-2-git-send-email-rppt@linux.vnet.ibm.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
Cc: Pavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:37 +01:00
Hugh Dickins
10e458e6eb mm/khugepaged: collapse_shmem() stop if punched or truncated
commit 701270fa19 upstream.

Huge tmpfs testing showed that although collapse_shmem() recognizes a
concurrently truncated or hole-punched page correctly, its handling of
holes was liable to refill an emptied extent.  Add check to stop that.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261522040.2275@eggly.anvils
Fixes: f3f0e1d215 ("khugepaged: add support of collapse for tmpfs/shmem pages")
Signed-off-by: Hugh Dickins <hughd@google.com>
Reviewed-by: Matthew Wilcox <willy@infradead.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:36 +01:00
Hugh Dickins
b59b24fed5 mm/huge_memory: fix lockdep complaint on 32-bit i_size_read()
commit 006d3ff27e upstream.

Huge tmpfs testing, on 32-bit kernel with lockdep enabled, showed that
__split_huge_page() was using i_size_read() while holding the irq-safe
lru_lock and page tree lock, but the 32-bit i_size_read() uses an
irq-unsafe seqlock which should not be nested inside them.

Instead, read the i_size earlier in split_huge_page_to_list(), and pass
the end offset down to __split_huge_page(): all while holding head page
lock, which is enough to prevent truncation of that extent before the
page tree lock has been taken.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261520070.2275@eggly.anvils
Fixes: baa355fd33 ("thp: file pages support for split_huge_page()")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:36 +01:00
Hugh Dickins
ffdad597cc mm/huge_memory: splitting set mapping+index before unfreeze
commit 173d9d9fd3 upstream.

Huge tmpfs stress testing has occasionally hit shmem_undo_range()'s
VM_BUG_ON_PAGE(page_to_pgoff(page) != index, page).

Move the setting of mapping and index up before the page_ref_unfreeze()
in __split_huge_page_tail() to fix this: so that a page cache lookup
cannot get a reference while the tail's mapping and index are unstable.

In fact, might as well move them up before the smp_wmb(): I don't see an
actual need for that, but if I'm missing something, this way round is
safer than the other, and no less efficient.

You might argue that VM_BUG_ON_PAGE(page_to_pgoff(page) != index, page) is
misplaced, and should be left until after the trylock_page(); but left as
is has not crashed since, and gives more stringent assurance.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261516380.2275@eggly.anvils
Fixes: e9b61f1985 ("thp: reintroduce split_huge_page()")
Requires: 605ca5ede7 ("mm/huge_memory.c: reorder operations in __split_huge_page_tail()")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:36 +01:00
Konstantin Khlebnikov
fb732e62bf mm/huge_memory.c: reorder operations in __split_huge_page_tail()
commit 605ca5ede7 upstream.

THP split makes non-atomic change of tail page flags.  This is almost ok
because tail pages are locked and isolated but this breaks recent
changes in page locking: non-atomic operation could clear bit
PG_waiters.

As a result concurrent sequence get_page_unless_zero() -> lock_page()
might block forever.  Especially if this page was truncated later.

Fix is trivial: clone flags before unfreezing page reference counter.

This race exists since commit 6290602709 ("mm: add PageWaiters
indicating tasks are waiting for a page bit") while unsave unfreeze
itself was added in commit 8df651c705 ("thp: cleanup
split_huge_page()").

clear_compound_head() also must be called before unfreezing page
reference because after successful get_page_unless_zero() might follow
put_page() which needs correct compound_head().

And replace page_ref_inc()/page_ref_add() with page_ref_unfreeze() which
is made especially for that and has semantic of smp_store_release().

Link: http://lkml.kernel.org/r/151844393341.210639.13162088407980624477.stgit@buzz
Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:36 +01:00
Hugh Dickins
b48c29b1dd mm/huge_memory: rename freeze_page() to unmap_page()
commit 906f9cdfc2 upstream.

The term "freeze" is used in several ways in the kernel, and in mm it
has the particular meaning of forcing page refcount temporarily to 0.
freeze_page() is just too confusing a name for a function that unmaps a
page: rename it unmap_page(), and rename unfreeze_page() remap_page().

Went to change the mention of freeze_page() added later in mm/rmap.c,
but found it to be incorrect: ordinary page reclaim reaches there too;
but the substance of the comment still seems correct, so edit it down.

Link: http://lkml.kernel.org/r/alpine.LSU.2.11.1811261514080.2275@eggly.anvils
Fixes: e9b61f1985 ("thp: reintroduce split_huge_page()")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: <stable@vger.kernel.org>	[4.8+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2018-12-05 19:42:36 +01:00