All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
To: Jason Baron <jbaron@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>, Paul Turner <pjt@google.com>,
	linux-kernel@vger.kernel.org,
	Bharata B Rao <bharata@linux.vnet.ibm.com>,
	Dhaval Giani <dhaval.giani@gmail.com>,
	Balbir Singh <balbir@linux.vnet.ibm.com>,
	Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>,
	Srivatsa Vaddagiri <vatsa@in.ibm.com>,
	Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>,
	Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>,
	Pavel Emelyanov <xemul@openvz.org>, Hu Tao <hutao@cn.fujitsu.com>,
	Mike Galbraith <efault@gmx.de>
Subject: jump_label defaults (was Re: [patch 00/17] CFS Bandwidth Control v7.1)
Date: Thu, 07 Jul 2011 22:36:14 +0200	[thread overview]
Message-ID: <1310070974.3282.678.camel@twins> (raw)
In-Reply-To: <20110707181535.GD2536@redhat.com>

[resend because I somehow managed to wreck the lkml address]

On Thu, 2011-07-07 at 14:15 -0400, Jason Baron wrote:
> We don't have to wait until jump_label_init() to make it take effect.
> 
> We could introduce something like: static_branch_default_false(&foo),
> and static_branch_default_true(&foo), which are set at compile time. I
> was waiting for a real world example before introducing it, but if this
> would solve your issue,  we can look at it. 

Hrm,. I can't seem to make that work, damn CPP for not being recursive.

The thing in question is the below patch, I'd need something like:

sed -ie 's/1)/true)' -e 's/0)/false)/' kernel/sched_features.h

#define SCHED_FEAT(name, enabled)	\
	#define static_branch_##name static_branch_default_##enabled
#include "sched_features.h"
#undef SCHED_FEAT

so that I can then do:

#define sched_feat(x)	\
	static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x]))

Otherwise there's no way to get the default thing related to x.

Also, it still needs an initializer for jump_label_key to get in the
correct state.

---
Subject: sched: Use jump_labels for sched_feat
From: Peter Zijlstra <a.p.zijlstra@chello.nl>
Date: Wed Jul 06 14:20:14 CEST 2011

static_branch() is disabled by default, but more sched_feat are enabled
by default, so invert the logic. Fixup the few stragglers on
late_initcall().

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-10afjk8n3eu30jytrhdpaluc@git.kernel.org
---
 kernel/sched.c |   33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

Index: linux-2.6/kernel/sched.c
===================================================================
--- linux-2.6.orig/kernel/sched.c
+++ linux-2.6/kernel/sched.c
@@ -71,6 +71,7 @@
 #include <linux/ctype.h>
 #include <linux/ftrace.h>
 #include <linux/slab.h>
+#include <linux/jump_label.h>
 
 #include <asm/tlb.h>
 #include <asm/irq_regs.h>
@@ -691,6 +692,7 @@ int runqueue_is_locked(int cpu)
 
 enum {
 #include "sched_features.h"
+	__SCHED_FEAT_NR
 };
 
 #undef SCHED_FEAT
@@ -710,16 +712,17 @@ const_debug unsigned int sysctl_sched_fe
 
 static __read_mostly char *sched_feat_names[] = {
 #include "sched_features.h"
-	NULL
 };
 
 #undef SCHED_FEAT
 
