From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935405AbdEXMjr (ORCPT ); Wed, 24 May 2017 08:39:47 -0400 Received: from mail-by2nam03on0067.outbound.protection.outlook.com ([104.47.42.67]:63534 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756476AbdEXMjm (ORCPT ); Wed, 24 May 2017 08:39:42 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; From: Octavian Purdila To: Thomas Gleixner CC: Frederic Weisbecker , Peter Zijlstra , , Leonard Crestez , Octavian Purdila Subject: [RFC] tick/nohz: schedule TIMER_SOFTIRQ immediately for expired timers Date: Wed, 24 May 2017 15:39:24 +0300 Message-ID: <1495629564-28904-1-git-send-email-octavian.purdila@nxp.com> X-Mailer: git-send-email 2.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131401031803310541;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(336005)(39840400002)(39450400003)(39400400002)(39860400002)(39380400002)(39850400002)(39410400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(53936002)(33646002)(105606002)(106466001)(305945005)(38730400002)(110136004)(6916009)(189998001)(6666003)(5003940100001)(4326008)(50466002)(77096006)(48376002)(104016004)(50986999)(36756003)(39060400002)(47776003)(8656002)(54906002)(2906002)(356003)(81166006)(498600001)(50226002)(8676002)(8936002)(85426001)(5660300001)(86362001)(14773001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR03MB173;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD041;1:KMKrdEVXGFS08Bo7b5Bwyt9rMsGkdFIcXKSE1Nuxnrq5A6xT/Fy0WTVpWHRu6bTfxj7JVVG4rRRF9fd1oDzCs7UgA54fZzwFfcQDQqkBDZZauaMRKPUkQRhYWTGyM5yRr2gZuN3Khq6Ve2ZgNk6xd/NxBw/TY3moD0zpXcqLoT3xaopZI3XonKx2ULSDQVReQnNDcdtOIjKhGFjnn+RUQhPPHcE8xL7ISplzyVytk93tWFSZ4+i63R0gQp7sU7JmAkF9SvODOVkejNNY3PesMolicbTAb4Tk7LSfVKb1MZ+XzObqJm4ijfX1a03VQm0YNDkpSlFTRc+uKJlHaPtoV+QV+BKhNBQhFwcPWZ8CLwVpGRwdKeZb7siukldrRbDGfN/l5Lw/OZgnoCQcGhXw2AHyk55Rn8aurbxnAMxnyOAPiF//N54brlggDIybEx4OJSACFh6u2BBSWamY189jSAwglC5yZ5rj2fu0W4nwp9GlP/S4XlC9sbCPlNKNdNfXOALBipoyJlW9fvWO3HPcmciFSwM+ZD0qCFm82x2zrF/YhBrWVhzHLjXZTa7AWA2755sddfSNis5Y8OmgHCDfXRC3ZMNPfUCEYy6RXRiwCPaMZ2Tv5RZDyA0YeIiLA9fbov47PbVDentL08p7qdS/tEODni98FnE5B7M4HwZixHmZhrmoPO3sRrVio49CLpDRvEeEVy02V9/vK3YKqQDABzTavvc3pGUCxwC7nGkypj8= MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY2PR03MB173: X-MS-Office365-Filtering-Correlation-Id: 4d35efc3-4740-4911-91cd-08d4a2a1f238 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:BY2PR03MB173; X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB173;3:23E+jz3MGqB8USIe1oiY7FiBf4VINThdQm0oBqjsYRuwS8J5ssR2teRdMa26RxhHC4r4PZftYyj1KEceut+AEMBTl1OHl/In3A3fS9jl7Tq1dmB35XfOkZbUMTv8VSsb34U5q8fOUUt6ARU/pjcdjRrTvfLqYuCQvMXEe04dWMf7khMj7rJ1R4WBS4wd2IOpJFyTm3qp+ExA6+a6eLoyyxUBG2fs/Ix75Hl1d5nXdGF28/A1F12tJ9p6nq3brQyK8yBilgJUeeI0vRuWiq97PzwYiXtiRn1FMqxsmjBkn8cWUfrW5Brc0dctY6E90rqDkCOWPIJI2aF4pxFwzcRCwHXEhDngAxz8QH0RsVILzqe3BO5xzEezC3Y9lpsa9LE+Kcc2v4B780oi1Y9GjPbJuDlo8kYzpnBPR/crV2pfxN/x2hK49lr+sCVTRCA6Q3LZ;25:MxAdPxhO8u1qjnwMfym0hWOki1NThi5iNlw7VJ2Y5p7K1z7/NxeLeT2F3JDEIRT6qkx7NwcHTsNY/5f8eLHj9ivTwpWV5wVIkv/mdUhYY5AIJnYffF50/QUpxlH3pB7P23f44yL4GLnYui1E+BOglmTF1fBj48YoaOwF3l0uhNAeB0CBGfGQfEPx85yPfn70vybzkt4bGwrUH+2hI8s1vlbX8tqeykdeGKB8c9yKazQPuSVowNRI3btf9gIkcIOBBCBMLJE0dUGaR0NJulQTAwSTthE+tgg2FqOFIZsI9s7fmU9Nge5j4sme4SgNwxKO83iujEr8XPbFDgnPA9En48xWPDDKL9IrFG7vYhB8Rz1mkqPkp+lv1O06uSFAZP2wxuCR/p/eHJiX/+c+QQhQdQVNimT7uxSjy0N9VIX39w1CA6YgSMjTpXwSNCJIl4Jnw9oXrHtKg9l7f6KBZXcIkFvOHR0rKTl3wMd9vgYwlqw= X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB173;31:ZBEFcYejg/+HMfC0EPtUT0wVTrw+iJmQ8OlEAMdJsOaHpgPXi6hVLKDf/O2N9Ylxu5JVoBlUARyvnmIYaX/ne6OpmKCvWEcYB+kyE3dnxgFI7BtWArdZXRk4YBAEqNJWr1XwJXy0Gsh0riHM4tC95GD/Qrd7U7eZ6Io0OVNcYrcNkGP3idX+/0QZvKSVbATIhmo1RfzC9H+3RkGugl1Fmu2xp8x8hsGplEsny9Y9/ngKu5pz8aswVpgGmNEaa01cEtxAr5xYtUCnPyDT8n4wAg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095135)(601004)(2401047)(13017025)(13015025)(5005006)(13024025)(13023025)(8121501046)(13018025)(10201501046)(3002001)(93006095)(93001095)(6055026)(6096035)(20161123561025)(20161123556025)(20161123563025)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123559100);SRVR:BY2PR03MB173;BCL:0;PCL:0;RULEID:(400006);SRVR:BY2PR03MB173; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR03MB173;4:lSpbjVJYW8aDT19dW9X0HixzPDK7tpzaQpTXBKoYTfC?= =?us-ascii?Q?dudEiMTxzKG5yexscNFwYh3YeKSO1rXeifKx4Y5xwiVoBiS0KK+9SxPEYSUq?= =?us-ascii?Q?/BcNN2FkfzcB5PLYb7nMAI4QUS0scZsjDy0+TPDn8ocxK8JfPuwNRaYEt4X4?= =?us-ascii?Q?ZMsRF9flqkIEhTiHDJRzce1l7ZGtowCvFhVcviMGBKigV225mAjGMb5BL5A0?= =?us-ascii?Q?ou52ocj0rmO2hqcgY7+hu07n005e2ShqDGzlaKoyNOqfo2uY8xbZShdFcqf3?= =?us-ascii?Q?rLcyRnxPOSAw7bDU93+h/ZYNJiXJlULCe85PE4dO9Hq4b8lDUqdl1453GtZQ?= =?us-ascii?Q?JOU8yQQTUuhyGWvMBVfy6zSXgPLeajCZWvfi6Lp1XHPd/BlhIIxMExjbdtNL?= =?us-ascii?Q?gX3ASi9VmpcCz8qJtMIOVnEap9WigejIdjcYHXFIUeR9NHJoQCJFQvSAgXEB?= =?us-ascii?Q?cKjLvWEEUaPNMwDmD1I0NAirqa6OyGWJIAHNrgzVsH0leD1TPIhjiYBRnJKi?= =?us-ascii?Q?lWVlbTTWqD2uoG+exSqbBSGexpl02n5fI/OETjZpZkejST3gcnwRA0A8HjM9?= =?us-ascii?Q?CVQ6guOy1/e1ZlRyWfvD6+bCrNi7L8jGgZNseP2mPIv2grOakWhY4tKc7v/A?= =?us-ascii?Q?tHcPYjobldx7biI5DgGZpYXXLmf+/jnD25x/1CH2rH9sC8rFxkGi6ffqQKjv?= =?us-ascii?Q?HmFaYadaPj3hFOzjfrSzeDO9ARizAzBpiO4dkDkXdJbuXxLsGjw/Ipbj9dc+?= =?us-ascii?Q?ksfcp9a9MQQ2dB7x/4YdcKihK7rEOcgpv1XQ3Iupr0h1a9dgigEtctlOUN8l?= =?us-ascii?Q?Mh0R1+kmTlfN7Iho3ldZaK9/XVlbxGTTXiIf5jiXc+6xnR4YltjOcn9yeBp7?= =?us-ascii?Q?8b3cJQpDiHFaKet+T2StVdY8VfgTXkZIj1/YXDe5IuKJxoK++LqrFDkQU/ZU?= =?us-ascii?Q?OG8m7lg0okmG7a4RWbqo5Due0MfCAKlW/XOISYg=3D=3D?= X-Forefront-PRVS: 031763BCAF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR03MB173;23:rIhFe5nCC+jLb6giojWuSxf1e6q60z8zE92LmQCCq6?= =?us-ascii?Q?pmr11g6Msm9eWowWuv2o4zyX+p9rhEJjd5/V9bnrf+Y4AW2P109xytynWKtq?= =?us-ascii?Q?UO2V9QES9WOzVN2t6s7Awi31q5KYCzUp54gziHaWD9gR7G7N70+D5mqDxgAX?= =?us-ascii?Q?ajIdUWu0dVYLqzYYZBVXzkUik7PV2BSlfUJs1cO0Al7a61Ojp6a/v3lqh1Gq?= =?us-ascii?Q?XwJEtO13dkLD9QQZWBnhOO36irdb/WkChhE7twha1mcamM0w+J8iQf+cyxG9?= =?us-ascii?Q?d1KiDp5lXtd5gwxq9peGq2OL3w/zSFBb6GfgW2GGnuuF8K6lAEI0Rs5Bbq7X?= =?us-ascii?Q?FyaItEJ+/mPnYackLjzgK5B04Nh45l7Y7pD2NYZ5FDXfDrkOiU5d785sUq+9?= =?us-ascii?Q?sBovCkXQazOt8qmWur8Tn7MjA3AIJCl/oUjUXX8MFL0BVDKr/QM5HuswbRLt?= =?us-ascii?Q?DJdhyzKWv4q2WDbREGic1xGnJ43Euj1cqMk3Fr/N5IWSiF0L/kEYe98EnfD5?= =?us-ascii?Q?n81MhfHGZCZKEO0tASIa5E9+X4DoLF7RsdasGWVDb+NYrcoOCqxB2fzJxCkH?= =?us-ascii?Q?/jeTTXj0tvS6R3DAdVlV1JPBhGJMYJVD/O2vxKapZFjM7rDhMqGpmuvmZHs4?= =?us-ascii?Q?mQTo7kb3lCJWLVfycOsfX91VmOZEdSpMe5tYDISwBE6oH2uB+e4ANNeSXOZV?= =?us-ascii?Q?iAwWDX+i7kS6SBjU1qCeb8c/kXwbCnLDpXkew7fgLL/V0D9hFpNRBgSIfCht?= =?us-ascii?Q?nDBOz9s5juGGeYgjsfLstL/ZWkipu7719fXLfrABxT85/TonyAzfdj+eDPSQ?= =?us-ascii?Q?R+YyPJ7k0/ccXd6GFqnY/ovVm31c5Ia1Ssn9tbfTKYggEyjHp7anpx+7XMjY?= =?us-ascii?Q?q+XQ+D7h7g7Y0kHYwO9csYte9cXqTcV6DQNW69X+Qxj4xrALCGMMklb3UXsR?= =?us-ascii?Q?bfOp6hNGk+jCmXIwzATFxXu3CpEvswBiobZvcoXQ9pmBEjV79/lsqPnROTMl?= =?us-ascii?Q?BePrYyUUDmP4CWtT5Jz6Wr3UDmEPwyO3xuTjNDNfgjRrfYlvktSDV3Zb31hG?= =?us-ascii?Q?Nz6GjvpnfIwfzuwfjGbG3pie13nczcQMTGNxuLOtq05K5Equ/y+DwckhVvlX?= =?us-ascii?Q?AJgxo6I/74+jWjlqvEIskJZYyGWV6kmc7JzKHT92G6CzQ3lFBWQtYfZkZnpT?= =?us-ascii?Q?2cBRMTor+slqphF5TV2kS2hp/zbHBFzK/1WndjwdsRwHBjIfYP8CRzoA=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB173;6:t5TlRQZaFOfyjtcQFQG4r4KGXUQhNmBo4v1E3Caq4pAzNL3RGrWPQim70sEOy+ZNSK00Gf2oLPkVTs6GFKeXbfhcnyunJ9eSUEKAD6CItW+DouY3DMZo6S1Gfmcz6TYZTlTRU7RKHkx6cc+HI9uljQ1GCOIY0Cu6Tr4hFaGESPfBDdQFlLFB7hM+J3IWwbE1V6U1B531wDWFrigPY+W8lIFUJ7TFdw3po3KR/HloARM43qmkwOfHQfXQd1XBoB2IZV9ejKnUYkRzHdKD2S7jSGqMUH3CErI6pzabjCONunVCFoQHb9jVpcuSWGUkUcoOSYCKX8mLGDaxT2wuPqbc25dZpOb+/5TJV2vf4s33CNMrn2OmUO7oZJIMMOMCuFYBh4Zkj/kW+ThiddcdVfAQVsvKXGzbQsXBP3ryHkebKVGk131lVvnHqvTppSaESIQh3Z3BQu065fl/VZU0HhHIMDjK4P41n9UEsRxv3tfUFptpNMgUI4PG7AZkIdAfB40s+kn5Wz61nB5SaJjywo29PQ==;5:kf5cFLAQ7DgyEa+bJ8YhFxi+potVmwGcoZGQZ9fgko1euD+TjUmFfAXyyc5M3Z0xYLEIwJO5ItdXvwnC+3INLwKVpzo8lGx1hVx9nT1uwWgRzh3pTrbKd7t6sCIS8zIS2bEGZw5TZNGP82EZPtxlIhgRk8VZXWhHjSt0X6iU/+R5ovxlBio6wfoQ09Ffd0no;24:sX3b5xhiCPtZjGjTlcPIDvEAFE/rOGyVrlYgKYJjWiZfoMJC2xF//kQK0i/B4NJ9AWFqVHC4ZxHOVDmbOmsR2kkb1RmsGdXuxt4vDZGeszk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB173;7:JfB+hScLnlikE9GXn9Lant2/nbCbpN+SzT2foI0BIc3M6FbAvLMs1+SfRa31rbMIv/9/gmjN8ISR66NEoEZ8gO9MPNT0LnyKvAFuBaMQDNnEze+IyZrUGdYwMtmkV45sLLDZJ07C1q1bJrSVXCGfdgvkCcXcY/R9h5wvU9TkXmLEQMIc3ZNrXkU/erBLNBQ8j/J3EeQ4lC259ICndFjB/ln7OcqM1B93rqUIRxenneluF9UCu7beNQn0lb9M8i2sCQjd+/BDzvJrMf8OpjH1uSoaDybMoyq8+A9vZhVGYN54Yi05mGApVcCumMyE8d5nrY8egpF+OEzfwy187aN1Aw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2017 12:39:40.1438 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB173 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, when detecting expired timers in tick_nohz_stop_sched_tick we just schedule a new hrtimer and let its handler to schedule TIMER_SOFITRQ. This can lead to indefinite timer stalls if the system is busy with a stream of interrupts that have the period shorter or about the same with the value of the minimum delay of the current clocksource driver: -> idle -> IRQ (time = x) -> irq_exit -> tick_nohz_irq_exit -> tick_nohz_stop_sched_tick -> tick_nohz_restart -> cancel hrtimer (set clocksource event to x + max_delay) -> set clocksource to x + min_delay ... -> IRQ (time = y, where y < x + min_delay) -> irq_exit -> tick_nohz_irq_exit -> tick_nohz_stop_sched_tick -> tick_nohz_restart -> cancel hrtimer (set clocksource event to x + max_delay) -> set clocksource to y + min_delay So, instead of prodding the hrtimer interrupt, schedule TIMER_SOFTIRQ since we know that timers are ready. The timers will run either at the next interrupt or from ksoftirq so no hrtimer interrupt is needed. This also avoids spurious programming of the clocksource in this scenario. Signed-off-by: Octavian Purdila --- kernel/time/tick-sched.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 3bcb61b..0a30278 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -727,9 +727,16 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts, * * Only once we exit the idle loop will we re-enable the tick, * see tick_nohz_idle_exit(). + * + * Also, make sure we schedule TIMER_SOFTIRQ now instead of + * relying on the hrtimer interrupt to do it to avoid + * postponing processing of expired timers. If we have a + * constant stream of interrupts with a period shorter than + * the minimum delay of the current clocksource we can end up + * postponing the timers indefinitely. */ if (delta == 0) { - tick_nohz_restart(ts, now); + raise_softirq(TIMER_SOFTIRQ); goto out; } } -- 2.7.4