<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.linux.rt.user">
    <title>gmane.linux.rt.user</title>
    <link>http://blog.gmane.org/gmane.linux.rt.user</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8354"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8348"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8341"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8326"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8320"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8310"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8309"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8297"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8296"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8290"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8288"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8276"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8274"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8273"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8270"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8266"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8265"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8256"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8254"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.rt.user/8253"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8354">
    <title>[PATCH] RFC - rt-tools: Detect whether numa is available at build time</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8354</link>
    <description>&lt;pre&gt;This is a preliminary hack, I need to clean it up a little, but incase you
want to give it a try, here is the alpha version.

Note - I stole this methodology from tools/perf

Signed-off-by: John Kacur &amp;lt;jkacur&amp;lt; at &amp;gt;redhat.com&amp;gt;
---
 Makefile                 |   33 +++++++++++++++++++++++++++------
 config/feature-tests.mak |    8 ++++++++
 config/utilities.mak     |    7 +++++++
 3 files changed, 42 insertions(+), 6 deletions(-)
 create mode 100644 config/feature-tests.mak
 create mode 100644 config/utilities.mak

diff --git a/Makefile b/Makefile
index 3a82407..33f5027 100644
--- a/Makefile
+++ b/Makefile
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -16,9 +16,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; srcdir?= $(prefix)/src
 
 machinetype = $(shell $(CC) -dumpmachine | \
     sed -e 's/-.*//' -e 's/i.86/i386/' -e 's/mips.*/mips/' -e 's/ppc.*/powerpc/')
-ifneq ($(filter x86_64 i386 ia64 mips powerpc,$(machinetype)),)
-NUMA := 1
-endif
 
 CFLAGS ?= -D_GNU_SOURCE -Wall -Wno-nonnull -Isrc/include
 LDFLAGS ?=
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,9 +28,33 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; else
 CFLAGS+= -O0 -g
 endif
 
-ifeq ($(NUMA),1)
-CFLAGS += -DNUMA
-NUMA_LIBS = -lnuma
+ifeq ("$(origin O)", "command line")
+OUTPUT := $(O)/
+endif
+
+ifneq ($(OUTPUT),)
+# check that the output directory actually exists
+OUTDIR := $(shell cd $(OUTPUT) &amp;amp;&amp;amp; /bin/pwd)
+$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
+endif
+
+include config/utilities.mak
+include config/feature-tests.mak
+
+ifeq ($(NUMA),0)
+NO_NUMA=0
+endif
+
+ifdef NO_NUMA
+CFLAGS += -DNO_NUMA_SUPPORT
+else
+ifneq ($(call try-cc,$(SOURCE_NUMA),-lnuma),y)
+msg := $(warning numa not found. Install numactl-devel to build with numa support);
+CFLAGS += -DNO_NUMA_SUPPORT
+else
+CFLAGS += -DNUMA
+NUMA_LIBS = -lnuma
+endif
 endif
 
 VPATH= src/cyclictest:
diff --git a/config/feature-tests.mak b/config/feature-tests.mak
new file mode 100644
index 0000000..8fb61ea
--- /dev/null
+++ b/config/feature-tests.mak
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+ifndef NO_NUMA
+define SOURCE_NUMA
+int main(void)
+{
+return numa_available();
+}
+endef
+endif
diff --git a/config/utilities.mak b/config/utilities.mak
new file mode 100644
index 0000000..da7c434
--- /dev/null
+++ b/config/utilities.mak
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+# try-cc
+# Usage: option = $(call try-cc, source-to-build, cc-options)
+try-cc = $(shell sh -c  \
+'TMP="$(OUTPUT)$(TMPOUT).$$$$";  \
+ echo "$(1)" |  \
+ $(CC) -x c - $(2) -o "$$TMP" &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; echo y; \
+ rm -f "$$TMP"')
&lt;/pre&gt;</description>
    <dc:creator>John Kacur</dc:creator>
    <dc:date>2012-05-25T23:39:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8348">
    <title>[ANNOUNCE] 3.0.32-rt52</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8348</link>
    <description>&lt;pre&gt;
Dear RT Folks,

I'm pleased to announce the 3.0.32-rt52 stable release.


This release is just an update to the new stable 3.0.32 version
and no RT specific changes have been made.


You can get this release via the git tree at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git

  Head SHA1: 63166b1a384148473180f7bef83e71409e38de14


Or to build 3.0.32-rt52 directly, the following patches should be applied:

  http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.xz

  http://www.kernel.org/pub/linux/kernel/v3.0/patch-3.0.32.xz

  http://www.kernel.org/pub/linux/kernel/projects/rt/3.0/patch-3.0.32-rt52.patch.xz



Enjoy,

&lt;/pre&gt;</description>
    <dc:creator>Steven Rostedt</dc:creator>
    <dc:date>2012-05-22T20:19:36</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8341">
    <title>[ANNOUNCE] 3.2.18-rt29</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8341</link>
    <description>&lt;pre&gt;
Dear RT Folks,

I'm pleased to announce the 3.2.18-rt29 stable release.


This release is just an update to the new stable 3.2.18 version
and no RT specific changes have been made.


You can get this release via the git tree at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git

  Head SHA1: c96da77dcbdad05e0d707f443328e708f7cb024a


Or to build 3.2.18-rt29 directly, the following patches should be applied:

  http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.xz

  http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.2.18.xz

  http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/patch-3.2.18-rt29.patch.xz



Enjoy,

&lt;/pre&gt;</description>
    <dc:creator>Steven Rostedt</dc:creator>
    <dc:date>2012-05-22T15:01:48</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8326">
    <title>Non-free firmware and proprietary Radeon driver on OSADL kernel</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8326</link>
    <description>&lt;pre&gt;
Hello everybody out there!