+static struct jump_label_key sched_feat_keys[__SCHED_FEAT_NR];
+
 static int sched_feat_show(struct seq_file *m, void *v)
 {
 	int i;
 
-	for (i = 0; sched_feat_names[i]; i++) {
+	for (i = 0; i < __SCHED_FEAT_NR; i++) {
 		if (!(sysctl_sched_features & (1UL << i)))
 			seq_puts(m, "NO_");
 		seq_printf(m, "%s ", sched_feat_names[i]);
@@ -752,17 +755,22 @@ sched_feat_write(struct file *filp, cons
 		cmp += 3;
 	}
 
-	for (i = 0; sched_feat_names[i]; i++) {
+	for (i = 0; i < __SCHED_FEAT_NR; i++) {
 		if (strcmp(cmp, sched_feat_names[i]) == 0) {
-			if (neg)
+			if (neg) {
 				sysctl_sched_features &= ~(1UL << i);
-			else
+				if (!jump_label_enabled(&sched_feat_keys[i]))
+					jump_label_inc(&sched_feat_keys[i]);
+			} else {
 				sysctl_sched_features |= (1UL << i);
+				if (jump_label_enabled(&sched_feat_keys[i]))
+					jump_label_dec(&sched_feat_keys[i]);
+			}
 			break;
 		}
 	}
 
-	if (!sched_feat_names[i])
+	if (i == __SCHED_FEAT_NR)
 		return -EINVAL;
 
 	*ppos += cnt;
@@ -785,6 +793,13 @@ static const struct file_operations sche
 
 static __init int sched_init_debug(void)
 {
+	int i;
+
+	for (i = 0; i < __SCHED_FEAT_NR; i++) {
+		if (!(sysctl_sched_features & (1UL << i)))
+			jump_label_inc(&sched_feat_keys[i]);
+	}
+
 	debugfs_create_file("sched_features", 0644, NULL, NULL,
 			&sched_feat_fops);
 
@@ -792,10 +807,14 @@ static __init int sched_init_debug(void)
 }
 late_initcall(sched_init_debug);
 
-#endif
+#define sched_feat(x) (!static_branch(&sched_feat_keys[__SCHED_FEAT_##x]))
+
+#else /* CONFIG_SCHED_DEBUG */
 
 #define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
 
+#endif /* CONFIG_SCHED_DEBUG */
+
 /*
  * Number of tasks to iterate in a single balance run.
  * Limited because this is done with IRQs disabled.



  reply	other threads:[~2011-07-07 20:36 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-07  5:30 [patch 00/17] CFS Bandwidth Control v7.1 Paul Turner
2011-07-07  5:30 ` [patch 01/17] sched: (fixlet) dont update shares twice on on_rq parent Paul Turner
2011-07-21 18:28   ` [tip:sched/core] sched: Don't " tip-bot for Paul Turner
2011-07-07  5:30 ` [patch 02/17] sched: hierarchical task accounting for SCHED_OTHER Paul Turner
2011-07-07  5:30 ` [patch 03/17] sched: introduce primitives to account for CFS bandwidth tracking Paul Turner
2011-07-07 13:48   ` Peter Zijlstra
2011-07-07 21:30     ` Paul Turner
2011-07-07  5:30 ` [patch 04/17] sched: validate CFS quota hierarchies Paul Turner
2011-07-07  5:30 ` [patch 05/17] sched: accumulate per-cfs_rq cpu usage and charge against bandwidth Paul Turner
2011-07-07  5:30 ` [patch 06/17] sched: add a timer to handle CFS bandwidth refresh Paul Turner
2011-07-07  5:30 ` [patch 07/17] sched: expire invalid runtime Paul Turner
2011-07-07  5:30 ` [patch 08/17] sched: add support for throttling group entities Paul Turner
2011-07-07  5:30 ` [patch 09/17] sched: add support for unthrottling " Paul Turner
2011-07-07  5:30 ` [patch 10/17] sched: allow for positional tg_tree walks Paul Turner
2011-07-07  5:30 ` [patch 11/17] sched: prevent interactions with throttled entities Paul Turner
2011-07-07  5:30 ` [patch 12/17] sched: prevent buddy " Paul Turner
2011-07-07  5:30 ` [patch 13/17] sched: migrate throttled tasks on HOTPLUG Paul Turner
2011-07-07  5:30 ` [patch 14/17] sched: throttle entities exceeding their allowed bandwidth Paul Turner
2011-07-07  5:30 ` [patch 15/17] sched: add exports tracking cfs bandwidth control statistics Paul Turner
2011-07-07  5:30 ` [patch 16/17] sched: return unused runtime on group dequeue Paul Turner
2011-07-07  5:30 ` [patch 17/17] sched: add documentation for bandwidth control Paul Turner
2011-07-07 11:13 ` [patch 00/17] CFS Bandwidth Control v7.1 Peter Zijlstra
2011-07-11  1:22   ` Hu Tao
2011-07-07 11:23 ` Ingo Molnar
2011-07-07 11:28   ` Peter Zijlstra
2011-07-07 14:38   ` Peter Zijlstra
2011-07-07 14:51     ` Ingo Molnar
2011-07-07 14:54       ` Peter Zijlstra
2011-07-07 14:56         ` Ingo Molnar
2011-07-07 16:23           ` Jason Baron
2011-07-07 17:20             ` Peter Zijlstra
2011-07-07 18:15               ` Jason Baron
2011-07-07 20:36                 ` Peter Zijlstra [this message]
2011-07-08  9:20                   ` jump_label defaults (was Re: [patch 00/17] CFS Bandwidth Control v7.1) Peter Zijlstra
2011-07-08 15:47                     ` Jason Baron
2011-07-07 16:52     ` [patch 00/17] CFS Bandwidth Control v7.1 Andi Kleen
2011-07-07 17:08       ` Peter Zijlstra
2011-07-07 17:59     ` Peter Zijlstra
2011-07-07 19:36       ` Jason Baron
2011-07-08  7:45       ` Paul Turner
2011-07-08  7:39     ` Paul Turner
2011-07-08 10:32       ` Peter Zijlstra
2011-07-09  7:34         ` Paul Turner
2011-07-10 18:12           ` Ingo Molnar
2011-07-07 14:06 ` Peter Zijlstra
2011-07-08  7:35   ` Paul Turner
2011-07-11  1:22 ` Hu Tao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1310070974.3282.678.camel@twins \
    --to=a.p.zijlstra@chello.nl \
    --cc=balbir@linux.vnet.ibm.com \
    --cc=bharata@linux.vnet.ibm.com \
    --cc=dhaval.giani@gmail.com \
    --cc=efault@gmx.de \
    --cc=hutao@cn.fujitsu.com \
    --cc=jbaron@redhat.com \
    --cc=kamalesh@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=pjt@google.com \
    --cc=seto.hidetoshi@jp.fujitsu.com \
    --cc=svaidy@linux.vnet.ibm.com \
    --cc=vatsa@in.ibm.com \
    --cc=xemul@openvz.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.