<?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.hotplug.devel">
    <title>gmane.linux.hotplug.devel</title>
    <link>http://blog.gmane.org/gmane.linux.hotplug.devel</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.hotplug.devel/17714"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17712"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17706"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17704"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17701"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17700"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17698"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17695"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17693"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17659"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17650"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17649"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17648"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17647"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17645"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17644"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17640"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17638"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17637"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.linux.hotplug.devel/17636"/>
      </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.hotplug.devel/17714">
    <title>Lenovo IdeaPad S206</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17714</link>
    <description>&lt;pre&gt;Hi,

My new Lenovo IdeaPad S206 has a special button ("OneKey recovery system"
button) that I wanted to re-map to a sleep button.  I did this, and it
works well.  There is also a QS key, that one could profitably re-map.

Along the way realized that the generic IdeaPad mappings of the Ubuntu 12.10
distro are largely incompatible with the keys on this computer.
So I set out to remedy that.

I'm not sure I'm following best practices though.  In particular, should
existing IdeaPad rules be restricted, or should the mappings be overridden?

I have some evidence that the mappings here should also work for the S200,
but I'm pretty sure they *aren't* appropriate for the S205.
  ________________________________
$ cat /sys/class/dmi/id/sys_vendor
LENOVO
$ cat /sys/class/dmi/id/product_name
2638
$ cat /sys/class/dmi/id/product_version
Lenovo IdeaPad S206
  ________________________________
The OneKey button on this machine is perfect for a sleep button:
it is easily accessible, but impossible to press accidentally.

To simply re-map the OneKey button, I first observed:
A 0x10 press-release pair is emitted if the button is given a substantial
press, and released. After about 3 sec of continuous pressing,
a 0x11 press-release pair is emitted.

I put a rule like this under "keyboard_modulecheck":
  ________________________________
ENV{DMI_VENDOR}=="LENOVO*", KERNELS=="input*", ATTRS{name}=="Ideapad extra buttons", ATTR{[dmi/id]product_version}=="*S206|*S200", RUN+="keymap $name 0x10 sleep 0x11 hibernate"
  ________________________________
For the other keys, I have made a keymap file, which at least gets the proper
mappings going.  I'm not sure if I really improved anything.  See attached.

For one thing, some of the keys don't seem to make scan codes on any device
(the camera key on the F9 key.) Some seem to work regardless of how I map
them -- I guess that means they're going straight to hardware and the
system just reads the hardware state.

I'll be glad to hear what you think!

# key codes on Lenovo IdeaPad S206, and presumably the S200
0x81 reserved           # disable lenovo-ideapad mapping
0xB9 reserved           # disable lenovo-ideapad mapping
0xBA reserved           # disable lenovo-ideapad mapping
0xF1 f6                 # on F6 touchpad toggle (disabled)
0x83 rfkill             # on F7 handled in module-lenovo-ideapad-s206
0xCE micmute            # on F8
#???? camera            # on F9 can't find this in udev
0xDB switchvideomode    # on F10 
0xF0 display_off        # on F11 
0xCC brightnessdown     # on F12
0xD4 brightnessup       # on ins
0x82 unknown            # QS key
&lt;/pre&gt;</description>
    <dc:creator>Steve White</dc:creator>
    <dc:date>2013-04-26T08:46:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17712">
    <title>(unknown)</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17712</link>
    <description>&lt;pre&gt;Hi Boss,
So sorry to mail you in this rude way (if you look into this mail, I know is
not support mail, but god guide missing people, right?  )
I am finding a solution to my problem.
I have some machines with 8 net interfaces, I want to name one as eth0, I
need a solution to work for all machine ( I will clone OS from one to
others), so I could not just modify the rule file under /etc/udev/rules.d 

I need setup a math condition works for all machine. 
I want to change  /lib/udev/rules.d/75-persistent-net-generator.rules file
to only match MACs
But my problem is that interface names turn out did not ordered by MACs,
It suppose  00:0d:48:08:92:9a named as eth0, but not.

Is there any way to let interfaces named by MACs order? 

root&amp;lt; at &amp;gt;APM:~# dmesg |grep eth
[   10.429663] e1000e 0000:03:00.0: eth0: (PCI Express:2.5GB/s:Width x4)
00:0d:48:08:92:9b
[   10.429665] e1000e 0000:03:00.0: eth0: Intel(R) PRO/1000 Network
Connection
[   10.429742] e1000e 0000:03:00.0: eth0: MAC: 0, PHY: 1, PBA No: C85839-002
[   12.421678] e1000e 0000:03:00.1: eth1: (PCI Express:2.5GB/s:Width x4)
00:0d:48:08:92:9a
[   12.421680] e1000e 0000:03:00.1: eth1: Intel(R) PRO/1000 Network
Connection
[   12.421756] e1000e 0000:03:00.1: eth1: MAC: 0, PHY: 1, PBA No: C85839-002
[   16.061712] e1000e 0000:04:00.0: eth2: (PCI Express:2.5GB/s:Width x4)
00:0d:48:08:92:9d
[   16.061714] e1000e 0000:04:00.0: eth2: Intel(R) PRO/1000 Network
Connection
[   16.061791] e1000e 0000:04:00.0: eth2: MAC: 0, PHY: 1, PBA No: C85839-002
[   17.041738] e1000e 0000:04:00.1: eth3: (PCI Express:2.5GB/s:Width x4)
00:0d:48:08:92:9c
[   17.041740] e1000e 0000:04:00.1: eth3: Intel(R) PRO/1000 Network
Connection
[   17.041817] e1000e 0000:04:00.1: eth3: MAC: 0, PHY: 1, PBA No: C85839-002
[   17.582614] e1000e 0000:08:00.0: eth4: (PCI Express:2.5GB/s:Width x1)
00:0d:48:27:86:9d
[   17.582616] e1000e 0000:08:00.0: eth4: Intel(R) PRO/1000 Network
Connection
[   17.582694] e1000e 0000:08:00.0: eth4: MAC: 4, PHY: 8, PBA No: FFFFFF-0FF
[   17.697014] e1000e 0000:07:00.0: eth5: (PCI Express:2.5GB/s:Width x1)
00:0d:48:27:86:9c
[   17.697016] e1000e 0000:07:00.0: eth5: Intel(R) PRO/1000 Network
Connection
[   17.697094] e1000e 0000:07:00.0: eth5: MAC: 4, PHY: 8, PBA No: FFFFFF-0FF
[   17.818793] e1000e 0000:06:00.0: eth6: (PCI Express:2.5GB/s:Width x1)
00:0d:48:27:86:9b
[   17.818794] e1000e 0000:06:00.0: eth6: Intel(R) PRO/1000 Network
Connection
[   17.818872] e1000e 0000:06:00.0: eth6: MAC: 4, PHY: 8, PBA No: FFFFFF-0FF
[   17.938778] e1000e 0000:05:00.0: eth7: (PCI Express:2.5GB/s:Width x1)
00:0d:48:27:86:9a
[   17.938780] e1000e 0000:05:00.0: eth7: Intel(R) PRO/1000 Network
Connection
[   17.938859] e1000e 0000:05:00.0: eth7: MAC: 4, PHY: 8, PBA No: FFFFFF-0FF


Yan Xiao








--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>snowyxx</dc:creator>
    <dc:date>2013-04-26T03:32:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17706">
    <title>[PATCH v3] tools: add static-nodes tool</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17706</link>
    <description>&lt;pre&gt;This tool reads modules.devname from the current kernel directory and outputs
the information. By default in a human-readable format, and optionally in
machine-readable formats.

For now only the tmpfiles.d(5) format is supported, but more could easily be
added in the future if there is a need.

This means nothing but kmod needs to reads the private files under
/lib/modules/. In particular systemd-udevd can stop reading modules.devname.

