Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808229/?format=api
{ "id": 808229, "url": "http://patchwork.ozlabs.org/api/patches/808229/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170831105827.249029237@linutronix.de/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170831105827.249029237@linutronix.de>", "list_archive_url": null, "date": "2017-08-31T12:23:44", "name": "[21/25] xfrm: Replace hrtimer tasklet with softirq hrtimer", "commit_ref": null, "pull_url": null, "state": "not-applicable", "archived": true, "hash": "7c9494ce3151e632740cbf38ff2a10e3842d8e03", "submitter": { "id": 68517, "url": "http://patchwork.ozlabs.org/api/people/68517/?format=api", "name": "Anna-Maria Behnsen", "email": "anna-maria@linutronix.de" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170831105827.249029237@linutronix.de/mbox/", "series": [ { "id": 818, "url": "http://patchwork.ozlabs.org/api/series/818/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=818", "date": "2017-08-31T12:23:44", "name": null, "version": 1, "mbox": "http://patchwork.ozlabs.org/series/818/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808229/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808229/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xjhQT2kjyz9sNr\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 31 Aug 2017 22:24:49 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751905AbdHaMYf (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 31 Aug 2017 08:24:35 -0400", "from Galois.linutronix.de ([146.0.238.70]:60746 \"EHLO\n\tGalois.linutronix.de\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751896AbdHaMY3 (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 31 Aug 2017 08:24:29 -0400", "from localhost ([127.0.0.1] helo=hypnos.tec.linutronix.de)\n\tby Galois.linutronix.de with esmtp (Exim 4.80)\n\t(envelope-from <anna-maria@linutronix.de>)\n\tid 1dnOUI-0006t2-Ub; Thu, 31 Aug 2017 14:22:23 +0200" ], "Message-Id": "<20170831105827.249029237@linutronix.de>", "User-Agent": "quilt/0.63-1", "Date": "Thu, 31 Aug 2017 12:23:44 -0000", "From": "Anna-Maria Gleixner <anna-maria@linutronix.de>", "To": "LKML <linux-kernel@vger.kernel.org>", "Cc": "Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>,\n\tChristoph Hellwig <hch@lst.org>, keescook@chromium.org,\n\tJohn Stultz <john.stultz@linaro.org>,\n\tThomas Gleixner <tglx@linutronix.de>,\n\tSteffen Klassert <steffen.klassert@secunet.com>,\n\tHerbert Xu <herbert@gondor.apana.org.au>,\n\t\"David S. Miller\" <davem@davemloft.net>, netdev@vger.kernel.org", "Subject": "[PATCH 21/25] xfrm: Replace hrtimer tasklet with softirq hrtimer", "References": "<20170831105725.809317030@linutronix.de>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Disposition": "inline;\n\tfilename=xfrm_Replace_hrtimer_tasklet_with_softirq_hrtimer.patch", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Thomas Gleixner <tglx@linutronix.de>\n\nSwitch the timer to CLOCK_MONOTONIC_SOFT, which executed the timer\ncallback in softirq context and remove the hrtimer_tasklet.\n\nSigned-off-by: Thomas Gleixner <tglx@linutronix.de>\nSigned-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>\nCc: Steffen Klassert <steffen.klassert@secunet.com>\nCc: Herbert Xu <herbert@gondor.apana.org.au>\nCc: \"David S. Miller\" <davem@davemloft.net>\nCc: netdev@vger.kernel.org\n\n---\n include/net/xfrm.h | 2 +-\n net/xfrm/xfrm_state.c | 29 +++++++++++++++++------------\n 2 files changed, 18 insertions(+), 13 deletions(-)", "diff": "--- a/include/net/xfrm.h\n+++ b/include/net/xfrm.h\n@@ -213,7 +213,7 @@ struct xfrm_state {\n \tstruct xfrm_stats\tstats;\n \n \tstruct xfrm_lifetime_cur curlft;\n-\tstruct tasklet_hrtimer\tmtimer;\n+\tstruct hrtimer\t\tmtimer;\n \n \tstruct xfrm_state_offload xso;\n \n--- a/net/xfrm/xfrm_state.c\n+++ b/net/xfrm/xfrm_state.c\n@@ -418,7 +418,7 @@ static void xfrm_put_mode(struct xfrm_mo\n \n static void xfrm_state_gc_destroy(struct xfrm_state *x)\n {\n-\ttasklet_hrtimer_cancel(&x->mtimer);\n+\thrtimer_cancel(&x->mtimer);\n \tdel_timer_sync(&x->rtimer);\n \tkfree(x->aead);\n \tkfree(x->aalg);\n@@ -463,8 +463,8 @@ static void xfrm_state_gc_task(struct wo\n \n static enum hrtimer_restart xfrm_timer_handler(struct hrtimer *me)\n {\n-\tstruct tasklet_hrtimer *thr = container_of(me, struct tasklet_hrtimer, timer);\n-\tstruct xfrm_state *x = container_of(thr, struct xfrm_state, mtimer);\n+\tstruct xfrm_state *x = container_of(me, struct xfrm_state, mtimer);\n+\tenum hrtimer_restart ret = HRTIMER_NORESTART;\n \tunsigned long now = get_seconds();\n \tlong next = LONG_MAX;\n \tint warn = 0;\n@@ -528,7 +528,8 @@ static enum hrtimer_restart xfrm_timer_h\n \t\tkm_state_expired(x, 0, 0);\n resched:\n \tif (next != LONG_MAX) {\n-\t\ttasklet_hrtimer_start(&x->mtimer, ktime_set(next, 0), HRTIMER_MODE_REL);\n+\t\thrtimer_forward_now(&x->mtimer, ktime_set(next, 0));\n+\t\tret = HRTIMER_RESTART;\n \t}\n \n \tgoto out;\n@@ -545,7 +546,7 @@ static enum hrtimer_restart xfrm_timer_h\n \n out:\n \tspin_unlock(&x->lock);\n-\treturn HRTIMER_NORESTART;\n+\treturn ret;\n }\n \n static void xfrm_replay_timer_handler(unsigned long data);\n@@ -564,8 +565,8 @@ struct xfrm_state *xfrm_state_alloc(stru\n \t\tINIT_HLIST_NODE(&x->bydst);\n \t\tINIT_HLIST_NODE(&x->bysrc);\n \t\tINIT_HLIST_NODE(&x->byspi);\n-\t\ttasklet_hrtimer_init(&x->mtimer, xfrm_timer_handler,\n-\t\t\t\t\tCLOCK_BOOTTIME, HRTIMER_MODE_ABS);\n+\t\thrtimer_init(&x->mtimer, CLOCK_BOOTTIME_SOFT, HRTIMER_MODE_ABS);\n+\t\tx->mtimer.function = xfrm_timer_handler;\n \t\tsetup_timer(&x->rtimer, xfrm_replay_timer_handler,\n \t\t\t\t(unsigned long)x);\n \t\tx->curlft.add_time = get_seconds();\n@@ -1021,7 +1022,9 @@ xfrm_state_find(const xfrm_address_t *da\n \t\t\t\thlist_add_head_rcu(&x->byspi, net->xfrm.state_byspi + h);\n \t\t\t}\n \t\t\tx->lft.hard_add_expires_seconds = net->xfrm.sysctl_acq_expires;\n-\t\t\ttasklet_hrtimer_start(&x->mtimer, ktime_set(net->xfrm.sysctl_acq_expires, 0), HRTIMER_MODE_REL);\n+\t\t\thrtimer_start(&x->mtimer,\n+\t\t\t\t ktime_set(net->xfrm.sysctl_acq_expires, 0),\n+\t\t\t\t HRTIMER_MODE_REL);\n \t\t\tnet->xfrm.state_num++;\n \t\t\txfrm_hash_grow_check(net, x->bydst.next != NULL);\n \t\t\tspin_unlock_bh(&net->xfrm.xfrm_state_lock);\n@@ -1132,7 +1135,7 @@ static void __xfrm_state_insert(struct x\n \t\thlist_add_head_rcu(&x->byspi, net->xfrm.state_byspi + h);\n \t}\n \n-\ttasklet_hrtimer_start(&x->mtimer, ktime_set(1, 0), HRTIMER_MODE_REL);\n+\thrtimer_start(&x->mtimer, ktime_set(1, 0), HRTIMER_MODE_REL);\n \tif (x->replay_maxage)\n \t\tmod_timer(&x->rtimer, jiffies + x->replay_maxage);\n \n@@ -1236,7 +1239,9 @@ static struct xfrm_state *__find_acq_cor\n \t\tx->mark.m = m->m;\n \t\tx->lft.hard_add_expires_seconds = net->xfrm.sysctl_acq_expires;\n \t\txfrm_state_hold(x);\n-\t\ttasklet_hrtimer_start(&x->mtimer, ktime_set(net->xfrm.sysctl_acq_expires, 0), HRTIMER_MODE_REL);\n+\t\thrtimer_start(&x->mtimer,\n+\t\t\t ktime_set(net->xfrm.sysctl_acq_expires, 0),\n+\t\t\t HRTIMER_MODE_REL);\n \t\tlist_add(&x->km.all, &net->xfrm.state_all);\n \t\thlist_add_head_rcu(&x->bydst, net->xfrm.state_bydst + h);\n \t\th = xfrm_src_hash(net, daddr, saddr, family);\n@@ -1535,7 +1540,7 @@ int xfrm_state_update(struct xfrm_state\n \t\tmemcpy(&x1->lft, &x->lft, sizeof(x1->lft));\n \t\tx1->km.dying = 0;\n \n-\t\ttasklet_hrtimer_start(&x1->mtimer, ktime_set(1, 0), HRTIMER_MODE_REL);\n+\t\thrtimer_start(&x1->mtimer, ktime_set(1, 0), HRTIMER_MODE_REL);\n \t\tif (x1->curlft.use_time)\n \t\t\txfrm_state_check_expire(x1);\n \n@@ -1559,7 +1564,7 @@ int xfrm_state_check_expire(struct xfrm_\n \tif (x->curlft.bytes >= x->lft.hard_byte_limit ||\n \t x->curlft.packets >= x->lft.hard_packet_limit) {\n \t\tx->km.state = XFRM_STATE_EXPIRED;\n-\t\ttasklet_hrtimer_start(&x->mtimer, 0, HRTIMER_MODE_REL);\n+\t\thrtimer_start(&x->mtimer, 0, HRTIMER_MODE_REL);\n \t\treturn -EINVAL;\n \t}\n \n", "prefixes": [ "21/25" ] }