From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754024AbcEWKgG (ORCPT ); Mon, 23 May 2016 06:36:06 -0400 Received: from mail-am1on0131.outbound.protection.outlook.com ([157.56.112.131]:20216 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752999AbcEWKgD (ORCPT ); Mon, 23 May 2016 06:36:03 -0400 X-Greylist: delayed 922 seconds by postgrey-1.27 at vger.kernel.org; Mon, 23 May 2016 06:36:03 EDT Authentication-Results: linux-foundation.org; dkim=none (message not signed) header.d=none;linux-foundation.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Davydov To: Andrew Morton CC: Johannes Weiner , Michal Hocko , , Subject: [PATCH 2/8] mm: clean up non-standard page->_mapcount users Date: Mon, 23 May 2016 13:20:23 +0300 Message-ID: <502f49000e0b63e6c62e338fac6b420bf34fb526.1463997354.git.vdavydov@virtuozzo.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: DB5PR06CA0038.eurprd06.prod.outlook.com (2a01:111:e400:52c2::48) To AM3PR08MB0579.eurprd08.prod.outlook.com (2a01:111:e400:c408::13) X-MS-Office365-Filtering-Correlation-Id: f15dedfa-0e75-4898-114f-08d382f3e341 X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0579;2:cKDdVPIA++JTUDXJdaw9EMWJShPHhYpPT/agN/Ix7BTr4opZ97HXZdz/rqYVgKsuY4MvTTEgngVK5z91nKwhqZRgLHA7lNlYceFSdga7P/eVqWaUN//OnWZ/lQmqTUd9d593ka241ys3Ege+KAJJsZfaczzOxllEODhGNVJEyg//ABCCJvrP2DlzCiYxm5L5;3:0yuHmKh2iUDVuj/6ZtmeyeNl3axe/ViLqJp3mvk2cCwA1ndkHpEu/9Cf4H+0JhHhvgJk0TMeiLq0HUwPZVcZkHSGNk35/cp0P1Pz4gbf3ejDyKH8FqgS/eMsQ4YqVSHB;25:j1CdvhK3Jr0pAXceY0ZK2NRlwJFDAQjy/XISTBpTd5Mgl277qeUtFvlvkAdnLuKB2iromCLj1Ooo8c41Nzdps5Q3zKgMTrmPBZWyPC1awkTzZiXLUw+R2obS2HRs75ylIogo2PjVfuVlRStPn01PoT5AuFgVRzANAeFl4N10yviysgRYd1Kl0LrCeCJi4oU3UZN1ZUs2aeTgEwutD0AV8z/nNIZTbxhCIqq0T9MGK4WepsL5AlGW2fMzfXbtM+xD9jHXxc4QuJTUXPSSYAHYrRiDnQUKc9OFaZL69NVVbyLSDkXkgB0WgoN3Bs6MEFHPdjOgllvQMr6/vXOpgR/NLPdqyqNxN/s8y0WpHaVTSAomDcTLUahGEm6GPdT3lhFF/wKSpCkD9/+iH06ejAqwCIbRbh7p8uqreO7vQtaAYiM= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0579; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041072)(6043046);SRVR:AM3PR08MB0579;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0579; X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0579;4:il3XKXVy+IHdnTZeXYzIif7/CYBHB3K51F9FegtfYYhDic/ftE+X90w1HDee5cJIksfhxCnXYQJomzLPhUisH/cZa8Tby90IfB804uEh4APrjNV3HBBdexSt2EOL2QcMAeApn8NCsrG9xIPdclCNlZR2AUhjA3Jjg7rujXPhW9g2ZUp2QgmTaOESP8JrW9ntOWXo140u6TEZ8WCGxADNei5ogyuiFtPM+XIQIM/R5TC3QSR7LLHPnfZNillgYQyfWg5bUm8X0ddM1+bLEsN0jq0tf5myHgbVjRLmi/TtXeDoluZjPd5EdnJqDwGdmFN2rEJmEU4pI7CC44pvnFnq8UWh9bjoS8Z4UTphD+A+I0yhgygQx+KureJ1ZEdIp8WqnyfY/obswP3dgHqjV7UCJwItgZUVsJXMopMkQ7NjUyA= X-Forefront-PRVS: 0951AB0A30 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6116002)(3846002)(19580405001)(8676002)(19580395003)(586003)(80792005)(36756003)(42186005)(76176999)(92566002)(86362001)(50226002)(110136002)(189998001)(4326007)(2906002)(81166006)(5008740100001)(33646002)(66066001)(229853001)(2950100001)(47776003)(50986999)(118296001)(48376002)(5003940100001)(5004730100002)(50466002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM3PR08MB0579;H:virtuozzo.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0579;23:PkStnD1oVpwvQIZxJE29D0IvvL0IPdgT0JoolJOXXR/IDjZdoCGs6HWN9SlnC48H93MIQAxtCUh36YkD4Bxl8h7xgDmJ3rbMtDeOhFUxHnEUz4AHmNgZ5+okIYe0PUc9oVaD/GJ4U6soF33MWL5Bbra7w3t2acxkIKG0WA9+XtdUDJjgk2XRuOXxy+f7n5wy/0LHT8/ckVOdYofUNbbMB8Z8hZXqZeJEQiftxelKFJWRQ33xOOWhIrzf5qWDIhGvmIn5QLJ3NvaaffvHKqhhdNslORzmUfca8yqeEu3+D+UIe9EercWItOmlllzdi+MBhiziQ+ZplZti9nro5XaldEGRaFmkroT5lbXqg5gjhdvHis5kuRy8/p0O230ClBkYo7ANUkHatqOFSVeKThxhmR+Lyot0f/Be8bsu1rKp5aDd5vIyNJS18eWWOi01Vmss8i7PJmWVmtBOzd8udQqZzsepikrv4tQFV8KosZRvqt8HHQ4a23Wl/asQiqtApAVIhsyAVHf+AQGLt2ZYDMk0yMM7IzPxi+Ucp8foXesOt9fAF+MS9yiTxbbvznBJWGx1sE2rZ/pQIpvG1j8U9C0dP7gd+RwzluXyt1FkbwvSpeulgZe7WzP/pil4H6xlplId+PmObLjh7LAHGTkceaGP3tSJLK3PUIraaE++04NjTye6qKITfB9niVTZRxJkd3BiEL1G4CKKK6+hVHXo4DESOB/eh6+1wDcbh0JtzoHDLJuHjOn/FpF6Tja2C34SrDQIBp1JSmAFoUiokR6TOFdlSAErBT/WQjRW/7LDWo3oDwCdQ7CRTIhf8tJEs4i3vLNGvqqBR3lF++uA1FKMKN03F5sCdBfbW5md55aPmbJf6PtpK6uOmT0o7jsmA92HQ1nZ X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0579;5:8QVY3lju4w3oN1NmGawwaUwtvRQ4d1oUD0VfPh55xpKCFWVM2lCEPFjn1Fbq7K6dcdWInn+VAovsYIy7cXZ7RY7+PrqBlGwr8uhKhL59esr1LkTVsQfO0jg3qq737rLKiIQsVD0fHWy+n/W91VcfdQ==;24:k90QYfPs0uFtpDi89fJVycA1CiFC/Y30oOIWypoordAAFwMMRmnG/HW5D0bsEekyyGEc6KIxMSIkPh/4rcO88HL/VF2HYOG7iEkQ1ffnUL4=;7:hBEwwon2aGTB19SRoHVLCMDLEeb2ap/2ypzfPHJsUzyFNePd2XyJuOUbzrXwQhGhRuFMCKlQiGrtu9XjP9v6oQ3WiXghUW6zHpJlp6z0QLEjaSf5mw7GpuNOH0/PrauU260twjR6TAuR4e/Gw3cDgteiZ6WIuDGYvP9Te2DL3gylmHdwXcJqqxpnEOJWcCyj;20:T/XUdWsycTe1p0uQ+mNXOFik3l1Tc+Wr5bNDDChTcdGNm0yjfXQxu7DMCxAEYv9405zvSG0NzCKgXBw9AVh+rgFf+yROGWeEkIUIlFIg/9eRIGBTdvXPsMK3IEczoX9cLgOM/RDuMwvIX7uZum/i5DessfM7o2+xWYeqfggycwk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2016 10:20:38.3540 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0579 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org - Add a proper comment to page->_mapcount. - Introduce a macro for generating helper functions. - Place all special page->_mapcount values next to each other so that readers can see all possible values and so we don't get duplicates. Signed-off-by: Vladimir Davydov --- include/linux/mm_types.h | 5 ++++ include/linux/page-flags.h | 73 ++++++++++++++++++++-------------------------- scripts/tags.sh | 3 ++ 3 files changed, 40 insertions(+), 41 deletions(-) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 3cc5977a9cab..16bdef7943e3 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -85,6 +85,11 @@ struct page { /* * Count of ptes mapped in mms, to show when * page is mapped & limit reverse map searches. + * + * Extra information about page type may be + * stored here for pages that are never mapped, + * in which case the value MUST BE <= -2. + * See page-flags.h for more details. */ atomic_t _mapcount; diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index e5a32445f930..9940ade6a25e 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -593,54 +593,45 @@ TESTPAGEFLAG_FALSE(DoubleMap) #endif /* - * PageBuddy() indicate that the page is free and in the buddy system - * (see mm/page_alloc.c). - * - * PAGE_BUDDY_MAPCOUNT_VALUE must be <= -2 but better not too close to - * -2 so that an underflow of the page_mapcount() won't be mistaken - * for a genuine PAGE_BUDDY_MAPCOUNT_VALUE. -128 can be created very - * efficiently by most CPU architectures. + * For pages that are never mapped to userspace, page->mapcount may be + * used for storing extra information about page type. Any value used + * for this purpose must be <= -2, but it's better start not too close + * to -2 so that an underflow of the page_mapcount() won't be mistaken + * for a special page. */ -#define PAGE_BUDDY_MAPCOUNT_VALUE (-128) - -static inline int PageBuddy(struct page *page) -{ - return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE; +#define PAGE_MAPCOUNT_OPS(uname, lname) \ +static __always_inline int Page##uname(struct page *page) \ +{ \ + return atomic_read(&page->_mapcount) == \ + PAGE_##lname##_MAPCOUNT_VALUE; \ +} \ +static __always_inline void __SetPage##uname(struct page *page) \ +{ \ + VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); \ + atomic_set(&page->_mapcount, PAGE_##lname##_MAPCOUNT_VALUE); \ +} \ +static __always_inline void __ClearPage##uname(struct page *page) \ +{ \ + VM_BUG_ON_PAGE(!Page##uname(page), page); \ + atomic_set(&page->_mapcount, -1); \ } -static inline void __SetPageBuddy(struct page *page) -{ - VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); - atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE); -} +/* + * PageBuddy() indicate that the page is free and in the buddy system + * (see mm/page_alloc.c). + */ +#define PAGE_BUDDY_MAPCOUNT_VALUE (-128) +PAGE_MAPCOUNT_OPS(Buddy, BUDDY) -static inline void __ClearPageBuddy(struct page *page) -{ - VM_BUG_ON_PAGE(!PageBuddy(page), page); - atomic_set(&page->_mapcount, -1); -} +/* + * PageBalloon() is set on pages that are on the balloon page list + * (see mm/balloon_compaction.c). + */ +#define PAGE_BALLOON_MAPCOUNT_VALUE (-256) +PAGE_MAPCOUNT_OPS(Balloon, BALLOON) extern bool is_free_buddy_page(struct page *page); -#define PAGE_BALLOON_MAPCOUNT_VALUE (-256) - -static inline int PageBalloon(struct page *page) -{ - return atomic_read(&page->_mapcount) == PAGE_BALLOON_MAPCOUNT_VALUE; -} - -static inline void __SetPageBalloon(struct page *page) -{ - VM_BUG_ON_PAGE(atomic_read(&page->_mapcount) != -1, page); - atomic_set(&page->_mapcount, PAGE_BALLOON_MAPCOUNT_VALUE); -} - -static inline void __ClearPageBalloon(struct page *page) -{ - VM_BUG_ON_PAGE(!PageBalloon(page), page); - atomic_set(&page->_mapcount, -1); -} - /* * If network-based swap is enabled, sl*b must keep track of whether pages * were allocated from pfmemalloc reserves. diff --git a/scripts/tags.sh b/scripts/tags.sh index f72f48f638ae..ed7eef24ef89 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh @@ -185,6 +185,9 @@ regex_c=( '/\