Cc: &amp;lt;linux-hotplug&amp;lt; at &amp;gt;vger.kernel.org&amp;gt;
Cc: &amp;lt;systemd-devel&amp;lt; at &amp;gt;lists.freedesktop.org&amp;gt;tools: static-nodes
---

v3: dropped the systemd integration for now, we can decide on that separately
    added human-readable format and use this by default
    added a --format= switch to get the tmpfiles format

 Makefile.am          |   3 +-
 tools/kmod.c         |   1 +
 tools/kmod.h         |   1 +
 tools/static-nodes.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 180 insertions(+), 1 deletion(-)
 create mode 100644 tools/static-nodes.c

diff --git a/Makefile.am b/Makefile.am
index fe4c769..b1bfd59 100644
--- a/Makefile.am
+++ b/Makefile.am
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -110,7 +110,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; noinst_SCRIPTS = tools/insmod tools/rmmod tools/lsmod \
 tools_kmod_SOURCES = tools/kmod.c tools/kmod.h tools/lsmod.c \
      tools/rmmod.c tools/insmod.c \
      tools/modinfo.c tools/modprobe.c \
-     tools/depmod.c tools/log.h tools/log.c
+     tools/depmod.c tools/log.h tools/log.c \
+     tools/static-nodes.c
 tools_kmod_LDADD = libkmod/libkmod-util.la \
    libkmod/libkmod.la
 
