Merge 4.9.65 into android-4.9
Changes in 4.9.65 tcp_nv: fix division by zero in tcpnv_acked() net: vrf: correct FRA_L3MDEV encode type tcp: do not mangle skb->cb[] in tcp_make_synack() netfilter/ipvs: clear ipvs_property flag when SKB net namespace changed bonding: discard lowest hash bit for 802.3ad layer3+4 net: cdc_ether: fix divide by 0 on bad descriptors net: qmi_wwan: fix divide by 0 on bad descriptors qmi_wwan: Add missing skb_reset_mac_header-call net: usb: asix: fill null-ptr-deref in asix_suspend vlan: fix a use-after-free in vlan_device_event() af_netlink: ensure that NLMSG_DONE never fails in dumps sctp: do not peel off an assoc from one netns to another one fealnx: Fix building error on MIPS net/sctp: Always set scope_id in sctp_inet6_skb_msgname crypto: dh - fix memleak in setkey crypto: dh - Fix double free of ctx->p ima: do not update security.ima if appraisal status is not INTEGRITY_PASS serial: omap: Fix EFR write on RTS deassertion serial: 8250_fintek: Fix finding base_port with activated SuperIO dmaengine: dmatest: warn user when dma test times out ocfs2: fix cluster hang after a node dies ocfs2: should wait dio before inode lock in ocfs2_setattr() ipmi: fix unsigned long underflow mm/page_alloc.c: broken deferred calculation coda: fix 'kernel memory exposure attempt' in fsync mm/pagewalk.c: report holes in hugetlb ranges Linux 4.9.65 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
+18
-9
@@ -284,28 +284,37 @@ EXPORT_SYMBOL(nr_online_nodes);
|
||||
int page_group_by_mobility_disabled __read_mostly;
|
||||
|
||||
#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
|
||||
|
||||
/*
|
||||
* Determine how many pages need to be initialized durig early boot
|
||||
* (non-deferred initialization).
|
||||
* The value of first_deferred_pfn will be set later, once non-deferred pages
|
||||
* are initialized, but for now set it ULONG_MAX.
|
||||
*/
|
||||
static inline void reset_deferred_meminit(pg_data_t *pgdat)
|
||||
{
|
||||
unsigned long max_initialise;
|
||||
unsigned long reserved_lowmem;
|
||||
phys_addr_t start_addr, end_addr;
|
||||
unsigned long max_pgcnt;
|
||||
unsigned long reserved;
|
||||
|
||||
/*
|
||||
* Initialise at least 2G of a node but also take into account that
|
||||
* two large system hashes that can take up 1GB for 0.25TB/node.
|
||||
*/
|
||||
max_initialise = max(2UL << (30 - PAGE_SHIFT),
|
||||
(pgdat->node_spanned_pages >> 8));
|
||||
max_pgcnt = max(2UL << (30 - PAGE_SHIFT),
|
||||
(pgdat->node_spanned_pages >> 8));
|
||||
|
||||
/*
|
||||
* Compensate the all the memblock reservations (e.g. crash kernel)
|
||||
* from the initial estimation to make sure we will initialize enough
|
||||
* memory to boot.
|
||||
*/
|
||||
reserved_lowmem = memblock_reserved_memory_within(pgdat->node_start_pfn,
|
||||
pgdat->node_start_pfn + max_initialise);
|
||||
max_initialise += reserved_lowmem;
|
||||
start_addr = PFN_PHYS(pgdat->node_start_pfn);
|
||||
end_addr = PFN_PHYS(pgdat->node_start_pfn + max_pgcnt);
|
||||
reserved = memblock_reserved_memory_within(start_addr, end_addr);
|
||||
max_pgcnt += PHYS_PFN(reserved);
|
||||
|
||||
pgdat->static_init_size = min(max_initialise, pgdat->node_spanned_pages);
|
||||
pgdat->static_init_pgcnt = min(max_pgcnt, pgdat->node_spanned_pages);
|
||||
pgdat->first_deferred_pfn = ULONG_MAX;
|
||||
}
|
||||
|
||||
@@ -332,7 +341,7 @@ static inline bool update_defer_init(pg_data_t *pgdat,
|
||||
if (zone_end < pgdat_end_pfn(pgdat))
|
||||
return true;
|
||||
(*nr_initialised)++;
|
||||
if ((*nr_initialised > pgdat->static_init_size) &&
|
||||
if ((*nr_initialised > pgdat->static_init_pgcnt) &&
|
||||
(pfn & (PAGES_PER_SECTION - 1)) == 0) {
|
||||
pgdat->first_deferred_pfn = pfn;
|
||||
return false;
|
||||
|
||||
+5
-1
@@ -142,8 +142,12 @@ static int walk_hugetlb_range(unsigned long addr, unsigned long end,
|
||||
do {
|
||||
next = hugetlb_entry_end(h, addr, end);
|
||||
pte = huge_pte_offset(walk->mm, addr & hmask);
|
||||
if (pte && walk->hugetlb_entry)
|
||||
|
||||
if (pte)
|
||||
err = walk->hugetlb_entry(pte, hmask, addr, next, walk);
|
||||
else if (walk->pte_hole)
|
||||
err = walk->pte_hole(addr, next, walk);
|
||||
|
||||
if (err)
|
||||
break;
|
||||
} while (addr = next, addr != end);
|
||||
|
||||
Reference in New Issue
Block a user