/* * Copyright (C) 2016 Chen-Yu Tsai * * This file is dual-licensed: you can use it either under the terms * of the GPL or the X11 license, at your option. Note that this dual * licensing only applies to this file, and not this project as a * whole. * * a) This file is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This file is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Or, alternatively, * * b) Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef _DT_BINDINGS_RST_SUN6I_A31_H_ #define _DT_BINDINGS_RST_SUN6I_A31_H_ #define RST_USB_PHY0 0 #define RST_USB_PHY1 1 #define RST_USB_PHY2 2 #define RST_AHB1_MIPI_DSI 3 #define RST_AHB1_SS 4 #define RST_AHB1_DMA 5 #define RST_AHB1_MMC0 6 #define RST_AHB1_MMC1 7 #define RST_AHB1_MMC2 8 #define RST_AHB1_MMC3 9 #define RST_AHB1_NAND1 10 #define RST_AHB1_NAND0 11 #define RST_AHB1_SDRAM 12 #define RST_AHB1_EMAC 13 #define RST_AHB1_TS 14 #define RST_AHB1_HSTIMER 15 #define RST_AHB1_SPI0 16 #define RST_AHB1_SPI1 17 #define RST_AHB1_SPI2 18 #define RST_AHB1_SPI3 19 #define RST_AHB1_OTG 20 #define RST_AHB1_EHCI0 21 #define RST_AHB1_EHCI1 22 #define RST_AHB1_OHCI0 23 #define RST_AHB1_OHCI1 24 #define RST_AHB1_OHCI2 25 #define RST_AHB1_VE 26 #define RST_AHB1_LCD0 27 #define RST_AHB1_LCD1 28 #define RST_AHB1_CSI 29 #define RST_AHB1_HDMI 30 #define RST_AHB1_BE0 31 #define RST_AHB1_BE1 32 #define RST_AHB1_FE0 33 #define RST_AHB1_FE1 34 #define RST_AHB1_MP 35 #define RST_AHB1_GPU 36 #define RST_AHB1_DEU0 37 #define RST_AHB1_DEU1 38 #define RST_AHB1_DRC0 39 #define RST_AHB1_DRC1 40 #define RST_AHB1_LVDS 41 #define RST_APB1_CODEC 42 #define RST_APB1_SPDIF 43 #define RST_APB1_DIGITAL_MIC 44 #define RST_APB1_DAUDIO0 45 #define RST_APB1_DAUDIO1 46 #define RST_APB2_I2C0 47 #define RST_APB2_I2C1 48 #define RST_APB2_I2C2 49 #define RST_APB2_I2C3 50 #define RST_APB2_UART0 51 #define RST_APB2_UART1 52 #define RST_APB2_UART2 53 #define RST_APB2_UART3 54 #define RST_APB2_UART4 55 #define RST_APB2_UART5 56 #endif /* _DT_BINDINGS_RST_SUN6I_A31_H_ */ ion value='9'>9space:mode:
authorHugh Dickins <hughd@google.com>2017-01-07 15:37:31 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-07 17:49:33 -0800
commitb0b9b3df27d100a975b4e8818f35382b64a5e35c (patch)
tree8d900d2be3801a7dd10c86c594b37e421167392c /net/core/fib_rules.c
parent87bc610730a944b49f1c53ab9f4230d85f35df0c (diff)
mm: stop leaking PageTables
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 953c66c2b22a ("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: 953c66c2b22a ("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>
Diffstat (limited to 'net/core/fib_rules.c')