diff --git a/tools/kmod.c b/tools/kmod.c
index ebb8875..347bb7d 100644
--- a/tools/kmod.c
+++ b/tools/kmod.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -37,6 +37,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct kmod_cmd kmod_cmd_help;
 static const struct kmod_cmd *kmod_cmds[] = {
 &amp;amp;kmod_cmd_help,
 &amp;amp;kmod_cmd_list,
+&amp;amp;kmod_cmd_static_nodes,
 };
 
 static const struct kmod_cmd *kmod_compat_cmds[] = {
diff --git a/tools/kmod.h b/tools/kmod.h
index 80fa4c2..68a646a 100644
--- a/tools/kmod.h
+++ b/tools/kmod.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,5 +35,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extern const struct kmod_cmd kmod_cmd_compat_modprobe;
 extern const struct kmod_cmd kmod_cmd_compat_depmod;
 
 extern const struct kmod_cmd kmod_cmd_list;
+extern const struct kmod_cmd kmod_cmd_static_nodes;
 
 #include "log.h"
diff --git a/tools/static-nodes.c b/tools/static-nodes.c
new file mode 100644
index 0000000..3d0582a
--- /dev/null
+++ b/tools/static-nodes.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,176 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * kmod-static-nodes - manage modules.devname
+ *
+ * Copyright (C) 2004-2012 Kay Sievers &amp;lt;kay&amp;lt; at &amp;gt;vrfy.org&amp;gt;
+ * Copyright (C) 2011-2013  ProFUSION embedded systems
+ * Copyright (C) 2013 Tom Gundersen &amp;lt;teg&amp;lt; at &amp;gt;jklm.no&amp;gt;
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.
+ */
+
+#include &amp;lt;stdio.h&amp;gt;
+#include &amp;lt;stdlib.h&amp;gt;
+#include &amp;lt;stddef.h&amp;gt;
+#include &amp;lt;getopt.h&amp;gt;
+#include &amp;lt;errno.h&amp;gt;
+#include &amp;lt;unistd.h&amp;gt;
+#include &amp;lt;string.h&amp;gt;
+#include &amp;lt;limits.h&amp;gt;
+#include &amp;lt;sys/utsname.h&amp;gt;
+#include &amp;lt;sys/stat.h&amp;gt;
+#include &amp;lt;sys/types.h&amp;gt;
+#include "libkmod-util.h"
+
+#include "kmod.h"
+
+static const char cmdopts_s[] = "o:f:h";
+static const struct option cmdopts[] = {
+        { "output", required_argument, 0, 'o'},
+        { "format", required_argument, 0, 'f'},
+        { "help", no_argument, 0, 'h'},
+        { },
+};
+
+static void help(void)
+{
+        printf("Usage:\n"
+                "\t%s static-nodes [options]\n"
+                "\n"
+                "kmod static-nodes outputs the static-node information of the currently running kernel.\n"
+                "\n"
+                "Options:\n"
+                "\t-f, --format=FORMAT  use a machine-readable format\n"
+                "\t-o, --output=FILE    write output to file\n"
+                "\t-h, --help           show this help\n"
+                "\n"
+                "Formats:\n"
+                "  tmpfiles    the tmpfiles.d(5) format used by systemd-tmpfiles.\n",
+                program_invocation_short_name);
+}
+
+static void write_human(FILE *out, char module[], char devname[], char type, unsigned int maj, unsigned int min)
+{
+        fprintf(out,
+                        "Module: %s\n"
+                        "\tDevice node: /dev/%s\n"
+                        "\t\tType: %s device\n"
+                        "\t\tMajor: %u\n"
+                        "\t\tMinor: %u\n",
+                        module, devname, (type == 'c') ? "character" : "block", maj, min);
+        return;
+}
+
+static void write_tmpfile(FILE *out, char devname[], char type, unsigned int maj, unsigned int min)
+{
+        fprintf(out, "%c /dev/%s 0600 - - - %u:%u\n", type, devname, maj, min);
+        return;
+}
+
+static int do_static_nodes(int argc, char *argv[])
+{
+        struct utsname kernel;
+        char modules[PATH_MAX];
+        FILE *in = NULL, *out = stdout;
+        bool human_readable = 1;
+        char buf[4096];
+        int ret = EXIT_SUCCESS;
+
+        for (;;) {
+                int c, idx = 0;
+
+                c = getopt_long(argc, argv, cmdopts_s, cmdopts, &amp;amp;idx);
+                if (c == -1) {
+                        break;
+                }
+                switch (c) {
+                case 'o':
+                        out = fopen(optarg, "we");
+                        if (out == NULL) {
+                                fprintf(stderr, "Error: could not create %s!\n", optarg);
+                                ret = EXIT_FAILURE;
+                                goto finish;
+                        }
+                        break;
+                case 'f':
+                        if (!streq(optarg, "tmpfiles")) {
+                                fprintf(stderr, "Unknown format: '%s'.\n", argv[1]);
+                                help();
+                                ret = EXIT_FAILURE;
+                                goto finish;
+                        }
+                        human_readable = 0;
+                        break;
+                case 'h':
+                        help();
+                        goto finish;
+                case '?':
+                        ret = EXIT_FAILURE;
+                        goto finish;
+                default:
+                        fprintf(stderr, "Unexpected commandline option '%c'.\n", c);
+                        help();
+                        ret = EXIT_FAILURE;
+                        goto finish;
+                }
+        }
+
+        if (uname(&amp;amp;kernel) &amp;lt; 0) {
+                fputs("Error: uname failed!\n", stderr);
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+        snprintf(modules, sizeof(modules), "/lib/modules/%s/modules.devname", kernel.release);
+        in = fopen(modules, "re");
+        if (in == NULL &amp;amp;&amp;amp; errno != ENOENT) {
+                fprintf(stderr, "Error: could not open /lib/modules/%s/modules.devname!\n", kernel.release);
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+
+        while (fgets(buf, sizeof(buf), in) != NULL) {
+                char module[PATH_MAX];
+                char devname[PATH_MAX];
+                char type;
+                unsigned int maj, min;
+                int matches;
+
+                if (buf[0] == '#')
+                        continue;
+
+                matches = sscanf(buf, "%s %s %c%u:%u", module, devname, &amp;amp;type, &amp;amp;maj, &amp;amp;min);
+                if (matches != 5 || (type != 'c' &amp;amp;&amp;amp; type != 'b')) {
+                        fprintf(stderr, "Error: invalid devname entry: %s", buf);
+                        ret = EXIT_FAILURE;
+                        continue;
+                }
+
+                if (human_readable)
+                        write_human(out, module, devname, type, maj, min);
+                else
+                        write_tmpfile(out, devname, type, maj, min);
+        }
+
+finish:
+        if (in)
+                fclose(in);
+        if (out)
+                fclose(out);
+        return ret;
+}
+
+const struct kmod_cmd kmod_cmd_static_nodes = {
+.name = "static-nodes",
+.cmd = do_static_nodes,
+.help = "outputs the static-node information of the currently running kernel",
+};
&lt;/pre&gt;</description>
    <dc:creator>Tom Gundersen</dc:creator>
    <dc:date>2013-04-16T13:12:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17704">
    <title>[PATCH v2] tools: add static-nodes tool</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17704</link>
    <description>&lt;pre&gt;This tool reads modules.devname from the current kernel directory and outputs
the information.

For now only the tmpfiles.d(5) format is supported, but more could easily be
added in the future if there is a need.

When booting with systemd, the new tool is called at boot to instruct
systemd-tmpfiles to create the necessary static modules before starting
systemd-udevd.

This means nothing but kmod needs to reads the private files under /lib/modules/.

Cc: &amp;lt;linux-hotplug&amp;lt; at &amp;gt;vger.kernel.org&amp;gt;
Cc: &amp;lt;systemd-devel&amp;lt; at &amp;gt;lists.freedesktop.org&amp;gt;
---

v2: adressed concerns raised by Dave, and made the tool a bit more generic so
more output formats may be added in the future as suggested by Lucas. Also
included the systemd unit file to hook this up with systemd.

 Makefile.am                        |  20 ++++-
 configure.ac                       |   8 ++
 tools/kmod-static-nodes.service.in |  16 ++++
 tools/kmod.c                       |   1 +
 tools/kmod.h                       |   1 +
 tools/static-nodes.c               | 163 +++++++++++++++++++++++++++++++++++++
 6 files changed, 207 insertions(+), 2 deletions(-)
 create mode 100644 tools/kmod-static-nodes.service.in
 create mode 100644 tools/static-nodes.c

diff --git a/Makefile.am b/Makefile.am
index 9feaf96..333e861 100644
--- a/Makefile.am
+++ b/Makefile.am
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -36,6 +36,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SED_PROCESS = \
 %.pc: %.pc.in Makefile
 $(SED_PROCESS)
 
+%.service: %.service.in Makefile
+$(SED_PROCESS)
+
 LIBKMOD_CURRENT=4
 LIBKMOD_REVISION=2
 LIBKMOD_AGE=2
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -88,6 +91,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; pkgconfig_DATA = libkmod/libkmod.pc
 EXTRA_DIST += libkmod/libkmod.pc.in
 CLEANFILES += libkmod/libkmod.pc
 
+if HAVE_SYSTEMD
+systemdsystemunit_DATA = tools/kmod-static-nodes.service
+EXTRA_DIST += tools/kmod-static-nodes.service.in
+CLEANFILES += tools/kmod-static-nodes.service
+
+install-data-hook:
+$(MKDIR_P) $(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants
+ln -sf ../kmod-static-nodes.service \
+$(DESTDIR)$(systemdsystemunitdir)/sysinit.target.wants/kmod-static-nodes.service
+endif
+
 install-exec-hook:
 if test "$(libdir)" != "$(rootlibdir)"; then \
 $(MKDIR_P) $(DESTDIR)$(rootlibdir) &amp;amp;&amp;amp; \
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -109,7 +123,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; noinst_SCRIPTS = tools/insmod tools/rmmod tools/lsmod \
 tools_kmod_SOURCES = tools/kmod.c tools/kmod.h tools/lsmod.c \
      tools/rmmod.c tools/insmod.c \
      tools/modinfo.c tools/modprobe.c \
-     tools/depmod.c tools/log.h tools/log.c
+     tools/depmod.c tools/log.h tools/log.c \
+     tools/static-nodes.c
 tools_kmod_LDADD = libkmod/libkmod-util.la \
    libkmod/libkmod.la
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -211,7 +226,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; testsuite-distclean:
 DISTCLEAN_LOCAL_HOOKS += testsuite-distclean
 EXTRA_DIST += testsuite/rootfs-pristine
 
-DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --sysconfdir=/etc --with-zlib
+DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --sysconfdir=/etc --with-zlib \
+  --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)
 
 distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
 
diff --git a/configure.ac b/configure.ac
index 566b317..af5ed52 100644
--- a/configure.ac
+++ b/configure.ac
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -76,6 +76,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AS_IF([test "x$with_zlib" != "xno"], [
 AC_MSG_NOTICE([zlib support not requested])
 ])
 
+AC_ARG_WITH([systemdsystemunitdir],
+            AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
+            [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
+if test "x$with_systemdsystemunitdir" != xno; then
+        AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
 
 #####################################################################
 # --enable-
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -200,6 +207,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; AC_MSG_RESULT([
 compiler:${CC}
 cflags:${with_cflags} ${CFLAGS}
 ldflags:${with_ldflags} ${LDFLAGS}
+systemdsystemunitdir:   ${with_systemdsystemunitdir}
 
 tools:${enable_tools}
 logging:${enable_logging}
diff --git a/tools/kmod-static-nodes.service.in b/tools/kmod-static-nodes.service.in
new file mode 100644
index 0000000..be8482e
--- /dev/null
+++ b/tools/kmod-static-nodes.service.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,16 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#  This file is part of kmod.
+#
+#  kmod is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Create list of static nodes to be created in /dev
+DefaultDependencies=no
+Before=sysinit.target systemd-static-nodes.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/mkdir -p /run/tmpfiles.d
+ExecStart=&amp;lt; at &amp;gt;prefix&amp;lt; at &amp;gt;/bin/kmod static-nodes tmpfiles --output=/run/tmpfiles.d/kmod.conf
diff --git a/tools/kmod.c b/tools/kmod.c
index ebb8875..347bb7d 100644
--- a/tools/kmod.c
+++ b/tools/kmod.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -37,6 +37,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static const struct kmod_cmd kmod_cmd_help;
 static const struct kmod_cmd *kmod_cmds[] = {
 &amp;amp;kmod_cmd_help,
 &amp;amp;kmod_cmd_list,
+&amp;amp;kmod_cmd_static_nodes,
 };
 
 static const struct kmod_cmd *kmod_compat_cmds[] = {
diff --git a/tools/kmod.h b/tools/kmod.h
index 80fa4c2..68a646a 100644
--- a/tools/kmod.h
+++ b/tools/kmod.h
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -35,5 +35,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; extern const struct kmod_cmd kmod_cmd_compat_modprobe;
 extern const struct kmod_cmd kmod_cmd_compat_depmod;
 
 extern const struct kmod_cmd kmod_cmd_list;
+extern const struct kmod_cmd kmod_cmd_static_nodes;
 
 #include "log.h"
diff --git a/tools/static-nodes.c b/tools/static-nodes.c
new file mode 100644
index 0000000..a79fc3d
--- /dev/null
+++ b/tools/static-nodes.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,163 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+/*
+ * kmod-static-nodes - manage modules.devname
+ *
+ * Copyright (C) 2004-2012 Kay Sievers &amp;lt;kay&amp;lt; at &amp;gt;vrfy.org&amp;gt;
+ * Copyright (C) 2011-2013  ProFUSION embedded systems
+ * Copyright (C) 2013 Tom Gundersen &amp;lt;teg&amp;lt; at &amp;gt;jklm.no&amp;gt;
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.
+ */
+
+#include &amp;lt;stdio.h&amp;gt;
+#include &amp;lt;stdlib.h&amp;gt;
+#include &amp;lt;stddef.h&amp;gt;
+#include &amp;lt;getopt.h&amp;gt;
+#include &amp;lt;errno.h&amp;gt;
+#include &amp;lt;unistd.h&amp;gt;
+#include &amp;lt;string.h&amp;gt;
+#include &amp;lt;limits.h&amp;gt;
+#include &amp;lt;sys/utsname.h&amp;gt;
+#include &amp;lt;sys/stat.h&amp;gt;
+#include &amp;lt;sys/types.h&amp;gt;
+#include "libkmod-util.h"
+
+#include "kmod.h"
+
+static const char cmdopts_s[] = "o:h";
+static const struct option cmdopts[] = {
+        { "output", required_argument, 0, 'o'},
+        { "help", no_argument, 0, 'h'},
+        { },
+};
+
+static void help(void)
+{
+        printf("Usage:\n"
+                "\t%s static-nodes format [options]\n"
+                "\n"
+                "kmod static-nodes outputs the static-node information of the currently running kernel.\n"
+                "\n"
+                "Options:\n"
+                "\t-o, --output=FILE  write output to file\n"
+                "\t-h, --help         show this help\n"
+                "\n"
+                "Formats:\n"
+                "  tmpfiles    the tmpfiles.d(5) used by systemd-tmpfiles.\n",
+                program_invocation_short_name);
+}
+
+static int write_tmpfile(FILE *in, FILE *out) {
+        char buf[4096];
+        int ret = EXIT_SUCCESS;
+
+        while (fgets(buf, sizeof(buf), in) != NULL) {
+                char devname[PATH_MAX];
+                char type;
+                unsigned int maj, min;
+                int matches;
+
+                if (buf[0] == '#')
+                        continue;
+
+                matches = sscanf(buf, "%*s %s %c%u:%u", devname, &amp;amp;type, &amp;amp;maj, &amp;amp;min);
+                if (matches != 4 || (type != 'c' &amp;amp;&amp;amp; type != 'b')) {
+                        fprintf(stderr, "Error: invalid devname entry: %s", buf);
+                        ret = EXIT_FAILURE;
+                        continue;
+                }
+
+                fprintf(out, "%c /dev/%s 0600 - - - %u:%u\n", type, devname, maj, min);
+        }
+
+        return ret;
+}
+
+static int do_static_nodes(int argc, char *argv[])
+{
+        struct utsname kernel;
+        char modules[PATH_MAX];
+        FILE *in = NULL, *out = stdout;
+        int ret = EXIT_SUCCESS;
+
+        for (;;) {
+                int c, idx = 0;
+
+                c = getopt_long(argc - 1, argv + 1, cmdopts_s, cmdopts, &amp;amp;idx);
+                if (c == -1) {
+                        break;
+                }
+                switch (c) {
+                case 'o':
+                        out = fopen(optarg, "we");
+                        if (out == NULL) {
+                                fprintf(stderr, "Error: could not create %s!\n", optarg);
+                                ret = EXIT_FAILURE;
+                                goto finish;
+                        }
+                        break;
+                case 'h':
+                        help();
+                        goto finish;
+                case '?':
+                        ret = EXIT_FAILURE;
+                        goto finish;
+                default:
+                        fprintf(stderr, "Unexpected commandline option '%c'.\n", c);
+                        help();
+                        ret = EXIT_FAILURE;
+                        goto finish;
+                }
+        }
+
+        if (argc &amp;lt; 2) {
+                help();
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+
+        if (!streq(argv[1], "tmpfiles")) {
+                fprintf(stderr, "Unknown format: '%s'.\n", argv[1]);
+                help();
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+
+        if (uname(&amp;amp;kernel) &amp;lt; 0) {
+                fputs("Error: uname failed!\n", stderr);
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+        snprintf(modules, sizeof(modules), "/lib/modules/%s/modules.devname", kernel.release);
+        in = fopen(modules, "re");
+        if (in == NULL &amp;amp;&amp;amp; errno != ENOENT) {
+                fprintf(stderr, "Error: could not open /lib/modules/%s/modules.devname!\n", kernel.release);
+                ret = EXIT_FAILURE;
+                goto finish;
+        }
+
+        ret = write_tmpfile(in, out);
+
+finish:
+        if (in)
+                fclose(in);
+        if (out)
+                fclose(out);
+        return ret;
+}
+
+const struct kmod_cmd kmod_cmd_static_nodes = {
+.name = "static-nodes",
+.cmd = do_static_nodes,
+.help = "outputs the static-node information of the currently running kernel",
+};
&lt;/pre&gt;</description>
    <dc:creator>Tom Gundersen</dc:creator>
    <dc:date>2013-04-13T00:15:45</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17701">
    <title>Disabling device</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17701</link>
    <description>&lt;pre&gt;Hello,
I want to tell udev in RHEL6 _not_ to create a hard drive device in 
/dev/ identified by (for example) serial number. I see two problems:
1. AFAIK it is not possible to disable device creation in udev/rules.d/
2. It is not possible to identify device by serial number in udev. When 
I run: udevadm info -a -p $(udevadm info -q path -n /dev/sdak)
, it does not show me serial or other identifying information.

I need to get rid of this device because I'm sharing one disk array 
between two servers and both of them see all devices in the array.
I want to make sure the two servers are not accessing the drives 
simultaneously.

-Stefan
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Štefan Sakalík</dc:creator>
    <dc:date>2013-04-11T16:16:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17700">
    <title>[PATCH] [RFC] udevd: let tmpfiles create all static nodes</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17700</link>
    <description>&lt;pre&gt;systemd-tmpfiles has had support for creation of static nodes for some time (to
replace copying nodes from /lib/udev/). Make sure these nodes are created before
udev is started.

Also, drop support for creating static nodes based on modules.devname from
systemd-udevd. This allows it to run witohut CAP_MKNOD, moreover we no longer
need to parse /usr/lib/modules/*/modules.devname.

As a replacement for udevd's functionality, we let kmod generate a tmpfiles.d
fragment based on the correct modules.devname file (see separate patch). We
might want to split the kmod call out into its own unit file and ship that with
kmod instead.

Note: one functional change is that we no longer update the creation time on
already existing device nodes. Is this important? If so, should tmpfiles learn to
do that?

Cc: &amp;lt;linux-modules&amp;lt; at &amp;gt;vger.kernel.org&amp;gt;
Cc: &amp;lt;linux-hotplug&amp;lt; at &amp;gt;vger.kernel.org&amp;gt;
---
 Makefile.am                           |  5 +++
 TODO                                  |  4 --
 src/udev/udevd.c                      | 72 -----------------------------------
 units/systemd-static-nodes.service.in | 17 +++++++++
 units/systemd-udevd.service.in        |  5 +--
 5 files changed, 24 insertions(+), 79 deletions(-)
 create mode 100644 units/systemd-static-nodes.service.in

diff --git a/Makefile.am b/Makefile.am
index ec81f53..3c6adcb 100644
--- a/Makefile.am
+++ b/Makefile.am
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -427,6 +427,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; nodist_systemunit_DATA = \
 units/systemd-kexec.service \
 units/systemd-fsck&amp;lt; at &amp;gt;.service \
 units/systemd-fsck-root.service \
+units/systemd-static-nodes.service \
 units/systemd-udevd.service \
 units/systemd-udev-trigger.service \
 units/systemd-udev-settle.service \
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -468,6 +469,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; EXTRA_DIST += \
 units/systemd-fsck&amp;lt; at &amp;gt;.service.in \
 units/systemd-fsck-root.service.in \
 units/user&amp;lt; at &amp;gt;.service.in \
+units/systemd-static-nodes.service \
 units/systemd-udevd.service \
 units/systemd-udev-trigger.service \
 units/systemd-udev-settle.service \
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1925,11 +1927,13 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; CLEANFILES += \
 src/udev/udev.pc
 
 EXTRA_DIST += \
+units/systemd-static-nodes.service.in \
 units/systemd-udevd.service.in \
 units/systemd-udev-trigger.service.in \
 units/systemd-udev-settle.service.in
 
 CLEANFILES += \
+units/systemd-static-nodes.service \
 units/systemd-udevd.service \
 units/systemd-udev-trigger.service \
 units/systemd-udev-settle.service
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1938,6 +1942,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; SOCKETS_TARGET_WANTS += \
 systemd-udevd-control.socket \
 systemd-udevd-kernel.socket
 SYSINIT_TARGET_WANTS += \
+systemd-static-nodes.service \
 systemd-udevd.service \
 systemd-udev-trigger.service
 
diff --git a/TODO b/TODO
index 369fb78..d70732d 100644
--- a/TODO
+++ b/TODO
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -51,10 +51,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; Features:
   so that the coredump is properly written to the user's own journal
   file.
 
-* move /usr/lib/modules/$(uname -r)/modules.devname parsing from udevd to
-   kmod static-nodes
-  call kmod as an early service, and drop CAP_MKNOD from udevd.service
-
 * systemd-delta needs to be made aware of *.d/*.conf drop-in files for
   units.
 
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 2d9093d..642ca43 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -812,77 +812,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; static void handle_signal(struct udev *udev, int signo)
         }
 }
 
-static void static_dev_create_from_modules(struct udev *udev)
-{
-        struct utsname kernel;
-        char modules[UTIL_PATH_SIZE];
-        char buf[4096];
-        FILE *f;
-
-        if (uname(&amp;amp;kernel) &amp;lt; 0) {
-                log_error("uname failed: %m");
-                return;
-        }
-
-        strscpyl(modules, sizeof(modules), ROOTPREFIX "/lib/modules/", kernel.release, "/modules.devname", NULL);
-        f = fopen(modules, "re");
-        if (f == NULL)
-                return;
-
-        while (fgets(buf, sizeof(buf), f) != NULL) {
-                char *s;
-                const char *modname;
-                const char *devname;
-                const char *devno;
-                int maj, min;
-                char type;
-                mode_t mode;
-                char filename[UTIL_PATH_SIZE];
-
-                if (buf[0] == '#')
-                        continue;
-
-                modname = buf;
-                s = strchr(modname, ' ');
-                if (s == NULL)
-                        continue;
-                s[0] = '\0';
-
-                devname = &amp;amp;s[1];
-                s = strchr(devname, ' ');
-                if (s == NULL)
-                        continue;
-                s[0] = '\0';
-
-                devno = &amp;amp;s[1];
-                s = strchr(devno, ' ');
-                if (s == NULL)
-                        s = strchr(devno, '\n');
-                if (s != NULL)
-                        s[0] = '\0';
-                if (sscanf(devno, "%c%u:%u", &amp;amp;type, &amp;amp;maj, &amp;amp;min) != 3)
-                        continue;
-
-                mode  = 0600;
-                if (type == 'c')
-                        mode |= S_IFCHR;
-                else if (type == 'b')
-                        mode |= S_IFBLK;
-                else
-                        continue;
-
-                strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
-                mkdir_parents_label(filename, 0755);
-                label_context_set(filename, mode);
-                log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min);
-                if (mknod(filename, mode, makedev(maj, min)) &amp;lt; 0 &amp;amp;&amp;amp; errno == EEXIST)
-                        utimensat(AT_FDCWD, filename, NULL, 0);
-                label_context_clear();
-        }
-
-        fclose(f);
-}
-
 static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink)
 {
         int ctrl = -1, netlink = -1;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1067,7 +996,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int main(int argc, char *argv[])
         mkdir("/run/udev", 0755);
 
         dev_setup(NULL);
-        static_dev_create_from_modules(udev);
 
         /* before opening new files, make sure std{in,out,err} fds are in a sane state */
         if (daemonize) {
diff --git a/units/systemd-static-nodes.service.in b/units/systemd-static-nodes.service.in
new file mode 100644
index 0000000..8178c43
--- /dev/null
+++ b/units/systemd-static-nodes.service.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,17 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Create static device nodes in /dev
+DefaultDependencies=no
+Before=sysinit.target local-fs-pre.target
+ConditionCapability=CAP_MKNOD
+
+[Service]
+Type=oneshot
+ExecStart=&amp;lt; at &amp;gt;rootbindir&amp;lt; at &amp;gt;/kmod devname2tmpfile
+ExecStart=&amp;lt; at &amp;gt;rootbindir&amp;lt; at &amp;gt;/systemd-tmpfiles --prefix=/dev --create
diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in
index ddef423..c0dc4f2 100644
--- a/units/systemd-udevd.service.in
+++ b/units/systemd-udevd.service.in
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -9,10 +9,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
 Description=udev Kernel Device Manager
 Documentation=man:systemd-udevd.service(8) man:udev(7)
 DefaultDependencies=no
-Wants=systemd-udevd-control.socket systemd-udevd-kernel.socket
-After=systemd-udevd-control.socket systemd-udevd-kernel.socket
+Wants=systemd-static-nodes.service systemd-udevd-control.socket systemd-udevd-kernel.socket
+After=systemd-static-nodes.service systemd-udevd-control.socket systemd-udevd-kernel.socket
 Before=sysinit.target local-fs-pre.target
-ConditionCapability=CAP_MKNOD
 
 [Service]
 Type=notify
&lt;/pre&gt;</description>
    <dc:creator>Tom Gundersen</dc:creator>
    <dc:date>2013-04-11T15:48:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17698">
    <title>[ANNOUNCE] kmod 13</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17698</link>
    <description>&lt;pre&gt;ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-13.tar.xz
ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-13.tar.sign

New release of kmod 13, after some time accumulating bug fixes and new
features. This release got a bit delayed due to my marriage,
vacations, changing job and some new features getting into the kernel.
What else could happen at the same time? :-)

The most notable new features are the support for finit_module()
syscall and for signed modules. For finit_module() we try to be nice
with older kernels  and we fallback to init_module() if the new one is
not available. The older syscall is also used in case the module is
compressed.

There are also bug fixes and other minor new features. Check the NEWS
file. Thanks to everyone involved in this release. Shortlog is below.


Cheers,
Lucas De Marchi

---

Andrey Mazo (2):
      depmod: --symbol-prefix actually requires an argument
      depmod: fix builtin symbols resolution when the prefix symbol is set

Cristian Rodríguez (1):
      libkmod: Use secure_getenv if available

Josh Boyer (1):
      rmmod: Teach rmmod about builtin modules

Kees Cook (3):
      libkmod: add finit_module logic
      testsuite: handle finit_module
      libkmod: fix address argument to mmap calls

Lucas De Marchi (13):
      man: fix lib dir in which we look for config
      gitignore: ignore files generated by Automake's testsuite
      Update copyright notices
      libkmod-util: Add missing include file
      testsuite: Exit with success on signal if test has expected_fail=true
      testsuite: Add test to check if modprobe explodes on bogus config
      modprobe: Fix assertion on --show-depends with bogus config file
      libkmod: Add missing definitions
      libkmod: Move finit_module() definition to missing.h
      testsuite: Wrap syscall() to get calls to finit_module()
      testsuite: Fix checking __sysno
      build-sys: Always enable parallel tests
      kmod 13

Michal Marek (4):
      libkmod-module: Add helper for building the module info list
      libkmod-module: Do not free the list in kmod_module_info_append
      libkmod: Return module signature information in kmod_module_get_info()
      testsuite: Add modinfo test for module signatures
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Lucas De Marchi</dc:creator>
    <dc:date>2013-04-09T22:57:02</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17695">
    <title>device properties and change events</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17695</link>
    <description>&lt;pre&gt;I'm using udev-147 in CentOS 6.3.

I have two rules that import properties into the udev db. I'll use a
simplified example.

    IMPORT{program}="program1 %k"
    ACTION=="add", IMPORT{program}="program2 %N"

program1 exports MY_FOO, and program2 exports MY_BAR. I've noticed that
when a change event is triggered, MY_BAR is no longer available in the
udev database. So it appears change events clear the existing environment.
The work done in program2 is relatively expensive so I'd rather only run
it when the device is first added.

It looks like I can re-import MY_BAR if I use IMPORT{db} in a separate
rule:

    IMPORT{program}="program1 %k"
    ACTION=="add", IMPORT{program}="program2 %N"
    ACTION=="change", IMPORT{db}="MY_BAR"


Is this the correct approach? Or is there another way to persist the
properties that were imported during add, besides re-importing program2?

Also, is it possible to determine *what* causes a change event to occur?
With 'udevadm monitor' I can see change events being triggered whenever my
application exits (for the devices it has opened), and would like to
determine why. I was hoping udev could give me a hint.

-Keith

--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Keith Pine</dc:creator>
    <dc:date>2013-03-27T04:47:39</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17693">
    <title>Dell Latitude E6530 keymap</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17693</link>
    <description>&lt;pre&gt;I have a Dell Latitude E6530 laptop
(system vendor "Dell Inc.", product name "Latitude E6530").
A few of the keys are mapped incorrectly:

Fn+F5, Touchpad Toggle
----------------------

Fn+F5 is labeled on my keyboard with a "touchpad" icon, and in
udev 198, the line in /lib/udev/keymaps/dell for it is this:

0x9E f21 #touchpad toggle

Since we know it is "touchpad toggle" (and I confirm it is), and there
is a key name for that, how about changing this line to read thusly:

0x9E touchpad_toggle # Fn+F5

In the same "dell" file, 0xD9 is mapped the same ("f21 # touchpad toggle");
perhaps it also should be changed to send a real touchpad_toggle?


Fn+F8, LCD/CRT Switch
---------------------

Fn+F8 is labeled on my keyboard with an "LCD/CRT" icon.  
It sends two keycodes: Left_Win (aka "leftmeta"), then "p".
Can we get it to appear as a single "switchvideomode" key?
(If this is outside udev's domain, where should I look?)


Fn+End, Prnt Scrn
-----------------

The SysRq (Fn+Home) and Prnt Scrn (Fn+End) keys both send the same
scan code, 0xB7, which is mapped to "sysrq".  How can I get Prnt Scrn
to send something unique?

 &amp;lt; Stephen
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Stephen Gildea</dc:creator>
    <dc:date>2013-03-24T23:21:24</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17659">
    <title>[PATCH] udevadm-info: Don't access sysfs entries backing device I/Oport space</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17659</link>
    <description>&lt;pre&gt;
I've been working on identifying the root cause of an issue exposed by
'udevadm' that was first exposed on the linux-pci mail list [1] and
believe that there is now enough of an understanding to propose a fix.

What was originally witnessed was the platform hanging after "udevadm info
--attribute-walk --path=/sys/devices/pci0000:00/&amp;lt;...&amp;gt;/block/sda" is ran.
Xiangliang was able to isolate the failure to accesses involving a Marvell
9125 device's I/O BARs, or more specifically, accesses to the I/O port
space backing the device's I/O BARs (a.k.a. the device's I/O port
resources, or regions).  With this knowledge he was able to reproduce the
hang targeting the device's sysfs 'resource&amp;lt;N&amp;gt;' entries, where N
represents an I/O BARs, with "cat /sys/devices/&amp;lt;...&amp;gt;/resource&amp;lt;N&amp;gt;".

In my research, looking for possible solutions, I noticed that kernel
commit 8633328 introduced sysfs based reading and writing of I/O port
related 'resource&amp;lt;N&amp;gt;' entries as part of adding virtualization based
device assignment functionality [2].  Note that these regions directly map
to the device's control and status registers [3].

Putting together these pieces of information we now understand that:
  o  udevadm based attribute walking initiates read accesses of all the
     entries in a device's sysfs directory [4],
  o  sysfs 'resource&amp;lt;N&amp;gt;' entries correspond to the device's internal
     status and control registers used for driving the device,
  o  If the 'resource&amp;lt;N&amp;gt;' entry corresponds to a device's I/O BAR, the
     device's control and status registers are directly accessible by
     userspace.

Allowing userspace access to a device's registers introduces potential
simultaneous interaction with the device by a second, competing, entity;
There is the device's driver, which believes it exclusively owns the
device, and an unknown, potential second entity, which can effect control
and status changes to the device asynchronously.

Device status and control registers being accessed from an entity that has
no idea what is being read or written is just asking for trouble.  Even
just reading can have consequences as the register may be a "read once to
clear" or some similar type.  I think we have just been lucky, or
blissfully ignorant, concerning problems that may have, and still could
be, occurring due to this situation.


There is an aspect at play here that I still do not understand (likely
something obvious that I'm just not seeing).  The sysfs read routine for
accessing I/O port 'resource&amp;lt;N&amp;gt;' entries only supports 1, 2, and 4 byte
reads (which respectively correspond to inb/outb, inw/outw, and inl/outl
I/O port accessors).  When "udevadm ..." executes, the udev internals
attempt reads of 4K byte chunks.

  "udevadm info --attribute-walk --path=&amp;lt;pci_device_path&amp;gt;"

  print_device_chain()
    print_all_attributes()
      ...
      udev_device_get_sysattr_value()
        char value[4096];
        ...
        size = read(fd, value, sizeof(value));
        ...

  -- ^ userspace ^ -- v kernel v --

  pci_read_resource_io(..., count)# sysfs read setup in pci_create_attr()
    pci_resource_io(..., count, ...)
      ...
      if (port + count - 1 &amp;gt; pci_resource_end(pdev, i))
        return -EINVAL;
      ...

What I don't understand is how the device's I/O port space is successfully
getting read.  It looks to me like 'pci_resource_io()' would fail the
access size check and return '-EINVAL' having never attempted the read's
access to I/O port space causing the system to hang.

I'm keep looking into this but I do *not* have access to a platform with a
Marvell 9125 device.


Reference(s)/Foot Note(s):
  [1] https://lkml.org/lkml/2013/3/7/242
  [2] Note that due to the implementation specifics only the 'resource&amp;lt;N&amp;gt;'
      entries representing I/O BARs can be read or written via sysfs.
      Sysfs' 'resource&amp;lt;N&amp;gt;' entries representing MMIO do not have sysfs
      based read/write routines as only mmap'ing of these entries is
      exposed (./drivers/pci/pci-sysfs.c::pci_create_attr()).
  [3] The kernel's sysfs documentation states: "Attributes should be ASCII
      text files..." (./Documentation/filesystems/sysfs.txt).  I wonder if
      this is just out-of-date infomation as sysfs obviously supports
      creating binary files (./fs/sysfs/bin.c::sysfs_create_bin_file()).
  [4] Note that udevadm-info does skip a specifically named set of entries
      (./src/udevadm-info.c::skip_attribute()).
---

Myron Stowe (1):
      udevadm-info: Don't access sysfs 'resource&amp;lt;N&amp;gt;' files


 src/udevadm-info.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Myron Stowe</dc:creator>
    <dc:date>2013-03-16T21:35:12</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17650">
    <title>Logitech iTouch keyboard broken scan codes</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17650</link>
    <description>&lt;pre&gt;Hi, I have a Logitech "iTouch Internet Navigator" keyboard, with 5
broken scan codes.
Following the instructions from
/usr/share/doc/systemd/README.keymap.txt, I have:

$ /usr/lib/udev/findkeyboards
AT keyboard: input/event2

# /usr/lib/udev/keymap -i input/event2

(which corresponds to the keys labeled as)

0x91 shop    # Shopping
0x92 config  # iTouch
0x93 finance # Finance
0x94 prog1   # My Sites
0x95 prog2   # Community

I couldn't find something better in input.h for the last two, so I
chose prog1 and prog2.
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Götz Christ</dc:creator>
    <dc:date>2013-02-23T21:42:21</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17649">
    <title>Urgent From Governor Christian Noyer !!</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17649</link>
    <description>&lt;pre&gt;Hello Friend,

I need your assistance in transferring a deceased client fund worth of $18,500,000.00 Million US Dollars out of my Bank here in French central bank (Banque de France). If interested, kindly respond back to me immediately for further details on my proposed transaction.

Kind Regards,
Mr. Christian Noyer 
Governor, French central bank (Banque de France)

Reply Email: christiannoyer&amp;lt; at &amp;gt;aol.fr
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>christiannoyer&lt; at &gt;info.fr</dc:creator>
    <dc:date>2013-02-21T08:26:47</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17648">
    <title>Buisiness Proposal</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17648</link>
    <description>&lt;pre&gt;Hello Friend,

I need your assistance in transferring a deceased client fund worth of $18,500,000.00 Million US Dollars out of my Bank here in French central bank (Banque de France). If interested, kindly respond back to me immediately for further details on my proposed transaction.

Kind Regards,
Mr. Christian Noyer 
Governor, French central bank (Banque de France)

Reply Email: c_noyer&amp;lt; at &amp;gt;yahoo.fr
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>c_noyer&lt; at &gt;info.fr</dc:creator>
    <dc:date>2013-02-03T00:16:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17647">
    <title>Buisiness Proposal</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17647</link>
    <description>&lt;pre&gt;Hello Friend,

I need your assistance in transferring a deceased client fund worth of $18,500,000.00 Million US Dollars out of my Bank here in China Construction Bank (Hong Kong Branch). If interested, kindly respond back to me immediately for further details on my proposed transaction.

Kind Regards,
Mr. Zhang Jianguo.
(President) in China Construction Bank Corporation Hong Kong Branch (CCBHK).


Reply Email: zhangjianguo99&amp;lt; at &amp;gt;yahoo.com.hk
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>postmaster&lt; at &gt;TS1503.rapidns.com</dc:creator>
    <dc:date>2013-01-19T06:54:26</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17645">
    <title>udev errors for usb modems after kernel upgrade</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17645</link>
    <description>&lt;pre&gt;Hi;

After upgrading my kernel from 2.6.18 to 3.5.3. I started to get udev
errors when I plug in my usb modem device(errors are below). I think
this is causing my usb_modeswitch not to work properly. Same error
occurs for usb-storage devices too. Can you provide a solution or what
is the cause?

udev version: 095

Dec  5 12:20:18 2012 kernel: [74465.103460] usb 2-1.4: new high-speed
USB device number 36 using ehci_hcd
Dec  5 12:20:18 2012 kernel: [74465.194011] scsi62 : usb-storage 2-1.4:1.0
Dec  5 12:20:18 2012 kernel: [74465.194091] scsi63 : usb-storage 2-1.4:1.1
Dec  5 12:20:19 2012 kernel: [74466.196062] scsi 62:0:0:0: CD-ROM
      HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
Dec  5 12:20:19 2012 kernel: [74466.196441] scsi 63:0:0:0:
Direct-Access     HUAWEI   TF CARD Storage       PQ: 0 ANSI: 2
Dec  5 12:20:19 2012 kernel: [74466.198548] sr0: scsi-1 drive
Dec  5 12:20:19 2012 kernel: [74466.198630] sr 62:0:0:0: Attached scsi
generic sg1 type 5
Dec  5 12:20:19 2012 kernel: [74466.198719] sd 63:0:0:0: Attached scsi
generic sg2 type 0
Dec  5 12:20:19 2012 kernel: [74466.201555] sd 63:0:0:0: [sdb]
Attached SCSI removable disk
Dec  5 12:20:22 2012 udevd-event[18390]: wait_for_sysfs: waiting for
\'/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/host62/ioerr_cnt\'
failed
Dec  5 12:20:22 2012 udevd-event[18391]: wait_for_sysfs: waiting for
\'/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.1/host63/ioerr_cnt\'
failed
Dec  5 12:20:25 2012 udevd-event[18443]: wait_for_sysfs: waiting for
\'/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.1/host63/target63:0:0/ioerr_cnt\'
failed
Dec  5 12:20:25 2012 udevd-event[18442]: wait_for_sysfs: waiting for
\'/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/host62/target62:0:0/ioerr_cnt\'
failed

Thanks in advance.
--
Deniz Eren
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Deniz Eren</dc:creator>
    <dc:date>2012-12-05T11:24:50</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17644">
    <title>[ANNOUNCE] kmod 12</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17644</link>
    <description>&lt;pre&gt;kmod 12 is out:

ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-12.tar.xz
ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-12.tar.sign


Bug fix release only. Copying the NEWS section here for brevity:

       - Fix removing vermagic from module when told to force load a module
       - Fix removing __versions section when told to force load a module: we
         need to mangle the section header, not the section.
       - modinfo no longer fails while loading a module from file when path
         contains ".ko" substring

Interesting that there was no previous bug report of "modprobe -f"
failing, yet before this release it was not working properly. Maybe
people are not tainting their kernel as frequently as I imagined.

Shortlog is below.


Cheers
Lucas De Marchi

---

Aleksey Makarov (1):
      fix is_module_filename()

Lucas De Marchi (7):
      depmod: fix hash lookup by relpath instead of uncrelpath
      depmod: fix asserting mod-&amp;gt;kmod == NULL
      libkmod-module: Remove key+value vermagic from .modinfo section
      libkmod-module: mangle the section header, not the section
      Use bool instead of int
      depmod: fix checking file extension
      kmod 12
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Lucas De Marchi</dc:creator>
    <dc:date>2012-12-05T03:52:57</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17640">
    <title>udevadm monitor and atapi dvdrw</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17640</link>
    <description>&lt;pre&gt;Hi everybody,

I'm using Debian Sqeeze 6.0, kernel 2.6.32, udev version 164.
With kernel provided from debian my dvdrw is under scsi subsystem and 
udevadm monitor recognize optical disk change with a lot of info output 
suitable to write rules.
I've recompilated the kernel and things has changed, now my dvdrw is 
under ide/atapi subsystem and the device name is hdc now.
I'd like to write a rule that remove udf and crc_itu_t modules as soon 
as optical disk is left off from dvdrw drive. Example:

SUBSYSTEM=="block", KERNEL=="hdc", ACTION=="change", RUN+="/sbin/rmmod 
udf crc_itu_t"

I look at http://reactivated.net/writing_udev_rules.html but doesn't 
help for ide devices ACTION=="change".
Could anybody help me to write such a rule?

bye,

&lt;/pre&gt;</description>
    <dc:creator>Franco Martelli</dc:creator>
    <dc:date>2012-11-21T15:55:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17638">
    <title>DQ77KB 100% kworker or high pitch noise</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17638</link>
    <description>&lt;pre&gt;Hi,

I have an Intel motherboard DQ77KB which has a 2-pin header which says 
panel_off and a fresh Ubuntu 12.10 (3.5.0-18-generic
) install and a display connected via Displayport (DP1, not eDP1). If I 
connect the header in the running system a kworker process pops up with 
100% cpu usage. If I leave the header unconnected no kworker process 
runs, which is good, but a pitch noise comes from the motherboard, 
probably from some voltage regulators.

I am no programmer, and I don't understand much about the kernel. But I 
would like to get the problem solved. If I can be any help, please let 
me know.

Kind regards
Timo
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Timo</dc:creator>
    <dc:date>2012-11-16T12:31:29</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17637">
    <title>[PATCH] allow udev to correctly handle 'change' after device has disappeared</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17637</link>
    <description>&lt;pre&gt;From: Neil Brown &amp;lt;nfbrown&amp;lt; at &amp;gt;suse.com&amp;gt;
Date: Thu, 8 Nov 2012 10:39:06 +0100
Subject: [PATCH] If a 'change' event does not get handled by udev until
after the device has subsequently disappeared, udev mis-handles
 it. This can happen with 'md' devices which emit a change
 event and then a remove event when they are stopped. It is
 normally only noticed if udev is very busy (lots of arrays
 being stopped at once) or the machine is otherwise loaded
 and reponding slowly.

There are two problems.

1/ udev_device_new_from_syspath() will refuse to create the device
  structure if the device does not exist in /sys, and particularly if
the uevent file does not exist.
  If a 'db' file does exist, that is sufficient evidence that the device
  is genuine and should be created.  Equally if we have just received an
  event from the kernel about the device, it must be real.

  This patch just disabled the test for the 'uevent' file, it doesn't
  try imposing any other tests - it isn't clear that they are really
  needed.

2/ udev_event_execute_rules() calls udev_device_read_db() on a 'device'
   structure that is largely uninitialised and in particular does not
   have the 'subsystem' set.  udev_device_read_db() needs the subsystem
   so it tries to read the 'subsystem' symlink out of sysfs.  If the
device is already deleted, this naturally fails.
   udev_event_execute_rules() knows the subsystem (as it was in the
event message) so this patch simply sets the subsystem for the device
structure to be loaded to match the subsystem of the device structure
that is handling the event.

With these two changes, deleted handling of change events will still
correctly remove any symlinks that are not needed any more.

---
 src/libudev/libudev-device.c |    2 --
 src/udev/udev-event.c        |    2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index 08476e6..0ea5afe 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -662,8 +662,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; _public_ struct udev_device
*udev_device_new_from_syspath(struct udev *udev, con 
                 /* all "devices" require a "uevent" file */
                 util_strscpyl(file, sizeof(file), path, "/uevent",
NULL);
-                if (stat(file, &amp;amp;statbuf) != 0)
-                        return NULL;
         } else {
                 /* everything else just needs to be a directory */
                 if (stat(path, &amp;amp;statbuf) != 0
|| !S_ISDIR(statbuf.st_mode)) diff --git a/src/udev/udev-event.c
b/src/udev/udev-event.c index 2b9fdf6..bc936f4 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -799,6 +799,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; int udev_event_execute_rules(struct udev_event
*event, struct udev_rules *rules, } else {
                 event-&amp;gt;dev_db =
udev_device_new_from_syspath(event-&amp;gt;udev,
udev_device_get_syspath(dev)); if (event-&amp;gt;dev_db != NULL) {
+udev_device_set_subsystem(event-&amp;gt;dev_db,
+
udev_device_get_subsystem(dev)); udev_device_read_db(event-&amp;gt;dev_db,
NULL); udev_device_set_info_loaded(event-&amp;gt;dev_db);
 
&lt;/pre&gt;</description>
    <dc:creator>Robert Milasan</dc:creator>
    <dc:date>2012-11-08T09:42:08</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17636">
    <title>[ANNOUNCE] kmod 11</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17636</link>
    <description>&lt;pre&gt;kmod 11 is out:

ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-11.tar.xz
ftp://ftp.kernel.org/pub/linux/utils/kernel/kmod/kmod-11.tar.sign

This is the greatest release ever for those using compressed modules
(I'd like to rather remove it, but some distros are using it so it's
unlikely to happen soon). When using compressed modules there was a
bug regarding modules.order since forever. Now distros don't have to
tweak this file anymore and user can freely mix compressed and
non-compressed modules.

The time needed for running depmod has been greatly reduced with this
release. And this is not exclusive to those using compressed modules.
For non-compressed modules there were reports of a speedup of 3x in
depmod. Check http://git.kernel.org/?p=utils/kernel/kmod/kmod.git;a=commit;h=1eff942e37adda55bd8c506d4e2a7970fdbf7a74
for details... the timings got improved even more after that commit.

Testsuite also got bug fixes and is now capable of comparing output
files to decide if a test succeeded. Other projects using our
testsuite should upgrade to this new version.

Due to the major refactor in depmod needed to accomplish the speedup
mentioned above, I thought about releasing a -rc1 but then decided to
go straight with a release since it would probably not help a lot.
Please give it more time than usual in your distro testing repository.
If a major bug is found I'll just release another version sooner than
usual.

Last but not least, "--wait" option to rmmod is gone. Or at least it's
now hidden and causing a sleep of 10s if user decides to use it. The
reason is that this feature is being deprecated on kernel side since
it doesn't have any good reason to exist and causes some pain to
maintain.

Take a look in NEWS file for more details on changes. Shortlog is below.

Cheers!
Lucas De Marchi

---

Dave Reisner (5):
      Revert "build-sys: disable jobserver for rootfs target"
      Define rootfs as dependency of check-am
      Makefile: remove redundant flags to $(RM)
      modinfo: clarify verbiage for field shortcuts
      build-sys: Remove --with-rootprefix option

Jan Engelhardt (1):
      NEWS: language corrections

Leandro Pereira (1):
      libkmod-hash: Plug possible memory leak when free_value is defined

Lucas De Marchi (38):
      testsuite: Fix double definition of 64-bits variant
      build-sys: Append -Werror when testing flags
      depmod: fix parsing of modules.order with compressed modules
      testsuite: allow to check generated files
      testsuite: add depmod test for modules.alias
      libkmod: Add support for '.' in module parameter on kcmdline
      rmmod: Deprecate --wait option
      libkmod: cache open file for later access
      build-sys: use AS_IF autoconf macro
      depmod: do not create a hole in struct depmod
      depmod: cache info_list in struct mod
      depmod: cache dependency_symbol list in struct mod
      depmod: use our copy of modname instead of calling libkmod
      depmod: unref kmod_module once we don't need it anymore
      modprobe: exit in one place
      modprobe: use prio_to_str() helper
      modprobe: prefix libkmod messages to stderr with modprobe:
      modprobe: move log function
      modprobe: prefix log messages to stderr with modprobe
      modprobe: use ERR() instead of fprintf(stderr, ...)
      depmod: prefer ERR and WRN over plain fprintf
      TODO: update file with tasks
      depmod: remove inline from _log
      depmod: add depmod prefix to log messages
      insmod: prefer ERR over plain fprintf
      modinfo: prefer ERR over plain fprintf
      rmmod: prefer ERR over plain fprintf
      rmmod: route all messages to syslog if told to
      tools: share getting program name from argv for all tools
      tools: share function to convert prio to string
      tools: make usage() messages go to stdout rather than stderr
      tools: use a single function for logging libkmod output
      tools: share setting up libkmod log
      tools: share function for logging
      tools: staticize functions that are now only used in log.c
      tools: use program_invocation_short_name provided by libc
      TODO: remove completed action
      kmod 11

Sami Kerola (1):
      build-sys: require xsltproc when manpages are enabled
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Lucas De Marchi</dc:creator>
    <dc:date>2012-11-08T05:02:00</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.linux.hotplug.devel/17614">
    <title>(unknown)</title>
    <link>http://comments.gmane.org/gmane.linux.hotplug.devel/17614</link>
    <description>&lt;pre&gt;systemd-devel&amp;lt; at &amp;gt;lists.freedesktop.org
Bcc: 
Subject: Re: segfault at start-up with systemd 190
Reply-To: 
In-Reply-To: &amp;lt;alpine.LNX.2.01.1209221048040.481&amp;lt; at &amp;gt;waverley.dhcp.wfu.edu&amp;gt;

On Sat, Sep 22, 2012 at 11:01:43AM -0400, Allin Cottrell wrote:

191 does not fix this:

https://bugs.freedesktop.org/show_bug.cgi?id=55213

Cheers,
Dave
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" 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>Dave Reisner</dc:creator>
    <dc:date>2012-09-22T15:13:49</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.linux.hotplug.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.linux.hotplug.devel</link>
  </textinput>
</rdf:RDF>