I use OSADL last stable real-time kernel from Pengutronix
(&amp;lt;http://pengutronix.de/software/linux-rt/debian_en.html&amp;gt;) on a computer
which configuration is given in the end of this message.

On this computer, I am using Debian Squeeze (6.0), and, because I have
to do some live recording combined with MIDI playing, I need to use a
real-time kernel. As I am using Debian stable, I want to use the most
stable kernel. Therefore, I have chosen OSADL kernel.

But I am experiencing some troubles, linked with my graphic card.
Tested on the classic kernel, I need to install “firmware-linux-nonfree”
and the proprietary Catalyst driver for my graphic card. If not, then
power consumption is too important, then too much heat is dissipated and
display freezes after few minutes. To install the proprietary driver, I
have done the following:

# aptitude install fglrx-source fglrx-driver fglrx-glx fglrx-control
fglrx-atieventsd module-assistant build-essential linux-headers-2.6
# module-assistant a-i fglrx
# aticonfig --inital

When I use the classic kernel, everything goes fine.

During the installation of the real-time kernel, the configuration of
the package which should replace “firmware-linux-nonfree” –
unfortunately, I have forgotten its name – have failed. Also, when I run
the real-time kernel, it is the open-source driver that is in use. As a
consequence, after few minutes, the display freezes.

I guess the first step is to configure the equivalent of
“firmware-linux-nonfree”. Unfortunately, I do not have a clue on how to
do this. As Pengutronix advises to use this mailing list, I come here to
ask if anybody can help me in achieving this.

Regards.

Yoann

The configuration of my computer:

– Case: Fractal 3R;
– power supply: Corsair VX 450W;
– fan: 120mm Noctua NF-S12B ULN;
– motherboard: Gigabyte H55M-USB3 (µATX LGA1156+DDR3+PCI-E);
– processor: Intel Core i5 760 (2.8 QuadCore LGA1156);
– radiator: Noctua NH-U9B SE2 775/1156/1366;
– memory: 2x2 = 4 Go DDR3-1333 PC10600 Kingston;
– graphic card: MSI R4350-MD512H/D3 Radeon HD 4350 512MB;
– audio card: M-AUDIO Delta Audiophile 24/96 PCI;
– SSD unit: 120 Go SATA SSD Intel X25-M Postville MLC;
– hard-drive: 1.5 To SATA WD Green 64 Mo cache;
– CD/DVD/Blu-Ray drive: burner CD/DVD LG Black 10X BD-ROM 16X DVD-ROM.
&lt;/pre&gt;</description>
    <dc:creator>Yoann LE BARS</dc:creator>
    <dc:date>2012-05-18T22:54:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8320">
    <title>Real time micro benchmark suite - thread priority fix</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8320</link>
    <description>&lt;pre&gt;Not sure whether Real time micro benchmark suite is still being 
maintained at http://sourceforge.net/projects/rtmicrobench. The latest 
code from sourceforge has issues while running rtmb_c tests. It fails 
complaining about not being able to set thread priority.  Here's a fix 
for it.

https://github.com/vsubbiah/rtmb/commit/2a6714030a4009b50b76e99a83bf4b042cc82780

Thanks,
Venkat
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Venkat Subbiah</dc:creator>
    <dc:date>2012-05-17T21:15:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8310">
    <title>[PATCH -rt] MIPS: Octeon: convert smp_reserve_lock to raw spinlock</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8310</link>
    <description>&lt;pre&gt;From: Yong Zhang &amp;lt;yong.zhang&amp;lt; at &amp;gt;windriver.com&amp;gt;

Because __cpu_disable is called in atomic context and spinlock
is a mutex on -rt.

Signed-off-by: Yong Zhang &amp;lt;yong.zhang0&amp;lt; at &amp;gt;gmail.com&amp;gt;
---
 arch/mips/cavium-octeon/smp.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
index ef9c34a..473c72b 100644
--- a/arch/mips/cavium-octeon/smp.c
+++ b/arch/mips/cavium-octeon/smp.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -257,7 +257,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; DEFINE_PER_CPU(int, cpu_state);
 
 extern void fixup_irqs(void);
 
-static DEFINE_SPINLOCK(smp_reserve_lock);
+static DEFINE_RAW_SPINLOCK(smp_reserve_lock);
 
 static int octeon_cpu_disable(void)
 {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -266,7 +266,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int octeon_cpu_disable(void)
 if (cpu == 0)
 return -EBUSY;
 
-spin_lock(&amp;amp;smp_reserve_lock);
+raw_spin_lock(&amp;amp;smp_reserve_lock);
 
 set_cpu_online(cpu, false);
 cpu_clear(cpu, cpu_callin_map);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -277,7 +277,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static int octeon_cpu_disable(void)
 flush_cache_all();
 local_flush_tlb_all();
 
-spin_unlock(&amp;amp;smp_reserve_lock);
+raw_spin_unlock(&amp;amp;smp_reserve_lock);
 
 return 0;
 }
&lt;/pre&gt;</description>
    <dc:creator>Yong Zhang</dc:creator>
    <dc:date>2012-05-17T10:15:09</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8309">
    <title>[PATCH][UPSTREAM]net,RT:Remove preemption disabling in netif_rx()</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8309</link>
    <description>&lt;pre&gt;1)enqueue_to_backlog() (called from netif_rx) should be
  bind to a particluar CPU. This can be achieved by
  disabling migration. No need to disable preemption

2)Fixes crash "BUG: scheduling while atomic: ksoftirqd"
  in case of RT.
  If preemption is disabled, enqueue_to_backog() is called
  in atomic context. And if backlog exceeds its count,
  kfree_skb() is called. But in RT, kfree_skb() might
  gets scheduled out, so it expects non atomic context.

3)When CONFIG_PREEMPT_RT_FULL is not defined,
 migrate_enable(), migrate_disable() maps to
 preempt_enable() and preempt_disable(), so no
 change in functionality in case of non-RT.

-Replace preempt_enable(), preempt_disable() with
 migrate_enable(), migrate_disable() respectively
-Replace get_cpu(), put_cpu() with get_cpu_light(),
 put_cpu_light() respectively

Signed-off-by: Priyanka Jain &amp;lt;Priyanka.Jain&amp;lt; at &amp;gt;freescale.com&amp;gt;
Acked-by: Rajan Srivastava &amp;lt;Rajan.Srivastava&amp;lt; at &amp;gt;freescale.com&amp;gt;
---
 Testing: Tested successfully on p4080ds(8-core SMP system)  

 net/core/dev.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 452db70..4017820 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2940,7 +2940,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int netif_rx(struct sk_buff *skb)
 struct rps_dev_flow voidflow, *rflow = &amp;amp;voidflow;
 int cpu;
 
-preempt_disable();
+migrate_disable();
 rcu_read_lock();
 
 cpu = get_rps_cpu(skb-&amp;gt;dev, skb, &amp;amp;rflow);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2950,13 +2950,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int netif_rx(struct sk_buff *skb)
 ret = enqueue_to_backlog(skb, cpu, &amp;amp;rflow-&amp;gt;last_qtail);
 
 rcu_read_unlock();
-preempt_enable();
+migrate_enable();
 } else
 #endif
 {
 unsigned int qtail;
-ret = enqueue_to_backlog(skb, get_cpu(), &amp;amp;qtail);
-put_cpu();
+ret = enqueue_to_backlog(skb, get_cpu_light(), &amp;amp;qtail);
+put_cpu_light();
 }
 return ret;
 }
&lt;/pre&gt;</description>
    <dc:creator>Priyanka Jain</dc:creator>
    <dc:date>2012-05-17T04:05:11</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8297">
    <title>[PATCH 1/2] V3: cyclictest: clean up getopt_long() parameters</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8297</link>
    <description>&lt;pre&gt;
V3: unchanged from V2

cyclictest getopt_long() parameter clean up.
Clean up before following patch which will add a new option.

  Some elements of long_options were not in alphabetical order.

  Some elements of optstring were not in alphabetical order.

  '-e', '--latency' was missing help text

  short form of --duration ('D') was missing from optstring

  Change a few instances of leading spaces to tabs.

  Add white space to long_options to improve readability.

  Some cases of the switch processing the result of
    getopt_long() were not in alphabetical order.

  Did _not_ clean up option value parsing and processing.

Signed-off-by: Frank Rowand &amp;lt;frank.rowand&amp;lt; at &amp;gt;am.sony.com&amp;gt;
---
 src/cyclictest/cyclictest.c |  143 73 +70 -0 !
 1 file changed, 73 insertions(+), 70 deletions(-)

Index: b/src/cyclictest/cyclictest.c
===================================================================
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -923,10 +923,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-D       --duration=t      specify a length for the test run\n"
        "                           default is in seconds, but 'm', 'h', or 'd' maybe added\n"
        "                           to modify value to minutes, hours or days\n"
+       "-e       --latency=PM_QOS  write PM_QOS to /dev/cpu_dma_latency\n"
        "-E       --event           event tracing (used with -b)\n"
        "-f       --ftrace          function trace (when -b is active)\n"
        "-h       --histogram=US    dump a latency histogram to stdout after the run\n"
-               "                           (with same priority about many threads)\n"
+       "                           (with same priority about many threads)\n"
        "                           US is the max time to be be tracked in microseconds\n"
        "-H       --histofall=US    same as -h except with an additional summary column\n"
        "-i INTV  --interval=INTV   base interval of thread in us default=1000\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -944,6 +945,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-Q       --priospread       spread priority levels starting at specified value\n"
        "-r       --relative        use relative timer instead of absolute\n"
        "-s       --system          use sys_nanosleep and sys_setitimer\n"
