From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933092AbcBYLSD (ORCPT ); Thu, 25 Feb 2016 06:18:03 -0500 Received: from mail-by2on0076.outbound.protection.outlook.com ([207.46.100.76]:40779 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933038AbcBYLR6 (ORCPT ); Thu, 25 Feb 2016 06:17:58 -0500 Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=caviumnetworks.com; From: Robert Richter To: Marc Zyngier , Will Deacon , Catalin Marinas , Greg Kroah-Hartman , Thomas Gleixner , Jason Cooper CC: Tirumalesh Chalamarla , , , , Robert Richter Subject: [PATCH 2/2] irqchip, gicv3-its, cma: Use CMA for allocation of large device tables Date: Thu, 25 Feb 2016 12:02:44 +0100 Message-ID: <1456398164-16864-3-git-send-email-rrichter@caviumnetworks.com> X-Mailer: git-send-email 2.7.0.rc3 In-Reply-To: <1456398164-16864-1-git-send-email-rrichter@caviumnetworks.com> References: <1456398164-16864-1-git-send-email-rrichter@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [78.53.84.114] X-ClientProxiedBy: VI1PR02CA0042.eurprd02.prod.outlook.com (25.162.7.180) To BN3PR0701MB1605.namprd07.prod.outlook.com (25.163.38.28) X-Microsoft-Exchange-Diagnostics: 1;BN3PR0701MB1605;2:jYB57hzccE3cL9Xj6n7hRAGqZx6UjsnX7b7ux1ut5KBRzjKOvbD2OavR+Vcdh6M7Qjk+lUm9dHNAHZAGuQ59S7ozNGL9jIBQ1Rlgz6RTzHOYR15CxQjbiKS6paUPA4Smc60paz9DyiGK67IG+Quarw==;3:YMcoqT0Z3/pKj6Vd6VIFYTIrko29E5Nz7/H0wpPxtW/vZrrQft7xzW/F3xMujSHjfImDPIbfxzUBt56qeKEIV9LZS1j6owXmHRMfI6Xb/dx7poB6bw3pdf+2wYt97zIC;25:A963RyDqpwp9u31h4+OoEfjgSRzYsYsiSmDd8Q+g5+zR1W6Wsl7ORJ+HFqytCISBp7yDEPqXID/FhPofSDRU2i2e3pcbk6xdoYkX0Uw007sEwuImMZoxMrlcoSXvxGcpa6fqxqkh/EBAxGidtXc7V+NDDpfT/1KN5RF5ccXxm/1F+iE14z19/sO6B6+tlpeCJoK0cWAVj6fK8nAxq3NxE8O41wicIVWjpFw//CfTeTAtpRazyoB5qmLg9Z1J3ZURqG783SqkZgcC3VBDo09zJuRzWVrinHR0Pwu0eR9Wdu9BMjlQC2Y70tW84E7GjGNyrUgqmfiNhZunwoNzBm0NSA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0701MB1605; X-MS-Office365-Filtering-Correlation-Id: 7c4f955f-9ab1-4107-627b-08d33dd34b62 X-Microsoft-Exchange-Diagnostics: 1;BN3PR0701MB1605;20:cfD5vGEX2htZwc/sXdfhx3L7qHyUHo9CMpKRyri5+06DbcwgDDkDws6H1uBS0lSE48wBWNIpngIHLQavjhtjPmq13OS1JBnAJios6z3gI4+X90FqMQLYL8sXvLuvPjSCjw7xPD9mJZF7uLiumUQL3S6DXzl0j3FovHW1CecgPoUXWctoK0A0j6QLXkdIMR0asR4wDo7QeG9sWrBdO5baeeUAoeYlrGYwHY1i8rEzv/9e5+usrTPY3kbZ0mzfQjGRDLYwamhb+GddG+l3SvSscVyPbQm0ucJNhAz8yNcqufE1D4xMDqqogYi8H8va085/hOBf7xeWRqTrf0fRPq5b5wVtbHrP062yWgZEyMk2tTCZ+blgvclFv9zI/5NFtZOgHzALxJQFSKPC2m5AAK8WcU1HhMzXvscdiJWGP4fWoNILsg2Y+mBAjXmlMTEiucvUTuf1d7UeJnBG0bTnDm1HiJ4DFTn07PT97R/LMxJXTF6Ar7WxEl2DmfPSUAk9HzKB/z+ZDD44ME7PEHa7tVyE7G459l9+iOEv8j/QkJz6oe1rkJPHvNBULYo/Hqu3g1JE1NsImA706dJE0BrQWbW0BhptKTp+1d/q7GwbMitTOTE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:BN3PR0701MB1605;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0701MB1605; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0701MB1605;4:6DskLWPZMV/lDvhsfjuR0p+irzruaGzxr4WcqgBxptvCH4mI24NTBIwZ/MMyskMZdnCH4Lk9iXFfT6XQ/25TJS2KAF2RXUvAjPLbdSWKRHz1vdBt6YyOLvn/ZX9+BEzpumNTzG/72gedkFB/l7SzD1JnEZ5zpS98wXrpz+DEfDj6UR2JwDIuaJyd2BAcFy0oPHKrD2ZbH5lI3GP6ngiifuqxxNp382QCvhKRCHUEBILOYagSLGCaffMadsnwNNDzbTFzqF+i63y9BT2MJlMjvwZAJt8HrIXScUQfKO5ZXk6dOJdO/j2FWApXSCIYPoM10aGMDmP8nTMkKX1KtUuh5X/5mCuClkoRZnOZ2Mwcqx0l3RUblBwY+k+xSxP7nsY1 X-Forefront-PRVS: 08635C03D4 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(48376002)(42186005)(122386002)(33646002)(50226001)(5008740100001)(47776003)(50466002)(76176999)(50986999)(229853001)(5001770100001)(1096002)(4326007)(5001960100002)(36756003)(5003940100001)(2906002)(586003)(6116002)(19580405001)(3846002)(19580395003)(189998001)(40100003)(2950100001)(77096005)(575784001)(66066001)(5004730100002)(87976001)(92566002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR0701MB1605;H:rric.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0701MB1605;23:IjIXsF8bTPmWzDYRNo389UpMq8KdgjP0azjeDU7?= =?us-ascii?Q?Bw5YXKBfiTdWBGD9wqD0nwJpMy1btpoxI30VnSM578Lh7JGczw8KpmxqJP8K?= =?us-ascii?Q?ObA2HmlfIQBZyjOfpEAeY0ITbCPIfC78amMq/45q1hdizYV6jnY0dV/Fej9J?= =?us-ascii?Q?WcTwcKJWJVoPuIuj9x/z05xuSjVR3abcpzrD2GVg+/LEKIs2Y4sQsr8RoeqS?= =?us-ascii?Q?ze8ZlgolvGs2rlXCbOAbbO5fZrbxXlplhmupJZ0egVRZF2yylqaA/2ezejUo?= =?us-ascii?Q?FDvK/dcYOUr/YrFGvPPhROXTJ5ROxxvwfoNXIuTOCUtkAas+8K+fpRdstJVE?= =?us-ascii?Q?5m/jo6TdG+wAGi4Oc9BOEuc/K7Ug5oiN59h61xtj3xSaHJLs+uP1+F0iCAPH?= =?us-ascii?Q?c82/FjdaxewkfXtxTlB5iSQVadw1xAOOXqzSJEkJf2XJgcKxR/vo/txzR+fa?= =?us-ascii?Q?qGitUwZlXJGONNuu9kEvkmTvnCI6LjIRaL+hafc/jGTRVGi72EZe9UVOtoQb?= =?us-ascii?Q?pG/HIWzaM96kcqt0mqJxCXzdR4sVuWVYoD1vAaVv2iFVV+z7w9P6eKM/fCmg?= =?us-ascii?Q?RY/zCdb4ywmbR4oTcCL19M+ajg1KRNtOevowXs8NkSnT5BpBrHnVTZOHl2fZ?= =?us-ascii?Q?nMZsuAg1X2dz7Mx7GHdtT3Ug1v53QSjxPXYmxFpHoGqbm2PZ1niv3o/ZRq22?= =?us-ascii?Q?j/uWJPcn/1llCUjXPgRrPUljS0COMBp79nEzsoX7Z0O7DV5jlUPLrcq1dSzI?= =?us-ascii?Q?7ejuxg9DastqqhowRF9O9jvaFa3gMZfzZmGjta3//ZG6zzova5NRdEeJlcX2?= =?us-ascii?Q?Ovg2K5bgMxCpYJseFVNE5j8P/B/lEt0ua52VuPNgsfsyCIM6EEjZvmgFmUVv?= =?us-ascii?Q?UXu2/fFHXeDb7lw91OSVSNrpsXlO7AGRrJz3tYYzlqcAsv0xAPldoe/J1wp4?= =?us-ascii?Q?DTFulfUfy9wVpFPwKSE8R7RAVpSoqU7m6LFGtG1vTdQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0701MB1605;5:tkibnMqeZ8IavOF3M4SwL89yzZPyl2EMq0wR3KXqNbNlCDG2SYputHlClkUVPYd920qU6vpuQ7d5YEIyiF8WzEEyNsE3nP30uGmsu9IPQXs1ghTUvuKl8QscDJAw0jKrPMf/F2VLAWJK4d48B1GiTg==;24:TrtdCSOtwuoHshx/iQS6PQ953Cb2Vgqd1btBqYa5ytnjCmKJKu5nLZBZYd5aTUoI1tkqptjKY5IUVCmTAWFrIVWQaVGWbH9wSfFAZe7slVY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2016 11:03:28.0254 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0701MB1605 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Robert Richter The gicv3-its device table may have a size of up to 16MB. With 4k pagesize the maximum size of memory allocation is 4MB. Use CMA for allocation of large tables. Signed-off-by: Robert Richter --- drivers/irqchip/irq-gic-v3-its.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 443ba8892f6f..c8914026d0e4 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -860,6 +861,7 @@ static int its_alloc_tables(struct its_node *its) int alloc_pages; u64 tmp; void *base; + struct page *page; if (type == GITS_BASER_TYPE_NONE) continue; @@ -881,13 +883,8 @@ static int its_alloc_tables(struct its_node *its) */ order = max(get_order((1UL << ids) * entry_size), order); - if (order >= MAX_ORDER) { - order = MAX_ORDER - 1; - pr_warn("ITS@0x%lx: Device Table too large, reduce its page order to %u\n", - its->phys_base, order); - } } - +retry_alloc: alloc_size = (1 << order) * PAGE_SIZE; alloc_pages = (alloc_size / psz); if (alloc_pages > GITS_BASER_PAGES_MAX) { @@ -897,8 +894,22 @@ static int its_alloc_tables(struct its_node *its) its->phys_base, order, alloc_pages); } - base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order); + if (order >= MAX_ORDER) { + page = dma_alloc_from_contiguous(NULL, 1 << order, 0); + base = page ? page_address(page) : NULL; + if (!base) { + order = MAX_ORDER - 1; + pr_warn("ITS@0x%lx: Device table too large, reduce its page order to %u\n", + its->phys_base, order); + goto retry_alloc; + } + } else { + base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, order); + } + if (!base) { + pr_err("ITS@0x%lx: Failed to allocate device table\n", + its->phys_base); err = -ENOMEM; goto out_free; } @@ -970,11 +981,12 @@ static int its_alloc_tables(struct its_node *its) goto out_free; } - pr_info("ITS: allocated %d %s @%lx (psz %dK, shr %d)\n", + pr_info("ITS: allocated %d %s @%lx (psz %dK, shr %d)%s\n", (int)(alloc_size / entry_size), its_base_type_string[type], (unsigned long)virt_to_phys(base), - psz / SZ_1K, (int)shr >> GITS_BASER_SHAREABILITY_SHIFT); + psz / SZ_1K, (int)shr >> GITS_BASER_SHAREABILITY_SHIFT, + order >= MAX_ORDER ? " using CMA" : ""); } return 0; -- 2.7.0.rc3