+       "-S       --smp             Standard SMP testing: options -a -t -n and\n"
+       "                           same priority of all threads\n"
        "-t       --threads         one thread per available processor\n"
        "-t [NUM] --threads=NUM     number of threads:\n"
        "                           without NUM, threads = max_cpus\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -951,16 +954,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-T TRACE --tracer=TRACER   set tracing function\n"
        "    configured tracers: %s\n"
        "-u       --unbuffered      force unbuffered output for live processing\n"
+       "-U       --numa            Standard NUMA testing (similar to SMP option)\n"
+       "                           thread data structures allocated from local node\n"
        "-v       --verbose         output values on stdout for statistics\n"
        "                           format: n:c:v n=tasknum c=count v=value in us\n"
-               "-w       --wakeup          task wakeup tracing (used with -b)\n"
-               "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n"
-               "-y POLI  --policy=POLI     policy of realtime thread, POLI may be fifo(default) or rr\n"
-               "                           format: --policy=fifo(default) or --policy=rr\n"
-       "-S       --smp             Standard SMP testing: options -a -t -n and\n"
-               "                           same priority of all threads\n"
-       "-U       --numa            Standard NUMA testing (similar to SMP option)\n"
-               "                           thread data structures allocated from local node\n",
+       "-w       --wakeup          task wakeup tracing (used with -b)\n"
+       "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n"
+       "-y POLI  --policy=POLI     policy of realtime thread, POLI may be fifo(default) or rr\n"
+       "                           format: --policy=fifo(default) or --policy=rr\n",
        tracers
 );
 if (error)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1044,48 +1045,51 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 
 for (;;) {
  int option_index = 0;
-/** Options for getopt */
+/*
+ * Options for getopt
+ * Ordered alphabetically by single letter name
+ */
 static struct option long_options[] = {
-{"affinity", optional_argument, NULL, 'a'},
-{"breaktrace", required_argument, NULL, 'b'},
-{"preemptirqs", no_argument, NULL, 'B'},
-{"clock", required_argument, NULL, 'c'},
-{"context", no_argument, NULL, 'C'},
-{"distance", required_argument, NULL, 'd'},
-{"event", no_argument, NULL, 'E'},
-{"ftrace", no_argument, NULL, 'f'},
-{"histogram", required_argument, NULL, 'h'},
-{"histofall", required_argument, NULL, 'H'},
-{"interval", required_argument, NULL, 'i'},
-{"irqsoff", no_argument, NULL, 'I'},
-{"loops", required_argument, NULL, 'l'},
-{"mlockall", no_argument, NULL, 'm' },
-{"refresh_on_max", no_argument, NULL, 'M' },
-{"nanosleep", no_argument, NULL, 'n'},
-{"nsecs", no_argument, NULL, 'N'},
-{"oscope", required_argument, NULL, 'o'},
-{"priority", required_argument, NULL, 'p'},
-                        {"policy", required_argument, NULL, 'y'},
-{"preemptoff", no_argument, NULL, 'P'},
-{"quiet", no_argument, NULL, 'q'},
-{"relative", no_argument, NULL, 'r'},
-{"system", no_argument, NULL, 's'},
-{"threads", optional_argument, NULL, 't'},
-{"unbuffered", no_argument, NULL, 'u'},
-{"verbose", no_argument, NULL, 'v'},
-{"duration",required_argument, NULL, 'D'},
-                        {"wakeup", no_argument, NULL, 'w'},
-                        {"wakeuprt", no_argument, NULL, 'W'},
-{"help", no_argument, NULL, '?'},
-{"tracer", required_argument, NULL, 'T'},
-{"traceopt", required_argument, NULL, 'O'},
-{"smp", no_argument, NULL, 'S'},
-{"numa", no_argument, NULL, 'U'},
-{"latency", required_argument, NULL, 'e'},
-{"priospread", no_argument, NULL, 'Q'},
+{"affinity",         optional_argument, NULL, 'a'},
+{"breaktrace",       required_argument, NULL, 'b'},
+{"preemptirqs",      no_argument,       NULL, 'B'},
+{"clock",            required_argument, NULL, 'c'},
+{"context",          no_argument,       NULL, 'C'},
+{"distance",         required_argument, NULL, 'd'},
+{"duration",         required_argument, NULL, 'D'},
+{"latency",          required_argument, NULL, 'e'},
+{"event",            no_argument,       NULL, 'E'},
+{"ftrace",           no_argument,       NULL, 'f'},
+{"histogram",        required_argument, NULL, 'h'},
+{"histofall",        required_argument, NULL, 'H'},
+{"interval",         required_argument, NULL, 'i'},
+{"irqsoff",          no_argument,       NULL, 'I'},
+{"loops",            required_argument, NULL, 'l'},
+{"mlockall",         no_argument,       NULL, 'm'},
+{"refresh_on_max",   no_argument,       NULL, 'M'},
+{"nanosleep",        no_argument,       NULL, 'n'},
+{"nsecs",            no_argument,       NULL, 'N'},
+{"oscope",           required_argument, NULL, 'o'},
+{"traceopt",         required_argument, NULL, 'O'},
+{"priority",         required_argument, NULL, 'p'},
+{"preemptoff",       no_argument,       NULL, 'P'},
+{"quiet",            no_argument,       NULL, 'q'},
+{"priospread",       no_argument,       NULL, 'Q'},
+{"relative",         no_argument,       NULL, 'r'},
+{"system",           no_argument,       NULL, 's'},
+{"smp",              no_argument,       NULL, 'S'},
+{"threads",          optional_argument, NULL, 't'},
+{"tracer",           required_argument, NULL, 'T'},
+{"unbuffered",       no_argument,       NULL, 'u'},
+{"numa",             no_argument,       NULL, 'U'},
+{"verbose",          no_argument,       NULL, 'v'},
+{"wakeup",           no_argument,       NULL, 'w'},
+{"wakeuprt",         no_argument,       NULL, 'W'},
+{"policy",           required_argument, NULL, 'y'},
+{"help",             no_argument,       NULL, '?'},
 {NULL, 0, NULL, 0}
 };
-int c = getopt_long(argc, argv, "a::b:Bc:Cd:Efh:H:i:Il:MnNo:O:p:PmqQrsSt::uUvD:wWT:y:e:",
+int c = getopt_long(argc, argv, "a::b:Bc:Cd:D:e:Efh:H:i:Il:MnNo:O:p:PmqQrsSt::uUvD:wWT:y:",
     long_options, &amp;amp;option_index);
 if (c == -1)
 break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1109,6 +1113,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 case 'c': clocksel = atoi(optarg); break;
 case 'C': tracetype = CTXTSWITCH; break;
 case 'd': distance = atoi(optarg); break;
+case 'D': duration = parse_time_string(optarg); break;
+case 'e': /* power management latency target value */
+  /* note: default is 0 (zero) */
+latency_target_value = atoi(optarg);
+if (latency_target_value &amp;lt; 0)
+latency_target_value = 0;
+break;
 case 'E': enable_events = 1; break;
 case 'f': tracetype = FUNCTION; ftrace = 1; break;
 case 'H': histofall = 1; /* fall through */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1124,6 +1135,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 }
 break;
 case 'l': max_cycles = atoi(optarg); break;
+case 'm': lockall = 1; break;
+case 'M': refresh_on_max = 1; break;
 case 'n': use_nanosleep = MODE_CLOCK_NANOSLEEP; break;
 case 'N': use_nsecs = 1; break;
 case 'o': oscope_reduction = atoi(optarg); break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1146,6 +1159,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 case 'Q': priospread = 1; break;
 case 'r': timermode = TIMER_RELTIME; break;
 case 's': use_system = MODE_SYS_OFFSET; break;
+case 'S':  /* SMP testing */
+if (numa)
+fatal("numa and smp options are mutually exclusive\n");
+smp = 1;
+num_threads = max_cpus;
+setaffinity = AFFINITY_USEALL;
+use_nanosleep = MODE_CLOCK_NANOSLEEP;
+break;
 case 't':
 if (smp) {
 warn("-t ignored due to --smp\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1163,22 +1184,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 strncpy(tracer, optarg, sizeof(tracer)); 
 break;
 case 'u': setvbuf(stdout, NULL, _IONBF, 0); break;
-case 'v': verbose = 1; break;
-case 'm': lockall = 1; break;
-case 'M': refresh_on_max = 1; break;
-case 'D': duration = parse_time_string(optarg);
-break;
-                case 'w': tracetype = WAKEUP; break;
-                case 'W': tracetype = WAKEUPRT; break;
-                case 'y': handlepolicy(optarg); break;
-case 'S':  /* SMP testing */
-if (numa)
-fatal("numa and smp options are mutually exclusive\n");
-smp = 1;
-num_threads = max_cpus;
-setaffinity = AFFINITY_USEALL;
-use_nanosleep = MODE_CLOCK_NANOSLEEP;
-break;
 case 'U':  /* NUMA testing */
 if (smp)
 fatal("numa and smp options are mutually exclusive\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1194,12 +1199,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 warn("ignoring --numa or -U\n");
 #endif
 break;
-case 'e': /* power management latency target value */
-  /* note: default is 0 (zero) */
-latency_target_value = atoi(optarg);
-if (latency_target_value &amp;lt; 0)
-latency_target_value = 0;
-break;
+case 'v': verbose = 1; break;
+case 'w': tracetype = WAKEUP; break;
+case 'W': tracetype = WAKEUPRT; break;
+case 'y': handlepolicy(optarg); break;
 
 case '?': display_help(0); break;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Frank Rowand</dc:creator>
    <dc:date>2012-05-15T23:36:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8296">
    <title>good load / stress suite?</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8296</link>
    <description>&lt;pre&gt;Hello all,

I was wondering what people used to check RT_PREEMPT behavior under 
load/stress?

I'm trying to test the accuracy of my timers and have a test where I 
setup a kernel module with an hr-timer flipping RTS bit on serial COM0 
periodically, which I can look on an oscilloscope. the scope triggers on 
rising edge, I call jitter what shows on the falling side:
under no specific load I get ~ 10 us (worst case waiting a long time)


My initial idea for stressing the system was to compile a kernel, make 
-j 8 (#cores) that I thought would exercise CPU and IO if anything. As 
it happens, it's "mostly good" but I do get occasional (but repeatable) 
wild excursions (&amp;gt;100us)

Looking around, I found a tool called 'stress' - 
http://weather.ou.edu/~apw/projects/stress/
Under these new conditions, the system behaves really well again ~20 us 
stable all the way.

So both tests give different result, I'm not sure which to trust.
I was thinking maybe there is some weird interaction with the kernel and 
building the kernel that make the 'bad' test invalid?

I have RT_PREEMPT 3.0.18-rt34 SMP x86_64

Thanks,
&lt;/pre&gt;</description>
    <dc:creator>Matthieu Bec</dc:creator>
    <dc:date>2012-05-15T23:08:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8290">
    <title>Preemption test</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8290</link>
    <description>&lt;pre&gt;Trying to compile Preepmtion test with instructions from 
https://rt.wiki.kernel.org/index.php/Preemption_Test and I run into the 
error below

g++ preempt-test.cc -g -lboost_thread-mt -lboost_program_options -o 
preempt-test
preempt-test.cc:57:40: error: boost/thread/detail/lock.hpp: No such file 
or directory

Is there a later version than v4 from 
ftp://ftp.novell.com/dev/ghaskins/preempt-test-latest.tar.bz2

The git link  
git://git.kernel.org/pub/scm/linux/kernel/git/ghaskins/preempt-test.git 
doesn't exist. Is there a git repo some where else.


Thanks,
Venkat
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Venkat Subbiah</dc:creator>
    <dc:date>2012-05-15T20:30:52</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8288">
    <title>[PATCH] compile fix for brcm80211 on v3.2.17</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8288</link>
    <description>&lt;pre&gt;Ben,

Found this while building v3.2.17-rt28:

diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c
index f98becc..833cbef 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -7879,7 +7879,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; brcms_c_recvctl(struct brcms_c_info *wlc, struct d11rxhdr *rxh,
        if (wlc-&amp;gt;hw-&amp;gt;suspended_fifos) {
                hdr = (struct ieee80211_hdr *)p-&amp;gt;data;
                if (ieee80211_is_beacon(hdr-&amp;gt;frame_control))
-                       brcms_b_mute(wlc-&amp;gt;hw, false);
+                       brcms_b_mute(wlc-&amp;gt;hw, false, 0);
        }
 
        memcpy(IEEE80211_SKB_RXCB(p), &amp;amp;rx_status, sizeof(rx_status));

Not sure if that's completely correct but I found another call site for
brcms_b_mute() that also passed 0 flags. 

Clark
&lt;/pre&gt;</description>
    <dc:creator>Clark Williams</dc:creator>
    <dc:date>2012-05-15T19:04:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8276">
    <title>[RFC][PATCH RT] rwsem_rt: Another (more sane) approach to mulit reader rt locks</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8276</link>
    <description>&lt;pre&gt;The RT patch has been having lots of trouble lately with large machines
and applications running lots of threads. This usually boils down to a
bottle neck of a single lock: the mm-&amp;gt;mmap_sem.

The mmap_sem is a rwsem, which can sleep, but it also can be taken with
a read/write lock, where a read lock can be taken by several tasks at
the same time and the write lock can be only taken by a single task.

But due to priority inheritance, having multiple readers makes the code
much more complex, thus the -rt patch converts all rwsems into a single
mutex, where readers may nest (the same task may grab the same rwsem for
read multiple times), but only one task may hold the rwsem at any given
time (for read or write).

When we have lots of threads, the rwsem may be taken often, either for
memory allocation or filling in page faults. This becomes a bottle neck
for threads as only one thread at a time may grab the mmap_sem (which is
shared by all threads of a process).

Previous attempts of adding multiple readers became too complex and was
error prone. This approach takes on a much more simpler technique, one
that is actually used by per cpu locks.

The idea here is to have an rwsem create a rt_mutex for each CPU.
Actually, it creates a rwsem for each CPU that can only be acquired by
one task at a time. This allows for readers on separate CPUs to take
only the per cpu lock. When a writer needs to take a lock, it must grab
all CPU locks before continuing.

This approach does nothing special with the rt_mutex or priority
inheritance code. That stays the same, and works normally (thus less
error prone). The trick here is that when a reader takes a rwsem for
read, it must disable migration, that way it can unlock the rwsem
without needing any special searches (which lock did it take?).

I've tested this a bit, and so far it works well. I haven't found a nice
way to initialize the locks, so I'm using the silly initialize_rwsem()
at all places that acquire the lock. But we can work on this later.

Also, I don't use per_cpu sections for the locks, which means we have
cache line collisions, but a normal (mainline) rwsem has that as well.

These are all room for improvement (and why this is just an RFC patch).

I'll see if I can get some numbers to see how this fixes the issues with
multi threads on big boxes.

Thoughts?

&lt;/pre&gt;</description>
    <dc:creator>Steven Rostedt</dc:creator>
    <dc:date>2012-05-15T14:03:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8274">
    <title>[ANNOUNCE] 3.2.17-rt28</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8274</link>
    <description>&lt;pre&gt;
Dear RT Folks,

I'm pleased to announce the 3.2.17 stable release.


This release is just an update to the new stable 3.2.17 version
and no RT specific changes have been made.


You can get this release via the git tree at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git

  Head SHA1: 1b5c78bddb7cd30df391c91122d8d77114d8da37


Or to build 3.2.17 directly, the following patches should be applied:

  http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.tar.xz

  http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.2.17.xz

  http://www.kernel.org/pub/linux/kernel/projects/rt/3.2/patch-3.2.17.patch.xz



Enjoy,

&lt;/pre&gt;</description>
    <dc:creator>Steven Rostedt</dc:creator>
    <dc:date>2012-05-14T18:09:04</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8273">
    <title>[ANNOUNCE] 3.0.31-rt51</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8273</link>
    <description>&lt;pre&gt;
Dear RT Folks,

I'm pleased to announce the 3.0.31-rt51 stable release.


This release is just an update to the new stable 3.0.31 version
and no RT specific changes have been made.


You can get this release via the git tree at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git

  Head SHA1: f4162227ef21455c1b1bd74565e49e4c596cecb0


Or to build 3.0.31-rt51 directly, the following patches should be applied:

  http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.xz

  http://www.kernel.org/pub/linux/kernel/v3.0/patch-3.0.31.xz

  http://www.kernel.org/pub/linux/kernel/projects/rt/3.0/patch-3.0.31-rt51.patch.xz



Enjoy,

&lt;/pre&gt;</description>
    <dc:creator>Steven Rostedt</dc:creator>
    <dc:date>2012-05-14T16:33:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8270">
    <title>[ANNOUNCE] rt-tests v0.84</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8270</link>
    <description>&lt;pre&gt;It's been a while since we've released a new rt-tests.
Clark silently pushed v0.84 to git, so this note is to let you know.
This release is git only - at least for now.

Repo: git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
Branch: master
Tag: v0.84

I also collect patches in my own repo to push to our fearless leader. :)

This is at
 git://git.kernel.org/pub/scm/linux/kernel/git/jkacur/rt-tests.git

Where I've started branch rt-tests-0.84-devel

Thanks, enjoy!

Clark Williams (5):
  [cyclictest] added priority spreading option --priospread
  Revert "cyclictest problem/bug as non-root"
  report number of samples written in hwlatdetect
  change cyclictest measurement thread to check returns and exit on
    error
  version bump to 0.84

Darren Hart (1):
  Makefile: Support user supplied CFLAGS and LDFLAGS

Frank Rowand (6):
  rt-tests: cyclictest segfault with '-a'
  rt-tests: cyclictest avoid unneeded warning
  rt-tests: cyclictest warn of interaction between '-a', '--smp', and
    '--numa'
  rt-tests: Makefile get machinetype from compiler instead of uname
  rt-tests: incorrect first latency value for --verbose option
  rt-tests: printf format compile warning

John Kacur (7):
  gitignore: differentiate between program names and directories
  pi_stress: Check the status of sched_getaffinity
  Makefile: Introduce a static library
  Move info, warn, and fatal functions to error.[ch]
  install: Fix failed to create symbolic link hwlatdetect file exists
  install: Fix failed to create symbolic link hwlatdetect file exists
  rt-tests / cyclictest: Make cyclictest fail if it cannot run with
    requested priority.

Markus Kohlhase (1):
  added description from osadl.org

Nicholas Mc Guire (1):
  cyclictest problem/bug as non-root

Steven Rostedt (1):
  rt-tests: Update rt-migrate-test to use ftrace infrastructure

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>John Kacur</dc:creator>
    <dc:date>2012-05-11T14:47:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8266">
    <title>[PATCH 1/2] V2: cyclictest: clean up getopt_long() parameters</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8266</link>
    <description>&lt;pre&gt;
cyclictest getopt_long() parameter clean up.
Clean up before following patch which will add a new option.

  Some elements of long_options were not in alphabetical order.

  Some elements of optstring were not in alphabetical order.

  '-e', '--latency' was missing help text

  short form of --duration ('D') was missing from optstring

  Change a few instances of leading spaces to tabs.

  Add white space to long_options to improve readability.

  Some cases of the switch processing the result of
    getopt_long() were not in alphabetical order.

  Did _not_ clean up option value parsing and processing.

Signed-off-by: Frank Rowand &amp;lt;frank.rowand&amp;lt; at &amp;gt;am.sony.com&amp;gt;
---
 src/cyclictest/cyclictest.c |  143 73 +70 -0 !
 1 file changed, 73 insertions(+), 70 deletions(-)

Index: b/src/cyclictest/cyclictest.c
===================================================================
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -923,10 +923,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-D       --duration=t      specify a length for the test run\n"
        "                           default is in seconds, but 'm', 'h', or 'd' maybe added\n"
        "                           to modify value to minutes, hours or days\n"
+       "-e       --latency=PM_QOS  write PM_QOS to /dev/cpu_dma_latency\n"
        "-E       --event           event tracing (used with -b)\n"
        "-f       --ftrace          function trace (when -b is active)\n"
        "-h       --histogram=US    dump a latency histogram to stdout after the run\n"
-               "                           (with same priority about many threads)\n"
+       "                           (with same priority about many threads)\n"
        "                           US is the max time to be be tracked in microseconds\n"
        "-H       --histofall=US    same as -h except with an additional summary column\n"
        "-i INTV  --interval=INTV   base interval of thread in us default=1000\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -944,6 +945,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-Q       --priospread       spread priority levels starting at specified value\n"
        "-r       --relative        use relative timer instead of absolute\n"
        "-s       --system          use sys_nanosleep and sys_setitimer\n"
+       "-S       --smp             Standard SMP testing: options -a -t -n and\n"
+       "                           same priority of all threads\n"
        "-t       --threads         one thread per available processor\n"
        "-t [NUM] --threads=NUM     number of threads:\n"
        "                           without NUM, threads = max_cpus\n"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -951,16 +954,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void display_help(int error)
        "-T TRACE --tracer=TRACER   set tracing function\n"
        "    configured tracers: %s\n"
        "-u       --unbuffered      force unbuffered output for live processing\n"
+       "-U       --numa            Standard NUMA testing (similar to SMP option)\n"
+       "                           thread data structures allocated from local node\n"
        "-v       --verbose         output values on stdout for statistics\n"
        "                           format: n:c:v n=tasknum c=count v=value in us\n"
-               "-w       --wakeup          task wakeup tracing (used with -b)\n"
-               "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n"
-               "-y POLI  --policy=POLI     policy of realtime thread, POLI may be fifo(default) or rr\n"
-               "                           format: --policy=fifo(default) or --policy=rr\n"
-       "-S       --smp             Standard SMP testing: options -a -t -n and\n"
-               "                           same priority of all threads\n"
-       "-U       --numa            Standard NUMA testing (similar to SMP option)\n"
-               "                           thread data structures allocated from local node\n",
+       "-w       --wakeup          task wakeup tracing (used with -b)\n"
+       "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n"
+       "-y POLI  --policy=POLI     policy of realtime thread, POLI may be fifo(default) or rr\n"
+       "                           format: --policy=fifo(default) or --policy=rr\n",
        tracers
 );
 if (error)
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1044,48 +1045,51 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 
 for (;;) {
  int option_index = 0;
-/** Options for getopt */
+/*
+ * Options for getopt
+ * Ordered alphabetically by single letter name
+ */
 static struct option long_options[] = {
-{"affinity", optional_argument, NULL, 'a'},
-{"breaktrace", required_argument, NULL, 'b'},
-{"preemptirqs", no_argument, NULL, 'B'},
-{"clock", required_argument, NULL, 'c'},
-{"context", no_argument, NULL, 'C'},
-{"distance", required_argument, NULL, 'd'},
-{"event", no_argument, NULL, 'E'},
-{"ftrace", no_argument, NULL, 'f'},
-{"histogram", required_argument, NULL, 'h'},
-{"histofall", required_argument, NULL, 'H'},
-{"interval", required_argument, NULL, 'i'},
-{"irqsoff", no_argument, NULL, 'I'},
-{"loops", required_argument, NULL, 'l'},
-{"mlockall", no_argument, NULL, 'm' },
-{"refresh_on_max", no_argument, NULL, 'M' },
-{"nanosleep", no_argument, NULL, 'n'},
-{"nsecs", no_argument, NULL, 'N'},
-{"oscope", required_argument, NULL, 'o'},
-{"priority", required_argument, NULL, 'p'},
-                        {"policy", required_argument, NULL, 'y'},
-{"preemptoff", no_argument, NULL, 'P'},
-{"quiet", no_argument, NULL, 'q'},
-{"relative", no_argument, NULL, 'r'},
-{"system", no_argument, NULL, 's'},
-{"threads", optional_argument, NULL, 't'},
-{"unbuffered", no_argument, NULL, 'u'},
-{"verbose", no_argument, NULL, 'v'},
-{"duration",required_argument, NULL, 'D'},
-                        {"wakeup", no_argument, NULL, 'w'},
-                        {"wakeuprt", no_argument, NULL, 'W'},
-{"help", no_argument, NULL, '?'},
-{"tracer", required_argument, NULL, 'T'},
-{"traceopt", required_argument, NULL, 'O'},
-{"smp", no_argument, NULL, 'S'},
-{"numa", no_argument, NULL, 'U'},
-{"latency", required_argument, NULL, 'e'},
-{"priospread", no_argument, NULL, 'Q'},
+{"affinity",         optional_argument, NULL, 'a'},
+{"breaktrace",       required_argument, NULL, 'b'},
+{"preemptirqs",      no_argument,       NULL, 'B'},
+{"clock",            required_argument, NULL, 'c'},
+{"context",          no_argument,       NULL, 'C'},
+{"distance",         required_argument, NULL, 'd'},
+{"duration",         required_argument, NULL, 'D'},
+{"latency",          required_argument, NULL, 'e'},
+{"event",            no_argument,       NULL, 'E'},
+{"ftrace",           no_argument,       NULL, 'f'},
+{"histogram",        required_argument, NULL, 'h'},
+{"histofall",        required_argument, NULL, 'H'},
+{"interval",         required_argument, NULL, 'i'},
+{"irqsoff",          no_argument,       NULL, 'I'},
+{"loops",            required_argument, NULL, 'l'},
+{"mlockall",         no_argument,       NULL, 'm'},
+{"refresh_on_max",   no_argument,       NULL, 'M'},
+{"nanosleep",        no_argument,       NULL, 'n'},
+{"nsecs",            no_argument,       NULL, 'N'},
+{"oscope",           required_argument, NULL, 'o'},
+{"traceopt",         required_argument, NULL, 'O'},
+{"priority",         required_argument, NULL, 'p'},
+{"preemptoff",       no_argument,       NULL, 'P'},
+{"quiet",            no_argument,       NULL, 'q'},
+{"priospread",       no_argument,       NULL, 'Q'},
+{"relative",         no_argument,       NULL, 'r'},
+{"system",           no_argument,       NULL, 's'},
+{"smp",              no_argument,       NULL, 'S'},
+{"threads",          optional_argument, NULL, 't'},
+{"tracer",           required_argument, NULL, 'T'},
+{"unbuffered",       no_argument,       NULL, 'u'},
+{"numa",             no_argument,       NULL, 'U'},
+{"verbose",          no_argument,       NULL, 'v'},
+{"wakeup",           no_argument,       NULL, 'w'},
+{"wakeuprt",         no_argument,       NULL, 'W'},
+{"policy",           required_argument, NULL, 'y'},
+{"help",             no_argument,       NULL, '?'},
 {NULL, 0, NULL, 0}
 };
-int c = getopt_long(argc, argv, "a::b:Bc:Cd:Efh:H:i:Il:MnNo:O:p:PmqQrsSt::uUvD:wWT:y:e:",
+int c = getopt_long(argc, argv, "a::b:Bc:Cd:D:e:Efh:H:i:Il:MnNo:O:p:PmqQrsSt::uUvD:wWT:y:",
     long_options, &amp;amp;option_index);
 if (c == -1)
 break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1109,6 +1113,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 case 'c': clocksel = atoi(optarg); break;
 case 'C': tracetype = CTXTSWITCH; break;
 case 'd': distance = atoi(optarg); break;
+case 'D': duration = parse_time_string(optarg); break;
+case 'e': /* power management latency target value */
+  /* note: default is 0 (zero) */
+latency_target_value = atoi(optarg);
+if (latency_target_value &amp;lt; 0)
+latency_target_value = 0;
+break;
 case 'E': enable_events = 1; break;
 case 'f': tracetype = FUNCTION; ftrace = 1; break;
 case 'H': histofall = 1; /* fall through */
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1124,6 +1135,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 }
 break;
 case 'l': max_cycles = atoi(optarg); break;
+case 'm': lockall = 1; break;
+case 'M': refresh_on_max = 1; break;
 case 'n': use_nanosleep = MODE_CLOCK_NANOSLEEP; break;
 case 'N': use_nsecs = 1; break;
 case 'o': oscope_reduction = atoi(optarg); break;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1146,6 +1159,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 case 'Q': priospread = 1; break;
 case 'r': timermode = TIMER_RELTIME; break;
 case 's': use_system = MODE_SYS_OFFSET; break;
+case 'S':  /* SMP testing */
+if (numa)
+fatal("numa and smp options are mutually exclusive\n");
+smp = 1;
+num_threads = max_cpus;
+setaffinity = AFFINITY_USEALL;
+use_nanosleep = MODE_CLOCK_NANOSLEEP;
+break;
 case 't':
 if (smp) {
 warn("-t ignored due to --smp\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1163,22 +1184,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 strncpy(tracer, optarg, sizeof(tracer)); 
 break;
 case 'u': setvbuf(stdout, NULL, _IONBF, 0); break;
-case 'v': verbose = 1; break;
-case 'm': lockall = 1; break;
-case 'M': refresh_on_max = 1; break;
-case 'D': duration = parse_time_string(optarg);
-break;
-                case 'w': tracetype = WAKEUP; break;
-                case 'W': tracetype = WAKEUPRT; break;
-                case 'y': handlepolicy(optarg); break;
-case 'S':  /* SMP testing */
-if (numa)
-fatal("numa and smp options are mutually exclusive\n");
-smp = 1;
-num_threads = max_cpus;
-setaffinity = AFFINITY_USEALL;
-use_nanosleep = MODE_CLOCK_NANOSLEEP;
-break;
 case 'U':  /* NUMA testing */
 if (smp)
 fatal("numa and smp options are mutually exclusive\n");
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1194,12 +1199,10 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void process_options (int argc, c
 warn("ignoring --numa or -U\n");
 #endif
 break;
-case 'e': /* power management latency target value */
-  /* note: default is 0 (zero) */
-latency_target_value = atoi(optarg);
-if (latency_target_value &amp;lt; 0)
-latency_target_value = 0;
-break;
+case 'v': verbose = 1; break;
+case 'w': tracetype = WAKEUP; break;
+case 'W': tracetype = WAKEUPRT; break;
+case 'y': handlepolicy(optarg); break;
 
 case '?': display_help(0); break;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Frank Rowand</dc:creator>
    <dc:date>2012-05-11T00:59:40</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8265">
    <title>softirq handling / prioritization of the Ethernet traffic</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8265</link>
    <description>&lt;pre&gt;I would like to know if it is possible to prioritize the Ethernet 
traffic till it reaches napi_gro_receive() or netif_receive_skb() called 
inside the network card driver.

First I thought it is possible by the prioritization of the irq/XX-ethX 
thread which is used by the network card and the NET_RX_SOFTIRQ, 
NET_TX_SOFTIRQ threads. Till I read that the split from software 
interrupts to threads are gone in the RT patch. Now I'm a bit confused 
and unsure about the softirq handling.

I used ftrace to determine the path of an incoming packet and it looks 
to me that the softirq is prozessed inside the irq/18-eth1 thread. So if 
I give the irq/18-eth1 a higher priority than the others, can I be sure 
that it gets not interrupted?

here a part from my ftrace:

      irq/18-eth1-1738  [001]  1366.914708: function:             
e1000_intr &amp;lt;-- irq_forced_thread_fn
      irq/18-eth1-1738  [001]  1366.914711: function:             
__napi_schedule &amp;lt;-- e1000_intr
[...]
      irq/18-eth1-1738  [001]  1366.914718: function:             
__do_softirq &amp;lt;-- local_bh_enable
      irq/18-eth1-1738  [001]  1366.914719: function:             
__do_softirq_common &amp;lt;-- __do_softirq
      irq/18-eth1-1738  [001]  1366.914719: function:             
net_rx_action &amp;lt;-- __do_softirq_common
      irq/18-eth1-1738  [001]  1366.914720: function:             
e1000_clean &amp;lt;-- net_rx_action
      irq/18-eth1-1738  [001]  1366.914721: function:             
e1000_clean_rx_irq &amp;lt;-- e1000_clean
      irq/18-eth1-1738  [001]  1366.914722: function:             
__netdev_alloc_skb &amp;lt;-- e1000_clean_rx_irq
      irq/18-eth1-1738  [001]  1366.914722: function:             
__alloc_skb &amp;lt;-- __netdev_alloc_skb
[...]
      irq/18-eth1-1738  [001]  1366.914744: function:             
e1000_receive_skb &amp;lt;-- e1000_clean_rx_irq
      irq/18-eth1-1738  [001]  1366.914744: function:             
eth_type_trans &amp;lt;-- e1000_receive_skb
      irq/18-eth1-1738  [001]  1366.914744: function:             
napi_gro_receive &amp;lt;-- e1000_receive_skb

I hope someone can explain it to me. The reason I want to prioritize the 
incoming network traffic is cause I'm writing a module for the 
TTEthernet protocol which is Time-triggered and and based on the 
standard Ethernet. I need the packets without or very less jitter. And I 
would like to use it by changing the  napi_gro_receive() funtion in the 
network card driver to my module function to use it with any card by 
almost no modification in the code.

I'm quite new to kernel development and the module I'm writing is part 
of my bachelor thesis. If there is a paper or a book who explains this 
behavior I'm happy to know about it!

Best regards
Frieder
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Frieder Rick</dc:creator>
    <dc:date>2012-05-10T21:42:46</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8256">
    <title>Using patch-2.6.33.7.2-rt30 increases latency and CPU usage?</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8256</link>
    <description>&lt;pre&gt;
I've been doing some interrupt latency testing using a board running a
400MHz ARM9 (an Atmel at19sam9g20).  I'm measuring interrupt latency
of an ISR attached to external interrupt pin IRQ0.

I built three kernels from scratch and ran the same test on all three:

 2.6.30          
 2.6.33.7        
 2.6.33.7-rt30  

All kernels are built using the standard AT91 patches from
http://maxim.org.za/at91_26.html.  The 2.6.30 kernel also has a set of
patches distributed by Atmel.

The 2.6.33.7-rt30 kernel is built from the same sources as the 2.6.33.7
kernel with the addition of the 2.6.33.6-rt30 patch.

I don't have enough data to say much about worst-case latency, but
after looking a few thousand samples I can say that...

 * 2.6.30 and 2.6.33.7 are pretty much the same: there is as much
   variation between test runs as there is between kernels.

 * Typical latency with RT patch is 3X the latency without it.

 * CPU idle time during test is 10% with RT patch and 30% without.

IOW: the real-time patch for 2.6.33.7 makes both the typical interrupt
latency and the CPU usage significantly worse.

Typical latency without the RT patch is 5-15us.

Typical latency with is 15-50us (I've never seen latency below 15us
with the RT patch).

Is this the expected behavior?

I don't have enough data to state conclusively what the worst-case
latencies are, but it looks like in all cases they're 200-250us.

In all cases the kernel was configured to be the most preemptible it
could be.  In the 2.6.33.7-rt30 kernel I don't have any of the tracers
enabled.

The kernel configurations are as identical as I could make them.  In
the 2.6.33.7-rt30 case, I started with the .config file used to build
the other 2.6.33.7 kernel and ran old-config making sure to select the
"fully preemptible" option when it asked.

Why would a "vanilla" 2.6.33.7 AT91 kernel perform so much better than
one with the RT patch?

&lt;/pre&gt;</description>
    <dc:creator>Grant Edwards</dc:creator>
    <dc:date>2012-05-09T21:18:10</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8254">
    <title>[PATCH] rt-tests / gitignore: Exclude patches and .a libs too.</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8254</link>
    <description>&lt;pre&gt;Minor fix to make working with git nicer.
Now that we're building a lib, we need to exclude it from git status output.
Do the same for patches we generate or apply.

Signed-off-by: John Kacur &amp;lt;jkacur&amp;lt; at &amp;gt;redhat.com&amp;gt;
---
 .gitignore |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
index 047925c..1924e73 100644
--- a/.gitignore
+++ b/.gitignore
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -3,6 +3,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 *.o
 *.tar.gz
 *.d
+*.patch
+*.a
 tmp
 patches
 ChangeLog
&lt;/pre&gt;</description>
    <dc:creator>John Kacur</dc:creator>
    <dc:date>2012-05-09T15:37:36</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8253">
    <title>BUG - "scheduling while atomic" on a irq handler (s3c-mci)</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8253</link>
    <description>&lt;pre&gt;Hi everyone,

   I am facing a problem while trying to run a rt-patched 3.2.y kernel
with PREEMPT_RT_FULL on a mini2440 board (ARM based s3c2440 SoC) :
whilst a vanilla kernel (with PREEMPT_LL) works like a charm,
PREEMPT_RTB and PREEMPT_RT_FULL makes the MMC/SD driver  (s3cmci)
hang, which result in the kernel waiting indefinitely for the root fs
to mount.

  I think that the IRQ handling of the driver is somehow disturbed by
the changes made by the RT patch. When using PREEMPT_RTB I can see the
following message in the console :

BUG: scheduling while atomic: irq/37-s3c-mci/253/0x00000102
Modules linked in:
Function entered at [&amp;lt;c000e90c&amp;gt;] from [&amp;lt;c029f478&amp;gt;]
Function entered at [&amp;lt;c029f478&amp;gt;] from [&amp;lt;c029fc3c&amp;gt;]
Function entered at [&amp;lt;c029fc3c&amp;gt;] from [&amp;lt;c00559c0&amp;gt;]
Function entered at [&amp;lt;c00559c0&amp;gt;] from [&amp;lt;c01dd4c8&amp;gt;]
Function entered at [&amp;lt;c01dd4c8&amp;gt;] from [&amp;lt;c0024a0c&amp;gt;]
Function entered at [&amp;lt;c0024a0c&amp;gt;] from [&amp;lt;c0024d9c&amp;gt;]
Function entered at [&amp;lt;c0024d9c&amp;gt;] from [&amp;lt;c0024fe8&amp;gt;]
Function entered at [&amp;lt;c0024fe8&amp;gt;] from [&amp;lt;c0025140&amp;gt;]
Function entered at [&amp;lt;c0025140&amp;gt;] from [&amp;lt;c00549f0&amp;gt;]
Function entered at [&amp;lt;c00549f0&amp;gt;] from [&amp;lt;c00547c4&amp;gt;]
Function entered at [&amp;lt;c00547c4&amp;gt;] from [&amp;lt;c0039954&amp;gt;]
Function entered at [&amp;lt;c0039954&amp;gt;] from [&amp;lt;c000a120&amp;gt;]

  When I run the kernel under Qemu, debug through gdb and put a
breakpoint on unwind_backtace the details of the previous backtrace is
:

#0  unwind_backtrace (regs=0x0, tsk=0x0) at arch/arm/kernel/unwind.c:409
#1  0xc029f478 in schedule_debug (prev=&amp;lt;optimized out&amp;gt;) at kernel/sched.c:4357
#2  __schedule () at kernel/sched.c:4537
#3  0xc029fc3c in schedule () at kernel/sched.c:4625
#4  0xc00559c0 in synchronize_irq (irq=&amp;lt;optimized out&amp;gt;) at
kernel/irq/manage.c:73
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

  I don't see the "bug" message with PREEMPT_RT_FULL, the kernel just
hang waiting for the rootfs. The problem did not occur in the 2.6.y
tree AFAIK.

  I'd like to investigate more and fix the s3cmci driver but I don't
know where to begin, could someone give me some hints on what should
be done/not be done for a rt patch compliant device driver/irq handler
?


Regards,
Christophe Huriaux
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo&amp;lt; at &amp;gt;vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

&lt;/pre&gt;</description>
    <dc:creator>Christophe Huriaux</dc:creator>
    <dc:date>2012-05-09T14:07:13</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.rt.user/8252">
    <title>[PATCH] rt-tests / cyclictest: Make cyclictest fail if it cannot run with requested priority.</title>
    <link>http://comments.gmane.org/gmane.linux.rt.user/8252</link>
    <description>&lt;pre&gt;Currently if a non-root user requests a priority higher than the soft limit in
/etc/security/limits.conf
the call to sched_setscheduler will silently fail and the user will be running
with priority of 0. Cyclictest will not complain, and display the
requested priority resulting in seemingly poor results.

The following patch fixes this by doing two things.

1. If the requested priority is higher than the soft limit but lower than the
hard limit, it will raise the soft limit to the requested priority.

2. If the requested priority is higher than the hard limit, it will fail with a
warning.

The patch should not affect privileged users.

Reported-by: Nicholas Mc Guire &amp;lt;der.herr&amp;lt; at &amp;gt;hofr.at&amp;gt;
Signed-off-by: John Kacur &amp;lt;jkacur&amp;lt; at &amp;gt;redhat.com&amp;gt;
---
 src/cyclictest/cyclictest.c |   80 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 79 insertions(+), 1 deletions(-)

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index e8649c7..c44df6a 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -12,6 +12,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 
 #include &amp;lt;stdio.h&amp;gt;
 #include &amp;lt;stdlib.h&amp;gt;
+
 #include &amp;lt;stdint.h&amp;gt;
 #include &amp;lt;stdarg.h&amp;gt;
 #include &amp;lt;unistd.h&amp;gt;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -31,6 +32,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 #include &amp;lt;sys/sysinfo.h&amp;gt;
 #include &amp;lt;sys/types.h&amp;gt;
 #include &amp;lt;sys/time.h&amp;gt;
+#include &amp;lt;sys/resource.h&amp;gt;
 #include &amp;lt;sys/utsname.h&amp;gt;
 #include &amp;lt;sys/mman.h&amp;gt;
 #include "rt_numa.h"
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -586,6 +588,79 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; parse_time_string(char *val)
 }
 
 /*
+ * Raise the soft priority limit up to prio, if that is less than or equal
+ * to the hard limit
+ * if a call fails, return the error
+ * if successful return 0
+ * if fails, return -1
+*/
+static int raise_soft_prio(int policy, const struct sched_param *param)
+{
+int err;
+int policy_max;/* max for scheduling policy such as SCHED_FIFO */
+int soft_max;
+int hard_max;
+int prio;
+struct rlimit rlim;
+
+prio = param-&amp;gt;sched_priority;
+
+policy_max = sched_get_priority_max(policy);
+if (policy_max == -1) {
+err = errno;
+err_msg("WARN: no such policy\n");
+return err;
+}
+
+err = getrlimit(RLIMIT_RTPRIO, &amp;amp;rlim);
+if (err) {
+err = errno;
+err_msg_n(err, "WARN: getrlimit failed\n");
+return err;
+}
+
+soft_max = (rlim.rlim_cur == RLIM_INFINITY) ? policy_max : rlim.rlim_cur;
+hard_max = (rlim.rlim_max == RLIM_INFINITY) ? policy_max : rlim.rlim_max;
+
+if (prio &amp;gt; soft_max &amp;amp;&amp;amp; prio &amp;lt;= hard_max) {
+rlim.rlim_cur = prio;
+err = setrlimit(RLIMIT_RTPRIO, &amp;amp;rlim);
+if (err) {
+err = errno;
+err_msg_n(err, "WARN: setrlimit failed\n");
+/* return err; */
+}
+} else {
+err = -1;
+}
+
+return err;
+}
+
+/*
+ * Check the error status of sched_setscheduler
+ * If an error can be corrected by raising the soft limit priority to
+ * a priority less than or equal to the hard limit, then do so.
+ */
+static int setscheduler(pid_t pid, int policy, const struct sched_param *param)
+{
+int err = 0;
+
+try_again:
+err = sched_setscheduler(pid, policy, param);
+if (err) {
+err = errno;
+if (err == EPERM) {
+int err1;
+err1 = raise_soft_prio(policy, param);
+if (!err1) goto try_again;
+}
+}
+
+return err;
+}
+
+/*
  * timer thread
  *
  * Modes:
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -599,6 +674,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; parse_time_string(char *val)
  */
 void *timerthread(void *param)
 {
+int err;
 struct thread_param *par = param;
 struct sched_param schedp;
 struct sigevent sigev;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -643,7 +719,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; void *timerthread(void *param)
 
 memset(&amp;amp;schedp, 0, sizeof(schedp));
 schedp.sched_priority = par-&amp;gt;prio;
-sched_setscheduler(0, par-&amp;gt;policy, &amp;amp;schedp);
+err = setscheduler(0, par-&amp;gt;policy, &amp;amp;schedp);
+if (err)
+fatal("Couldn't raise priority to %d\n", schedp.sched_priority);
 
 /* Get current time */
 clock_gettime(par-&amp;gt;clock, &amp;amp;now);
&lt;/pre&gt;</description>
    <dc:creator>John Kacur</dc:creator>
    <dc:date>2012-05-09T14:03:03</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.linux.rt.user">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.rt.user</link>
  </textinput>
</rdf:RDF>

