summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2013-03-27 12:08:31 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-03-27 12:57:49 +0000
commitf17316600204426a2c0d1dce104fed076fe5e5ca (patch)
treebd228e8e9ab315a1153de375fc4eecc6b5a46fd7 /meta/recipes-core
parenteddba86f51d210c70568b77ba516d61d2b81177e (diff)
downloadpoky-f17316600204426a2c0d1dce104fed076fe5e5ca.tar.gz
systemd: Upgrade to 198
Tested on ppc and x86_64 compile tested for uclibc (From OE-Core rev: effb345e6c84158066620a90e224ad25ba79db34) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core')
-rw-r--r--meta/recipes-core/systemd/systemd/0001-systemd-analyze-rewrite-in-C.patch1087
-rw-r--r--meta/recipes-core/systemd/systemd/systemd-pam-fix-msformat.patch140
-rw-r--r--meta/recipes-core/systemd/systemd/udev-linkage.patch62
-rw-r--r--meta/recipes-core/systemd/systemd_198.bb (renamed from meta/recipes-core/systemd/systemd_197.bb)10
4 files changed, 75 insertions, 1224 deletions
diff --git a/meta/recipes-core/systemd/systemd/0001-systemd-analyze-rewrite-in-C.patch b/meta/recipes-core/systemd/systemd/0001-systemd-analyze-rewrite-in-C.patch
deleted file mode 100644
index b278390fef..0000000000
--- a/meta/recipes-core/systemd/systemd/0001-systemd-analyze-rewrite-in-C.patch
+++ /dev/null
@@ -1,1087 +0,0 @@
1Upstream-Status: Pending
2
3From 523f304facdf3dbc09dbcdcff500ddce60274987 Mon Sep 17 00:00:00 2001
4From: Peeters Simon <peeters.simon@gmail.com>
5Date: Thu, 17 Jan 2013 14:34:25 -0800
6Subject: [PATCH] systemd-analyze: rewrite in C.
7
8Written by Peeters Simon <peeters.simon@gmail.com>. Makefile stuff
9and cleaned up a bit by Auke Kok <auke-jan.h.kok@intel.com>.
10---
11 Makefile.am | 21 +-
12 src/analyze/systemd-analyze.c | 684 +++++++++++++++++++++++++++++++++++++++++
13 src/analyze/systemd-analyze.in | 328 --------------------
14 3 files changed, 694 insertions(+), 339 deletions(-)
15 create mode 100644 src/analyze/systemd-analyze.c
16 delete mode 100755 src/analyze/systemd-analyze.in
17
18Index: systemd-197/Makefile.am
19===================================================================
20--- systemd-197.orig/Makefile.am 2013-01-07 17:37:15.391966148 -0800
21+++ systemd-197/Makefile.am 2013-01-24 10:06:11.219490786 -0800
22@@ -185,7 +185,8 @@
23 systemd-ask-password \
24 systemd-tty-ask-password-agent \
25 systemd-tmpfiles \
26- systemd-machine-id-setup
27+ systemd-machine-id-setup \
28+ systemd-analyze
29
30 bin_PROGRAMS = \
31 systemd-cgls \
32@@ -220,14 +221,16 @@
33 systemd-fstab-generator \
34 systemd-system-update-generator
35
36-dist_bin_SCRIPTS = \
37- src/analyze/systemd-analyze
38+systemd_analyze_SOURCES = \
39+ src/analyze/systemd-analyze.c
40
41-EXTRA_DIST += \
42- src/analyze/systemd-analyze.in
43+systemd_analyze_CFLAGS = \
44+ $(AM_CFLAGS) \
45+ $(DBUS_CFLAGS)
46
47-CLEANFILES += \
48- src/analyze/systemd-analyze
49+systemd_analyze_LDADD = \
50+ libsystemd-shared.la \
51+ libsystemd-dbus.la
52
53 dist_bashcompletion_DATA = \
54 shell-completion/systemd-bash-completion.sh
55@@ -3839,10 +3842,6 @@
56 $(SED_PROCESS)
57 $(AM_V_GEN)chmod +x $@
58
59-src/analyze/systemd-analyze: %: %.in Makefile
60- $(SED_PROCESS)
61- $(AM_V_GEN)chmod +x $@
62-
63 src/%.c: src/%.gperf
64 $(AM_V_at)$(MKDIR_P) $(dir $@)
65 $(AM_V_GEN)$(GPERF) < $< > $@
66Index: systemd-197/src/analyze/systemd-analyze.c
67===================================================================
68--- /dev/null 1970-01-01 00:00:00.000000000 +0000
69+++ systemd-197/src/analyze/systemd-analyze.c 2013-01-24 10:06:11.219490786 -0800
70@@ -0,0 +1,684 @@
71+#include <stdio.h>
72+#include <stdlib.h>
73+#include <getopt.h>
74+#include <locale.h>
75+
76+#include "install.h"
77+#include "log.h"
78+#include "dbus-common.h"
79+#include "build.h"
80+#include "util.h"
81+
82+#define svg(...) printf(__VA_ARGS__)
83+
84+static UnitFileScope arg_scope = UNIT_FILE_SYSTEM;
85+
86+struct unit_times {
87+ char *name;
88+ unsigned long long int ixt;
89+ unsigned long long int iet;
90+ unsigned long long int axt;
91+ unsigned long long int aet;
92+};
93+
94+
95+unsigned long long int property_getull(
96+ DBusConnection *bus,
97+ const char *dest,
98+ const char *path,
99+ const char *interface,
100+ const char *property)
101+{
102+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
103+ DBusMessageIter iter, sub;
104+ unsigned long long int result = 0;
105+ union {
106+ char byte;
107+ dbus_int16_t i16;
108+ dbus_uint16_t u16;
109+ dbus_int32_t i32;
110+ dbus_uint32_t u32;
111+ dbus_int64_t i64;
112+ dbus_uint64_t u64;
113+ } dbus_result;
114+
115+ int r = bus_method_call_with_reply (
116+ bus,
117+ dest,
118+ path,
119+ "org.freedesktop.DBus.Properties",
120+ "Get",
121+ &reply,
122+ NULL,
123+ DBUS_TYPE_STRING, &interface,
124+ DBUS_TYPE_STRING, &property,
125+ DBUS_TYPE_INVALID);
126+ if (r)
127+ goto finish;
128+
129+ if (!dbus_message_iter_init(reply, &iter) ||
130+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT)
131+ goto finish;
132+
133+ dbus_message_iter_recurse(&iter, &sub);
134+
135+ switch(dbus_message_iter_get_arg_type(&sub)) {
136+ case DBUS_TYPE_BYTE:
137+ dbus_message_iter_get_basic(&sub, &dbus_result.byte);
138+ result = dbus_result.byte;
139+ break;
140+ case DBUS_TYPE_INT16:
141+ dbus_message_iter_get_basic(&sub, &dbus_result.i16);
142+ result = dbus_result.i16;
143+ break;
144+ case DBUS_TYPE_UINT16:
145+ dbus_message_iter_get_basic(&sub, &dbus_result.u16);
146+ result = dbus_result.u16;
147+ break;
148+ case DBUS_TYPE_INT32:
149+ dbus_message_iter_get_basic(&sub, &dbus_result.i32);
150+ result = dbus_result.i32;
151+ break;
152+ case DBUS_TYPE_UINT32:
153+ dbus_message_iter_get_basic(&sub, &dbus_result.u32);
154+ result = dbus_result.u32;
155+ break;
156+ case DBUS_TYPE_INT64:
157+ dbus_message_iter_get_basic(&sub, &dbus_result.i64);
158+ result = dbus_result.i64;
159+ break;
160+ case DBUS_TYPE_UINT64:
161+ dbus_message_iter_get_basic(&sub, &dbus_result.u64);
162+ result = dbus_result.u64;
163+ break;
164+ default:
165+ goto finish;
166+ }
167+finish:
168+ return result;
169+}
170+
171+static int compare_unit_times1(const void *a, const void *b) {
172+ const struct unit_times *u = a, *v = b;
173+
174+ return (int)(v->aet - v->ixt) - (int)(u->aet - u->ixt);
175+}
176+
177+static int compare_unit_times2(const void *a, const void *b) {
178+ const struct unit_times *u = a, *v = b;
179+
180+ return (long long int)(u->ixt) - (long long int)(v->ixt);
181+}
182+
183+int acquire_time_data(DBusConnection *bus, struct unit_times **out)
184+{
185+ _cleanup_dbus_message_unref_ DBusMessage *reply = NULL;
186+ DBusMessageIter iter, sub, sub2;
187+ unsigned int c = 0, n_units = 0;
188+ struct unit_times *unit_times = NULL;
189+ int r = bus_method_call_with_reply (
190+ bus,
191+ "org.freedesktop.systemd1",
192+ "/org/freedesktop/systemd1",
193+ "org.freedesktop.systemd1.Manager",
194+ "ListUnits",
195+ &reply,
196+ NULL,
197+ DBUS_TYPE_INVALID);
198+ if (r)
199+ goto finish;
200+
201+ if (!dbus_message_iter_init(reply, &iter) ||
202+ dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
203+ dbus_message_iter_get_element_type(&iter) != DBUS_TYPE_STRUCT) {
204+ log_error("Failed to parse reply.");
205+ r = -EIO;
206+ goto finish;
207+ }
208+
209+ dbus_message_iter_recurse(&iter, &sub);
210+
211+ while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID) {
212+ struct unit_times *u;
213+ char *path;
214+
215+ if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRUCT) {
216+ log_error("Failed to parse reply.");
217+ r = -EIO;
218+ goto finish;
219+ }
220+
221+ if (c >= n_units) {
222+ struct unit_times *w;
223+
224+ n_units = MAX(2*c, 16);
225+ w = realloc(unit_times, sizeof(struct unit_times) * n_units);
226+
227+ if (!w) {
228+ log_error("Failed to allocate unit array.");
229+ r = -ENOMEM;
230+ goto finish;
231+ }
232+
233+ unit_times = w;
234+ }
235+ u = unit_times+c;
236+
237+ dbus_message_iter_recurse(&sub, &sub2);
238+
239+ if (bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_STRING, &u->name, true) < 0 ||
240+ dbus_message_iter_next(&sub2), dbus_message_iter_next(&sub2), dbus_message_iter_next(&sub2),
241+ dbus_message_iter_next(&sub2), dbus_message_iter_next(&sub2),
242+ bus_iter_get_basic_and_next(&sub2, DBUS_TYPE_OBJECT_PATH, &path, true) < 0) {
243+ log_error("Failed to parse reply.");
244+ r = -EIO;
245+ goto finish;
246+ }
247+ u->name = strdup(u->name);
248+ u->ixt = property_getull(bus,
249+ "org.freedesktop.systemd1",
250+ path,
251+ "org.freedesktop.systemd1.Unit",
252+ "InactiveExitTimestampMonotonic");
253+ u->iet = property_getull(bus,
254+ "org.freedesktop.systemd1",
255+ path,
256+ "org.freedesktop.systemd1.Unit",
257+ "InactiveEnterTimestampMonotonic");
258+ u->axt = property_getull(bus,
259+ "org.freedesktop.systemd1",
260+ path,
261+ "org.freedesktop.systemd1.Unit",
262+ "ActiveExitTimestampMonotonic");
263+ u->aet = property_getull(bus,
264+ "org.freedesktop.systemd1",
265+ path,
266+ "org.freedesktop.systemd1.Unit",
267+ "ActiveEnterTimestampMonotonic");
268+ dbus_message_iter_next(&sub);
269+ if (u->ixt == 0)
270+ continue;
271+ c++;
272+ }
273+
274+ *out = unit_times;
275+ return c;
276+finish:
277+ free(unit_times);
278+ return r;
279+}
280+
281+static void svg_graph_box(int height, long long int begin, long long int end, float scale_x, float scale_y)
282+{
283+ double d = 0.0;
284+ int i = 0;
285+
286+ /* outside box, fill */
287+ svg("<rect class=\"box\" x=\"%.03f\" y=\"0\" width=\"%.03f\" height=\"%.03f\" />\n",
288+ 0,
289+ scale_x * (end - begin),
290+ scale_y * height);
291+
292+ for (d = 0.000001 * begin; d <= 0.000001 * end;
293+ d += 0.1) {
294+ /* lines for each second */
295+ if (i % 50 == 0)
296+ svg(" <line class=\"sec5\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n",
297+ scale_x * d,
298+ scale_x * d,
299+ scale_y * height);
300+ else if (i % 10 == 0)
301+ svg(" <line class=\"sec1\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n",
302+ scale_x * d,
303+ scale_x * d,
304+ scale_y * height);
305+ else
306+ svg(" <line class=\"sec01\" x1=\"%.03f\" y1=\"0\" x2=\"%.03f\" y2=\"%.03f\" />\n",
307+ scale_x * d,
308+ scale_x * d,
309+ scale_y * height);
310+
311+ /* time label */
312+ if (i % 10 == 0)
313+ svg(" <text class=\"sec\" x=\"%.03f\" y=\"%.03f\" >%.01fs</text>\n",
314+ scale_x * d, -5.0, d);
315+
316+ i++;
317+ }
318+}
319+
320+int analyze_plot(DBusConnection *bus)
321+{
322+ struct unit_times *times;
323+ int n = acquire_time_data(bus, &times);
324+ int m = n + 1;
325+ unsigned long long int firmware_time, loader_time, kernel_time, initrd_time, userspace_time, finish_time;
326+ long long int starttime = 0;
327+
328+ float scale_x = 100.0;
329+ float scale_y = 20.0;
330+
331+ if (n<=0)
332+ return -n;
333+
334+ qsort(times, n, sizeof(struct unit_times), compare_unit_times2);
335+
336+ firmware_time = property_getull(bus,
337+ "org.freedesktop.systemd1",
338+ "/org/freedesktop/systemd1",
339+ "org.freedesktop.systemd1.Manager",
340+ "FirmwareTimestampMonotonic");
341+ loader_time = property_getull(bus,
342+ "org.freedesktop.systemd1",
343+ "/org/freedesktop/systemd1",
344+ "org.freedesktop.systemd1.Manager",
345+ "LoaderTimestampMonotonic");
346+ kernel_time = property_getull(bus,
347+ "org.freedesktop.systemd1",
348+ "/org/freedesktop/systemd1",
349+ "org.freedesktop.systemd1.Manager",
350+ "KernelTimestamp");
351+ initrd_time = property_getull(bus,
352+ "org.freedesktop.systemd1",
353+ "/org/freedesktop/systemd1",
354+ "org.freedesktop.systemd1.Manager",
355+ "InitRDTimestampMonotonic");
356+ userspace_time = property_getull(bus,
357+ "org.freedesktop.systemd1",
358+ "/org/freedesktop/systemd1",
359+ "org.freedesktop.systemd1.Manager",
360+ "UserspaceTimestampMonotonic");
361+ finish_time = property_getull(bus,
362+ "org.freedesktop.systemd1",
363+ "/org/freedesktop/systemd1",
364+ "org.freedesktop.systemd1.Manager",
365+ "FinishTimestampMonotonic");
366+
367+
368+ if (firmware_time > 0) {
369+ m++;
370+ starttime += firmware_time - loader_time;
371+ }
372+ if (loader_time > 0) {
373+ m++;
374+ starttime += loader_time;
375+ }
376+ if (initrd_time > 0)
377+ m += 2;
378+ else if (kernel_time > 0)
379+ m++;
380+
381+ float width = 80.0 + (scale_x * (starttime + finish_time) * 0.000001);
382+ float height = 150.0 + (m* scale_y);
383+
384+ svg("<?xml version=\"1.0\" standalone=\"no\"?>\n");
385+ svg("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ");
386+ svg("\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n");
387+
388+ //svg("<g transform=\"translate(10,%d)\">\n", 1000 + 150 + (pcount * 20));
389+ svg("<svg width=\"%.0fpx\" height=\"%.0fpx\" version=\"1.1\" ", width, height);
390+ svg("xmlns=\"http://www.w3.org/2000/svg\">\n\n");
391+
392+ /* write some basic info as a comment, including some help */
393+ svg("<!-- This file is a systemd-analyze SVG file. It is best rendered in a -->\n");
394+ svg("<!-- browser such as Chrome/Chromium, firefox. Other applications that -->\n");
395+ svg("<!-- render these files properly but much more slow are ImageMagick, -->\n");
396+ svg("<!-- gimp, inkscape, etc.. To display the files on your system, just -->\n");
397+ svg("<!-- point your browser to file:///var/log/ and click. -->\n\n");
398+ svg("<!-- this plot was generated by systemd-analyze version %-16.16s -->\n\n", VERSION);
399+
400+ /* style sheet */
401+ svg("<defs>\n <style type=\"text/css\">\n <![CDATA[\n");
402+
403+ svg(" rect { stroke-width: 1; stroke-opacity: 0; }\n");
404+ svg(" rect.activating { fill: rgb(255,0,0); fill-opacity: 0.7; }\n");
405+ svg(" rect.active { fill: rgb(200,150,150); fill-opacity: 0.7; }\n");
406+ svg(" rect.deactivating { fill: rgb(150,100,100); fill-opacity: 0.7; }\n");
407+ svg(" rect.kernel { fill: rgb(150,150,150); fill-opacity: 0.7; }\n");
408+ svg(" rect.initrd { fill: rgb(150,150,150); fill-opacity: 0.7; }\n");
409+ svg(" rect.firmware { fill: rgb(150,150,150); fill-opacity: 0.7; }\n");
410+ svg(" rect.loader { fill: rgb(150,150,150); fill-opacity: 0.7; }\n");
411+ svg(" rect.userspace { fill: rgb(150,150,150); fill-opacity: 0.7; }\n");
412+ svg(" rect.cpu { fill: rgb(64,64,240); stroke-width: 0; fill-opacity: 0.7; }\n");
413+ svg(" rect.wait { fill: rgb(240,240,0); stroke-width: 0; fill-opacity: 0.7; }\n");
414+ svg(" rect.bi { fill: rgb(240,128,128); stroke-width: 0; fill-opacity: 0.7; }\n");
415+ svg(" rect.bo { fill: rgb(192,64,64); stroke-width: 0; fill-opacity: 0.7; }\n");
416+ svg(" rect.ps { fill: rgb(192,192,192); stroke: rgb(128,128,128); fill-opacity: 0.7; }\n");
417+ svg(" rect.krnl { fill: rgb(240,240,0); stroke: rgb(128,128,128); fill-opacity: 0.7; }\n");
418+ svg(" rect.box { fill: rgb(240,240,240); stroke: rgb(192,192,192); }\n");
419+ svg(" rect.clrw { stroke-width: 0; fill-opacity: 0.7;}\n");
420+ svg(" line { stroke: rgb(64,64,64); stroke-width: 1; }\n");
421+ svg("// line.sec1 { }\n");
422+ svg(" line.sec5 { stroke-width: 2; }\n");
423+ svg(" line.sec01 { stroke: rgb(224,224,224); stroke-width: 1; }\n");
424+ svg(" line.dot { stroke-dasharray: 2 4; }\n");
425+ svg(" line.idle { stroke: rgb(64,64,64); stroke-dasharray: 10 6; stroke-opacity: 0.7; }\n");
426+
427+ svg(" .run { font-size: 8; font-style: italic; }\n");
428+ svg(" text { font-family: Verdana, Helvetica; font-size: 10; }\n");
429+ svg(" text.sec { font-size: 8; }\n");
430+ svg(" text.t1 { font-size: 24; }\n");
431+ svg(" text.t2 { font-size: 12; }\n");
432+ svg(" text.idle { font-size: 18; }\n");
433+
434+ svg(" ]]>\n </style>\n</defs>\n\n");
435+
436+ svg("<text x=\"20\" y=\"40\">Startup finished in ");
437+
438+ if (firmware_time > 0)
439+ svg("%llums (firmware) + ", (firmware_time - loader_time) / 1000);
440+ if (loader_time > 0)
441+ svg("%llums (loader) + ", loader_time / 1000);
442+ if (initrd_time > 0)
443+ svg("%llums (kernel) + %llums (initrd) + ", initrd_time / 1000, (userspace_time - initrd_time) / 1000);
444+ else if (kernel_time > 0)
445+ svg("%llums (kernel) + ", userspace_time / 1000);
446+ svg("%llums (userspace) ", (finish_time - userspace_time) / 1000);
447+ if (kernel_time > 0)
448+ svg("= %llums\n", (firmware_time + finish_time) / 1000);
449+ else
450+ svg("= %llums\n", (finish_time - userspace_time) / 1000);
451+ svg("</text>");
452+
453+ svg("<g transform=\"translate(20,100)\">\n");
454+ svg_graph_box(m, starttime, finish_time, scale_x, scale_y);
455+
456+ float top = 0.0;
457+
458+ if (firmware_time > 0) {
459+ svg(" <rect class=\"firmware\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
460+ scale_x * (starttime - firmware_time) * 0.000001,
461+ top,
462+ scale_x * (firmware_time - loader_time) * 0.000001,
463+ scale_y - 1.0);
464+ svg(" <text x=\"%.03f\" y=\"%.03f\">firmware</text>\n",
465+ scale_x * (starttime - firmware_time) * 0.000001 + 5.0,
466+ top + 14.0);
467+ top += scale_y;
468+ }
469+ if (loader_time > 0) {
470+ svg(" <rect class=\"loader\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
471+ scale_x * (starttime - loader_time) * 0.000001,
472+ top,
473+ scale_x * (loader_time) * 0.000001,
474+ scale_y - 1.0);
475+ svg(" <text x=\"%.03f\" y=\"%.03f\">loader</text>\n",
476+ scale_x * (starttime - loader_time) * 0.000001 + 5.0,
477+ top + 14.0);
478+ top += scale_y;
479+ }
480+ if (initrd_time > 0) {
481+ svg(" <rect class=\"kernel\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
482+ scale_x * (starttime) * 0.000001,
483+ top,
484+ scale_x * (initrd_time) * 0.000001,
485+ scale_y - 1.0);
486+ svg(" <text x=\"%.03f\" y=\"%.03f\">kernel</text>\n",
487+ scale_x * (starttime) * 0.000001 + 5.0,
488+ top + 14.0);
489+ top += scale_y;
490+ svg(" <rect class=\"inird\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
491+ scale_x * (starttime + initrd_time) * 0.000001,
492+ top,
493+ scale_x * (userspace_time - initrd_time) * 0.000001,
494+ scale_y - 1.0);
495+ svg(" <text x=\"%.03f\" y=\"%.03f\">initrd</text>\n",
496+ scale_x * (starttime + initrd_time) * 0.000001 + 5.0,
497+ top + 14.0);
498+ top += scale_y;
499+ } else if (kernel_time > 0) {
500+ svg(" <rect class=\"kernel\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
501+ scale_x * (starttime) * 0.000001,
502+ top,
503+ scale_x * (userspace_time) * 0.000001,
504+ scale_y - 1.0);
505+ svg(" <text x=\"%.03f\" y=\"%.03f\">kernel</text>\n",
506+ scale_x * (starttime) * 0.000001 + 5.0,
507+ top + 14.0);
508+ top += scale_y;
509+ }
510+
511+ svg(" <rect class=\"userspace\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
512+ scale_x * (userspace_time) * 0.000001,
513+ top,
514+ scale_x * (finish_time - userspace_time) * 0.000001,
515+ scale_y - 1.0);
516+ svg(" <text x=\"%.03f\" y=\"%.03f\">userspace</text>\n",
517+ scale_x * (userspace_time) * 0.000001 + 5.0,
518+ top + 14.0);
519+ top += scale_y;
520+
521+
522+ for (int i=0; i < n; i++) {
523+ //draw times[i]
524+
525+ bool drawn = false;
526+
527+ if (times[i].ixt >= userspace_time && times[i].ixt <= finish_time) {
528+ unsigned long long int end = finish_time;
529+ if (times[i].aet >= times[i].ixt && times[i].aet < end)
530+ end = times[i].aet;
531+ if (times[i].axt >= times[i].ixt && times[i].axt < end)
532+ end = times[i].axt;
533+ if (times[i].iet >= times[i].ixt && times[i].iet < end)
534+ end = times[i].iet;
535+ svg(" <rect class=\"activating\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
536+ scale_x * (starttime + times[i].ixt) * 0.000001,
537+ top + (scale_y * i),
538+ scale_x * (end - times[i].ixt) * 0.000001,
539+ scale_y - 1.0);
540+ }
541+ if (times[i].aet >= userspace_time && times[i].aet <= finish_time) {
542+ unsigned long long int end = finish_time;
543+ if (times[i].axt >= times[i].aet && times[i].axt < end)
544+ end = times[i].axt;
545+ if (times[i].iet >= times[i].aet && times[i].iet < end)
546+ end = times[i].iet;
547+ svg(" <rect class=\"active\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
548+ scale_x * (starttime + times[i].aet) * 0.000001,
549+ top + (scale_y * i),
550+ scale_x * (end - times[i].aet) * 0.000001,
551+ scale_y - 1.0);
552+ }
553+ if (times[i].axt >= userspace_time && times[i].axt <= finish_time) {
554+ unsigned long long int end = finish_time;
555+ if (times[i].iet >= times[i].axt && times[i].iet < end)
556+ end = times[i].iet;
557+ svg(" <rect class=\"deactivating\" x=\"%.03f\" y=\"%.03f\" width=\"%.03f\" height=\"%.03f\" />\n",
558+ scale_x * (starttime + times[i].axt) * 0.000001,
559+ top + (scale_y * i),
560+ scale_x * (end - times[i].axt) * 0.000001,
561+ scale_y - 1.0);
562+ }
563+
564+ svg(" <text x=\"%.03f\" y=\"%.03f\">%s</text>\n",
565+ (starttime + times[i].ixt) * scale_x * 0.000001 + 5.0,
566+ top + (scale_y * i) + 14.0,
567+ times[i].name);
568+
569+ }
570+ svg("</g>\n\n");
571+
572+ svg("</svg>");
573+ return 0;
574+}
575+
576+int analyze_blame(DBusConnection *bus)
577+{
578+ struct unit_times *times;
579+ int n = acquire_time_data(bus, &times);
580+ if (n<=0)
581+ return -n;
582+
583+ qsort(times, n, sizeof(struct unit_times), compare_unit_times1);
584+
585+ for (int i = 0; i < n; i++) {
586+ if (times[i].ixt <= 0 || times[i].aet <= 0)
587+ continue;
588+ if (times[i].aet <= times[i].ixt)
589+ continue;
590+ printf("%6llums %s\n", (times[i].aet - times[i].ixt) / 1000, times[i].name);
591+ }
592+ return 0;
593+}
594+int analyze_time(DBusConnection *bus)
595+{
596+ unsigned long long firmware_time, loader_time, kernel_time, initrd_time, userspace_time, finish_time;
597+
598+ firmware_time = property_getull(bus,
599+ "org.freedesktop.systemd1",
600+ "/org/freedesktop/systemd1",
601+ "org.freedesktop.systemd1.Manager",
602+ "FirmwareTimestampMonotonic");
603+ loader_time = property_getull(bus,
604+ "org.freedesktop.systemd1",
605+ "/org/freedesktop/systemd1",
606+ "org.freedesktop.systemd1.Manager",
607+ "LoaderTimestampMonotonic");
608+ kernel_time = property_getull(bus,
609+ "org.freedesktop.systemd1",
610+ "/org/freedesktop/systemd1",
611+ "org.freedesktop.systemd1.Manager",
612+ "KernelTimestamp");
613+ initrd_time = property_getull(bus,
614+ "org.freedesktop.systemd1",
615+ "/org/freedesktop/systemd1",
616+ "org.freedesktop.systemd1.Manager",
617+ "InitRDTimestampMonotonic");
618+ userspace_time = property_getull(bus,
619+ "org.freedesktop.systemd1",
620+ "/org/freedesktop/systemd1",
621+ "org.freedesktop.systemd1.Manager",
622+ "UserspaceTimestampMonotonic");
623+ finish_time = property_getull(bus,
624+ "org.freedesktop.systemd1",
625+ "/org/freedesktop/systemd1",
626+ "org.freedesktop.systemd1.Manager",
627+ "FinishTimestampMonotonic");
628+
629+ printf("Startup finished in ");
630+
631+ if (firmware_time > 0)
632+ printf("%llums (firmware) + ", (firmware_time - loader_time) / 1000);
633+ if (loader_time > 0)
634+ printf("%llums (loader) + ", loader_time / 1000);
635+ if (initrd_time > 0)
636+ printf("%llums (kernel) + %llums (initrd) + ", initrd_time / 1000, (userspace_time - initrd_time) / 1000);
637+ else if (kernel_time > 0)
638+ printf("%llums (kernel) + ", userspace_time / 1000);
639+
640+ printf("%llums (userspace) ", (finish_time - userspace_time) / 1000);
641+
642+ if (kernel_time > 0)
643+ printf("= %llums\n", (firmware_time + finish_time) / 1000);
644+ else
645+ printf("= %llums\n", (finish_time - userspace_time) / 1000);
646+
647+ return 0;
648+}
649+
650+void analyze_help()
651+{
652+ printf("%s [OPTIONS...] {COMMAND} ...\n\n"
653+ " -h --help Show this help\n"
654+ " --version Show package version\n"
655+ " --system Connect to system manager\n"
656+ " --user Connect to user service manager\n\n"
657+ "Commands:\n"
658+ " time\n"
659+ " blame\n",
660+ program_invocation_short_name);
661+
662+}
663+
664+static int parse_argv(int argc, char *argv[])
665+{
666+ enum {
667+ ARG_VERSION = 0x100,
668+ ARG_USER,
669+ ARG_SYSTEM
670+ };
671+
672+ static const struct option options[] = {
673+ { "help", no_argument, NULL, 'h' },
674+ { "version", no_argument, NULL, ARG_VERSION },
675+ { "user", no_argument, NULL, ARG_USER },
676+ { "system", no_argument, NULL, ARG_SYSTEM },
677+ { NULL, 0, NULL, 0 }
678+ };
679+
680+ int c;
681+
682+ assert(argc >= 0);
683+ assert(argv);
684+
685+ while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) {
686+ switch (c) {
687+ case 'h':
688+ analyze_help();
689+ return 0;
690+ case ARG_VERSION:
691+ puts(PACKAGE_STRING);
692+ puts(SYSTEMD_FEATURES);
693+ return 0;
694+ case ARG_USER:
695+ arg_scope = UNIT_FILE_USER;
696+ break;
697+ case ARG_SYSTEM:
698+ arg_scope = UNIT_FILE_SYSTEM;
699+ break;
700+
701+ case '?':
702+ return -EINVAL;
703+
704+ default:
705+ log_error("Unknown option code '%c'.", c);
706+ return -EINVAL;
707+ }
708+ }
709+ return 1;
710+}
711+
712+
713+int main(int argc, char*argv[]) {
714+ int r, retval = EXIT_FAILURE;
715+ DBusConnection *bus = NULL;
716+ DBusError error;
717+ bool private_bus = false;
718+
719+ dbus_error_init(&error);
720+
721+ setlocale(LC_ALL, "");
722+ log_parse_environment();
723+ log_open();
724+
725+ r = parse_argv(argc, argv);
726+ if (r < 0)
727+ goto finish;
728+ else if (r == 0) {
729+ retval = EXIT_SUCCESS;
730+ goto finish;
731+ }
732+
733+ bus_connect(arg_scope == UNIT_FILE_SYSTEM ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, &bus, &private_bus, &error);
734+
735+ if (!argv[optind] || streq(argv[optind], "time"))
736+ retval = analyze_time(bus);
737+ else if (streq(argv[optind], "blame"))
738+ retval = analyze_blame(bus);
739+ else if (streq(argv[optind], "plot"))
740+ retval = analyze_plot(bus);
741+ else
742+ log_error("Unknown operation '%s'.", argv[optind]);
743+
744+finish:
745+ if (bus) {
746+ dbus_connection_flush(bus);
747+ dbus_connection_close(bus);
748+ dbus_connection_unref(bus);
749+ }
750+
751+ dbus_error_free(&error);
752+
753+ return retval;
754+}
755Index: systemd-197/src/analyze/systemd-analyze.in
756===================================================================
757--- systemd-197.orig/src/analyze/systemd-analyze.in 2013-01-07 16:27:01.000000000 -0800
758+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
759@@ -1,328 +0,0 @@
760-#!@PYTHON_BINARY@
761-# -*-python-*-
762-
763-# This file is part of systemd.
764-#
765-# Copyright 2010-2013 Lennart Poettering
766-#
767-# systemd is free software; you can redistribute it and/or modify it
768-# under the terms of the GNU Lesser General Public License as published by
769-# the Free Software Foundation; either version 2.1 of the License, or
770-# (at your option) any later version.
771-#
772-# systemd is distributed in the hope that it will be useful, but
773-# WITHOUT ANY WARRANTY; without even the implied warranty of
774-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
775-# Lesser General Public License for more details.
776-#
777-# You should have received a copy of the GNU Lesser General Public License
778-# along with systemd; If not, see <http://www.gnu.org/licenses/>.
779-
780-import sys, os
781-import argparse
782-from gi.repository import Gio
783-try:
784- import cairo
785-except ImportError:
786- cairo = None
787-
788-def acquire_time_data():
789- manager = Gio.DBusProxy.new_for_bus_sync(bus, Gio.DBusProxyFlags.NONE,
790- None, 'org.freedesktop.systemd1', '/org/freedesktop/systemd1', 'org.freedesktop.systemd1.Manager', None)
791- units = manager.ListUnits()
792-
793- l = []
794-
795- for i in units:
796- if i[5] != "":
797- continue
798-
799- properties = Gio.DBusProxy.new_for_bus_sync(bus, Gio.DBusProxyFlags.NONE,
800- None, 'org.freedesktop.systemd1', i[6], 'org.freedesktop.DBus.Properties', None)
801-
802- ixt = properties.Get('(ss)', 'org.freedesktop.systemd1.Unit', 'InactiveExitTimestampMonotonic')
803- aet = properties.Get('(ss)', 'org.freedesktop.systemd1.Unit', 'ActiveEnterTimestampMonotonic')
804- axt = properties.Get('(ss)', 'org.freedesktop.systemd1.Unit', 'ActiveExitTimestampMonotonic')
805- iet = properties.Get('(ss)', 'org.freedesktop.systemd1.Unit', 'InactiveEnterTimestampMonotonic')
806-
807- l.append((str(i[0]), ixt, aet, axt, iet))
808-
809- return l
810-
811-def acquire_start_time():
812- properties = Gio.DBusProxy.new_for_bus_sync(bus, Gio.DBusProxyFlags.NONE,
813- None, 'org.freedesktop.systemd1', '/org/freedesktop/systemd1', 'org.freedesktop.DBus.Properties', None)
814-
815- # Note that the firmware/loader times are returned as positive
816- # values but are actually considered negative from the point
817- # in time of kernel initialization. Also, the monotonic kernel
818- # time will always be 0 since that's the epoch of the
819- # monotonic clock. Since we want to know whether the kernel
820- # timestamp is set at all we will instead ask for the realtime
821- # clock for this timestamp.
822-
823- firmware_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'FirmwareTimestampMonotonic')
824- loader_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'LoaderTimestampMonotonic')
825- kernel_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'KernelTimestamp')
826- initrd_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'InitRDTimestampMonotonic')
827- userspace_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'UserspaceTimestampMonotonic')
828- finish_time = properties.Get('(ss)', 'org.freedesktop.systemd1.Manager', 'FinishTimestampMonotonic')
829-
830- if finish_time == 0:
831- sys.exit("Bootup is not yet finished. Please try again later.")
832-
833- assert firmware_time >= loader_time
834- assert initrd_time <= userspace_time
835- assert userspace_time <= finish_time
836-
837- return firmware_time, loader_time, kernel_time, initrd_time, userspace_time, finish_time
838-
839-def draw_box(context, j, k, l, m, r = 0, g = 0, b = 0):
840- context.save()
841- context.set_source_rgb(r, g, b)
842- context.rectangle(j, k, l, m)
843- context.fill()
844- context.restore()
845-
846-def draw_text(context, x, y, text, size = 12, r = 0, g = 0, b = 0, vcenter = 0.5, hcenter = 0.5):
847- context.save()
848-
849- context.set_source_rgb(r, g, b)
850- context.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
851- context.set_font_size(size)
852-
853- if vcenter or hcenter:
854- x_bearing, y_bearing, width, height = context.text_extents(text)[:4]
855-
856- if hcenter:
857- x = x - width*hcenter - x_bearing
858-
859- if vcenter:
860- y = y - height*vcenter - y_bearing
861-
862- context.move_to(x, y)
863- context.show_text(text)
864-
865- context.restore()
866-
867-def time():
868-
869- firmware_time, loader_time, kernel_time, initrd_time, userspace_time, finish_time = acquire_start_time()
870-
871- sys.stdout.write("Startup finished in ")
872-
873- if firmware_time > 0:
874- sys.stdout.write("%lums (firmware) + " % ((firmware_time - loader_time) / 1000))
875- if loader_time > 0:
876- sys.stdout.write("%lums (loader) + " % (loader_time / 1000))
877- if initrd_time > 0:
878- sys.stdout.write("%lums (kernel) + %lums (initrd) + " % (initrd_time / 1000, (userspace_time - initrd_time) / 1000))
879- elif kernel_time > 0:
880- sys.stdout.write("%lums (kernel) + " % (userspace_time / 1000))
881-
882- sys.stdout.write("%lums (userspace) " % ((finish_time - userspace_time) / 1000))
883-
884- if kernel_time > 0:
885- sys.stdout.write("= %lums\n" % ((firmware_time + finish_time) / 1000))
886- else:
887- sys.stdout.write("= %lums\n" % ((finish_time - userspace_time) / 1000))
888-
889-def blame():
890-
891- data = acquire_time_data()
892- s = sorted(data, key = lambda i: i[2] - i[1], reverse = True)
893-
894- for name, ixt, aet, axt, iet in s:
895-
896- if ixt <= 0 or aet <= 0:
897- continue
898-
899- if aet <= ixt:
900- continue
901-
902- sys.stdout.write("%6lums %s\n" % ((aet - ixt) / 1000, name))
903-
904-def plot():
905- if cairo is None:
906- sys.exit("Failed to initilize python-cairo required for 'plot' verb.")
907- firmware_time, loader_time, kernel_time, initrd_time, userspace_time, finish_time = acquire_start_time()
908- data = acquire_time_data()
909- s = sorted(data, key = lambda i: i[1])
910-
911- # Account for kernel and initramfs bars if they exist
912- if initrd_time > 0:
913- count = 3
914- else:
915- count = 2
916-
917- for name, ixt, aet, axt, iet in s:
918-
919- if (ixt >= userspace_time and ixt <= finish_time) or \
920- (aet >= userspace_time and aet <= finish_time) or \
921- (axt >= userspace_time and axt <= finish_time):
922- count += 1
923-
924- border = 100
925- bar_height = 20
926- bar_space = bar_height * 0.1
927-
928- # 1000px = 10s, 1px = 10ms
929- width = finish_time/10000 + border*2
930- height = count * (bar_height + bar_space) + border * 2
931-
932- if width < 1000:
933- width = 1000
934-
935- surface = cairo.SVGSurface(sys.stdout, width, height)
936- context = cairo.Context(surface)
937-
938- draw_box(context, 0, 0, width, height, 1, 1, 1)
939-
940- context.translate(border + 0.5, border + 0.5)
941-
942- context.save()
943- context.set_line_width(1)
944- context.set_source_rgb(0.7, 0.7, 0.7)
945-
946- for x in range(0, int(finish_time/10000) + 100, 100):
947- context.move_to(x, 0)
948- context.line_to(x, height-border*2)
949-
950- context.move_to(0, 0)
951- context.line_to(width-border*2, 0)
952-
953- context.move_to(0, height-border*2)
954- context.line_to(width-border*2, height-border*2)
955-
956- context.stroke()
957- context.restore()
958-
959- osrel = "Linux"
960- if os.path.exists("/etc/os-release"):
961- for line in open("/etc/os-release"):
962- if line.startswith('PRETTY_NAME='):
963- osrel = line[12:]
964- osrel = osrel.strip('\"\n')
965- break
966-
967- banner = "{} {} ({} {}) {}".format(osrel, *(os.uname()[1:5]))
968- draw_text(context, 0, -15, banner, hcenter = 0, vcenter = 1)
969-
970- for x in range(0, int(finish_time/10000) + 100, 100):
971- draw_text(context, x, -5, "%lus" % (x/100), vcenter = 0, hcenter = 0)
972-
973- y = 0
974-
975- # draw boxes for kernel and initramfs boot time
976- if initrd_time > 0:
977- draw_box(context, 0, y, initrd_time/10000, bar_height, 0.7, 0.7, 0.7)
978- draw_text(context, 10, y + bar_height/2, "kernel", hcenter = 0)
979- y += bar_height + bar_space
980-
981- draw_box(context, initrd_time/10000, y, userspace_time/10000-initrd_time/10000, bar_height, 0.7, 0.7, 0.7)
982- draw_text(context, initrd_time/10000 + 10, y + bar_height/2, "initramfs", hcenter = 0)
983- y += bar_height + bar_space
984-
985- else:
986- draw_box(context, 0, y, userspace_time/10000, bar_height, 0.6, 0.6, 0.6)
987- draw_text(context, 10, y + bar_height/2, "kernel", hcenter = 0)
988- y += bar_height + bar_space
989-
990- draw_box(context, userspace_time/10000, y, finish_time/10000-userspace_time/10000, bar_height, 0.7, 0.7, 0.7)
991- draw_text(context, userspace_time/10000 + 10, y + bar_height/2, "userspace", hcenter = 0)
992- y += bar_height + bar_space
993-
994- for name, ixt, aet, axt, iet in s:
995-
996- drawn = False
997- left = -1
998-
999- if ixt >= userspace_time and ixt <= finish_time:
1000-
1001- # Activating
1002- a = ixt
1003- b = min(filter(lambda x: x >= ixt, (aet, axt, iet, finish_time))) - ixt
1004-
1005- draw_box(context, a/10000, y, b/10000, bar_height, 1, 0, 0)
1006- drawn = True
1007-
1008- if left < 0:
1009- left = a
1010-
1011- if aet >= userspace_time and aet <= finish_time:
1012-
1013- # Active
1014- a = aet
1015- b = min(filter(lambda x: x >= aet, (axt, iet, finish_time))) - aet
1016-
1017- draw_box(context, a/10000, y, b/10000, bar_height, .8, .6, .6)
1018- drawn = True
1019-
1020- if left < 0:
1021- left = a
1022-
1023- if axt >= userspace_time and axt <= finish_time:
1024-
1025- # Deactivating
1026- a = axt
1027- b = min(filter(lambda x: x >= axt, (iet, finish_time))) - axt
1028-
1029- draw_box(context, a/10000, y, b/10000, bar_height, .6, .4, .4)
1030- drawn = True
1031-
1032- if left < 0:
1033- left = a
1034-
1035- if drawn:
1036- x = left/10000
1037-
1038- if x < width/2-border:
1039- draw_text(context, x + 10, y + bar_height/2, name, hcenter = 0)
1040- else:
1041- draw_text(context, x - 10, y + bar_height/2, name, hcenter = 1)
1042-
1043- y += bar_height + bar_space
1044-
1045- draw_text(context, 0, height-border*2, "Legend: Red = Activating; Pink = Active; Dark Pink = Deactivating", hcenter = 0, vcenter = -1)
1046-
1047- if initrd_time > 0:
1048- draw_text(context, 0, height-border*2 + bar_height, "Startup finished in %lums (kernel) + %lums (initramfs) + %lums (userspace) = %lums" % ( \
1049- initrd_time/1000, \
1050- (userspace_time - initrd_time)/1000, \
1051- (finish_time - userspace_time)/1000, \
1052- finish_time/1000), hcenter = 0, vcenter = -1)
1053- else:
1054- draw_text(context, 0, height-border*2 + bar_height, "Startup finished in %lums (kernel) + %lums (userspace) = %lums" % ( \
1055- userspace_time/1000, \
1056- (finish_time - userspace_time)/1000, \
1057- finish_time/1000), hcenter = 0, vcenter = -1)
1058-
1059- surface.finish()
1060-
1061-parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
1062- version='systemd-analyze @PACKAGE_VERSION@',
1063- description='Process systemd profiling information',
1064- epilog='''\
1065-time - print time spent in the kernel before reaching userspace
1066-blame - print list of running units ordered by time to init
1067-plot - output SVG graphic showing service initialization
1068-''')
1069-
1070-parser.add_argument('action', choices=('time', 'blame', 'plot'),
1071- default='time', nargs='?',
1072- help='action to perform (default: time)')
1073-parser.add_argument('--user', action='store_true',
1074- help='use the session bus')
1075-
1076-args = parser.parse_args()
1077-
1078-if args.user:
1079- bus = Gio.BusType.SESSION
1080-else:
1081- bus = Gio.BusType.SYSTEM
1082-
1083-verb = {'time' : time,
1084- 'blame': blame,
1085- 'plot' : plot,
1086- }
1087-verb.get(args.action)()
diff --git a/meta/recipes-core/systemd/systemd/systemd-pam-fix-msformat.patch b/meta/recipes-core/systemd/systemd/systemd-pam-fix-msformat.patch
index aa186bda72..8d1aa7d11a 100644
--- a/meta/recipes-core/systemd/systemd/systemd-pam-fix-msformat.patch
+++ b/meta/recipes-core/systemd/systemd/systemd-pam-fix-msformat.patch
@@ -1,20 +1,20 @@
1Upstream-Status: Denied [no desire for uclibc support] 1Upstream-Status: Denied [no desire for uclibc support]
2Signed-off-by: Khem Raj <raj.khem@gmail.com> 2Signed-off-by: Khem Raj <raj.khem@gmail.com>
3 3
4Index: systemd-196/src/fsck/fsck.c 4Index: systemd-198/src/fsck/fsck.c
5=================================================================== 5===================================================================
6--- systemd-196.orig/src/fsck/fsck.c 2012-07-26 03:45:14.000000000 -0700 6--- systemd-198.orig/src/fsck/fsck.c 2013-03-07 13:18:34.000000000 -0800
7+++ systemd-196/src/fsck/fsck.c 2013-01-21 16:10:46.807537608 -0800 7+++ systemd-198/src/fsck/fsck.c 2013-03-09 14:49:03.756572873 -0800
8@@ -36,6 +36,8 @@ 8@@ -37,6 +37,8 @@
9 #include "bus-errors.h"
10 #include "virt.h" 9 #include "virt.h"
10 #include "fileio.h"
11 11
12+#include "config.h" 12+#include "config.h"
13+ 13+
14 static bool arg_skip = false; 14 static bool arg_skip = false;
15 static bool arg_force = false; 15 static bool arg_force = false;
16 static bool arg_show_progress = false; 16 static bool arg_show_progress = false;
17@@ -193,9 +195,16 @@ 17@@ -203,9 +205,16 @@
18 char *device; 18 char *device;
19 double p; 19 double p;
20 usec_t t; 20 usec_t t;
@@ -33,10 +33,10 @@ Index: systemd-196/src/fsck/fsck.c
33 33
34 /* Only show one progress counter at max */ 34 /* Only show one progress counter at max */
35 if (!locked) { 35 if (!locked) {
36Index: systemd-196/src/core/swap.c 36Index: systemd-198/src/core/swap.c
37=================================================================== 37===================================================================
38--- systemd-196.orig/src/core/swap.c 2012-10-29 19:40:42.000000000 -0700 38--- systemd-198.orig/src/core/swap.c 2013-03-07 13:18:34.000000000 -0800
39+++ systemd-196/src/core/swap.c 2013-01-21 16:15:11.751544181 -0800 39+++ systemd-198/src/core/swap.c 2013-03-09 14:49:03.756572873 -0800
40@@ -41,6 +41,8 @@ 40@@ -41,6 +41,8 @@
41 #include "path-util.h" 41 #include "path-util.h"
42 #include "virt.h" 42 #include "virt.h"
@@ -46,7 +46,7 @@ Index: systemd-196/src/core/swap.c
46 static const UnitActiveState state_translation_table[_SWAP_STATE_MAX] = { 46 static const UnitActiveState state_translation_table[_SWAP_STATE_MAX] = {
47 [SWAP_DEAD] = UNIT_INACTIVE, 47 [SWAP_DEAD] = UNIT_INACTIVE,
48 [SWAP_ACTIVATING] = UNIT_ACTIVATING, 48 [SWAP_ACTIVATING] = UNIT_ACTIVATING,
49@@ -1059,6 +1061,7 @@ 49@@ -1037,6 +1039,7 @@
50 char *dev = NULL, *d; 50 char *dev = NULL, *d;
51 int prio = 0, k; 51 int prio = 0, k;
52 52
@@ -54,7 +54,7 @@ Index: systemd-196/src/core/swap.c
54 k = fscanf(m->proc_swaps, 54 k = fscanf(m->proc_swaps,
55 "%ms " /* device/file */ 55 "%ms " /* device/file */
56 "%*s " /* type of swap */ 56 "%*s " /* type of swap */
57@@ -1066,6 +1069,16 @@ 57@@ -1044,6 +1047,16 @@
58 "%*s " /* used */ 58 "%*s " /* used */
59 "%i\n", /* priority */ 59 "%i\n", /* priority */
60 &dev, &prio); 60 &dev, &prio);
@@ -71,10 +71,10 @@ Index: systemd-196/src/core/swap.c
71 if (k != 2) { 71 if (k != 2) {
72 if (k == EOF) 72 if (k == EOF)
73 break; 73 break;
74Index: systemd-196/src/core/mount-setup.c 74Index: systemd-198/src/core/mount-setup.c
75=================================================================== 75===================================================================
76--- systemd-196.orig/src/core/mount-setup.c 2012-11-09 06:55:35.000000000 -0800 76--- systemd-198.orig/src/core/mount-setup.c 2013-03-07 13:18:34.000000000 -0800
77+++ systemd-196/src/core/mount-setup.c 2013-01-21 16:10:46.807537608 -0800 77+++ systemd-198/src/core/mount-setup.c 2013-03-09 14:49:03.760572872 -0800
78@@ -28,6 +28,7 @@ 78@@ -28,6 +28,7 @@
79 #include <assert.h> 79 #include <assert.h>
80 #include <unistd.h> 80 #include <unistd.h>
@@ -83,16 +83,16 @@ Index: systemd-196/src/core/mount-setup.c
83 83
84 #include "mount-setup.h" 84 #include "mount-setup.h"
85 #include "dev-setup.h" 85 #include "dev-setup.h"
86@@ -42,6 +43,8 @@ 86@@ -43,6 +44,8 @@
87 #include "missing.h"
88 #include "virt.h" 87 #include "virt.h"
88 #include "efivars.h"
89 89
90+#include "config.h" 90+#include "config.h"
91+ 91+
92 #ifndef TTY_GID 92 #ifndef TTY_GID
93 #define TTY_GID 5 93 #define TTY_GID 5
94 #endif 94 #endif
95@@ -224,9 +227,12 @@ 95@@ -231,9 +234,12 @@
96 for (;;) { 96 for (;;) {
97 char *controller; 97 char *controller;
98 int enabled = 0; 98 int enabled = 0;
@@ -107,11 +107,11 @@ Index: systemd-196/src/core/mount-setup.c
107 if (feof(f)) 107 if (feof(f))
108 break; 108 break;
109 109
110Index: systemd-196/src/core/mount.c 110Index: systemd-198/src/core/mount.c
111=================================================================== 111===================================================================
112--- systemd-196.orig/src/core/mount.c 2012-10-22 16:53:02.000000000 -0700 112--- systemd-198.orig/src/core/mount.c 2013-03-07 13:18:34.000000000 -0800
113+++ systemd-196/src/core/mount.c 2013-01-21 16:10:46.811537609 -0800 113+++ systemd-198/src/core/mount.c 2013-03-09 14:49:03.760572872 -0800
114@@ -41,6 +41,8 @@ 114@@ -42,6 +42,8 @@
115 #include "exit-status.h" 115 #include "exit-status.h"
116 #include "def.h" 116 #include "def.h"
117 117
@@ -120,7 +120,7 @@ Index: systemd-196/src/core/mount.c
120 static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = { 120 static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
121 [MOUNT_DEAD] = UNIT_INACTIVE, 121 [MOUNT_DEAD] = UNIT_INACTIVE,
122 [MOUNT_MOUNTING] = UNIT_ACTIVATING, 122 [MOUNT_MOUNTING] = UNIT_ACTIVATING,
123@@ -1538,7 +1540,7 @@ 123@@ -1584,7 +1586,7 @@
124 int k; 124 int k;
125 125
126 device = path = options = options2 = fstype = d = p = o = NULL; 126 device = path = options = options2 = fstype = d = p = o = NULL;
@@ -129,7 +129,7 @@ Index: systemd-196/src/core/mount.c
129 if ((k = fscanf(m->proc_self_mountinfo, 129 if ((k = fscanf(m->proc_self_mountinfo,
130 "%*s " /* (1) mount id */ 130 "%*s " /* (1) mount id */
131 "%*s " /* (2) parent id */ 131 "%*s " /* (2) parent id */
132@@ -1557,7 +1559,31 @@ 132@@ -1603,7 +1605,31 @@
133 &fstype, 133 &fstype,
134 &device, 134 &device,
135 &options2)) != 5) { 135 &options2)) != 5) {
@@ -162,10 +162,10 @@ Index: systemd-196/src/core/mount.c
162 if (k == EOF) 162 if (k == EOF)
163 break; 163 break;
164 164
165Index: systemd-196/src/core/umount.c 165Index: systemd-198/src/core/umount.c
166=================================================================== 166===================================================================
167--- systemd-196.orig/src/core/umount.c 2012-11-16 09:32:41.000000000 -0800 167--- systemd-198.orig/src/core/umount.c 2013-03-07 13:18:34.000000000 -0800
168+++ systemd-196/src/core/umount.c 2013-01-21 16:10:46.811537609 -0800 168+++ systemd-198/src/core/umount.c 2013-03-09 14:49:03.760572872 -0800
169@@ -36,6 +36,8 @@ 169@@ -36,6 +36,8 @@
170 #include "util.h" 170 #include "util.h"
171 #include "virt.h" 171 #include "virt.h"
@@ -235,20 +235,20 @@ Index: systemd-196/src/core/umount.c
235 if (k == EOF) 235 if (k == EOF)
236 break; 236 break;
237 237
238Index: systemd-196/src/shared/socket-util.c 238Index: systemd-198/src/shared/socket-util.c
239=================================================================== 239===================================================================
240--- systemd-196.orig/src/shared/socket-util.c 2012-11-14 13:21:15.000000000 -0800 240--- systemd-198.orig/src/shared/socket-util.c 2013-03-07 13:18:34.000000000 -0800
241+++ systemd-196/src/shared/socket-util.c 2013-01-21 16:10:46.811537609 -0800 241+++ systemd-198/src/shared/socket-util.c 2013-03-09 14:49:03.760572872 -0800
242@@ -39,6 +39,8 @@ 242@@ -40,6 +40,8 @@
243 #include "socket-util.h"
244 #include "missing.h" 243 #include "missing.h"
244 #include "fileio.h"
245 245
246+#include "config.h" 246+#include "config.h"
247+ 247+
248 int socket_address_parse(SocketAddress *a, const char *s) { 248 int socket_address_parse(SocketAddress *a, const char *s) {
249 int r; 249 int r;
250 char *e, *n; 250 char *e, *n;
251@@ -202,8 +204,16 @@ 251@@ -203,8 +205,16 @@
252 a->type = SOCK_RAW; 252 a->type = SOCK_RAW;
253 253
254 errno = 0; 254 errno = 0;
@@ -266,10 +266,10 @@ Index: systemd-196/src/shared/socket-util.c
266 266
267 family = netlink_family_from_string(sfamily); 267 family = netlink_family_from_string(sfamily);
268 if (family < 0) 268 if (family < 0)
269Index: systemd-196/src/tmpfiles/tmpfiles.c 269Index: systemd-198/src/tmpfiles/tmpfiles.c
270=================================================================== 270===================================================================
271--- systemd-196.orig/src/tmpfiles/tmpfiles.c 2012-10-23 16:06:30.000000000 -0700 271--- systemd-198.orig/src/tmpfiles/tmpfiles.c 2013-03-07 13:18:34.000000000 -0800
272+++ systemd-196/src/tmpfiles/tmpfiles.c 2013-01-21 16:10:46.811537609 -0800 272+++ systemd-198/src/tmpfiles/tmpfiles.c 2013-03-09 14:55:40.772566599 -0800
273@@ -51,6 +51,8 @@ 273@@ -51,6 +51,8 @@
274 #include "conf-files.h" 274 #include "conf-files.h"
275 #include "capability.h" 275 #include "capability.h"
@@ -279,26 +279,25 @@ Index: systemd-196/src/tmpfiles/tmpfiles.c
279 /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates 279 /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates
280 * them in the file system. This is intended to be used to create 280 * them in the file system. This is intended to be used to create
281 * properly owned directories beneath /tmp, /var/tmp, /run, which are 281 * properly owned directories beneath /tmp, /var/tmp, /run, which are
282@@ -990,7 +992,7 @@ 282@@ -993,6 +995,7 @@
283 i = new0(Item, 1);
284 if (!i) 283 if (!i)
285 return log_oom(); 284 return log_oom();
286- 285
287+#ifdef HAVE_MSFORMAT 286+#ifdef HAVE_MSFORMAT
288 if (sscanf(buffer, 287 r = sscanf(buffer,
289 "%c " 288 "%c %ms %ms %ms %ms %ms %n",
290 "%ms " 289 &type,
291@@ -1006,6 +1008,28 @@ 290@@ -1002,6 +1005,29 @@
292 &group, 291 &group,
293 &age, 292 &age,
294 &n) < 2) { 293 &n);
295+#else 294+#else
296+ i->path = malloc(257); 295+ i->path = malloc(257);
297+ mode = malloc(257); 296+ mode = malloc(257);
298+ user = malloc(257); 297+ user = malloc(257);
299+ group = malloc(257); 298+ group = malloc(257);
300+ age = malloc(257); 299+ age = malloc(257);
301+ if (sscanf(buffer, 300+ r = sscanf(buffer,
302+ "%c " 301+ "%c "
303+ "%256s " 302+ "%256s "
304+ "%256s " 303+ "%256s "
@@ -312,38 +311,39 @@ Index: systemd-196/src/tmpfiles/tmpfiles.c
312+ user, 311+ user,
313+ group, 312+ group,
314+ age, 313+ age,
315+ &n) < 2) { 314+ &n);
316+#endif /* HAVE_MSFORMAT */ 315+#endif /* HAVE_MSFORMAT */
316+
317 if (r < 2) {
317 log_error("[%s:%u] Syntax error.", fname, line); 318 log_error("[%s:%u] Syntax error.", fname, line);
318 r = -EIO; 319 r = -EIO;
319 goto finish; 320Index: systemd-198/src/cryptsetup/cryptsetup-generator.c
320Index: systemd-196/src/cryptsetup/cryptsetup-generator.c
321=================================================================== 321===================================================================
322--- systemd-196.orig/src/cryptsetup/cryptsetup-generator.c 2012-08-08 14:53:24.000000000 -0700 322--- systemd-198.orig/src/cryptsetup/cryptsetup-generator.c 2013-03-07 13:18:34.000000000 -0800
323+++ systemd-196/src/cryptsetup/cryptsetup-generator.c 2013-01-21 16:10:46.811537609 -0800 323+++ systemd-198/src/cryptsetup/cryptsetup-generator.c 2013-03-09 14:51:33.080571639 -0800
324@@ -30,6 +30,8 @@ 324@@ -31,6 +31,8 @@
325 #include "virt.h"
326 #include "strv.h" 325 #include "strv.h"
326 #include "fileio.h"
327 327
328+#include "config.h" 328+#include "config.h"
329+ 329+
330 static const char *arg_dest = "/tmp"; 330 static const char *arg_dest = "/tmp";
331 static bool arg_enabled = true; 331 static bool arg_enabled = true;
332 static bool arg_read_crypttab = true; 332 static bool arg_read_crypttab = true;
333@@ -421,8 +423,15 @@ 333@@ -395,7 +397,16 @@
334 l = strstrip(line); 334 if (*l == '#' || *l == 0)
335 if (*l == '#' || *l == 0) 335 continue;
336 continue; 336
337-
338+#ifdef HAVE_MSFORMAT 337+#ifdef HAVE_MSFORMAT
339 k = sscanf(l, "%ms %ms %ms %ms", &name, &device, &password, &options); 338 k = sscanf(l, "%ms %ms %ms %ms", &name, &device, &password, &options);
340+#else 339+#else
341+ name = malloc(257); 340+ name = malloc(257);
342+ device = malloc(257); 341+ device = malloc(257);
343+ password = malloc(257); 342+ password = malloc(257);
344+ options = malloc(257); 343+ options = malloc(257);
345+ k = sscanf(l, "%256s %256s %256s %256s", name, device, password, options); 344+ k = sscanf(l, "%256s %256s %256s %256s", name, device, password, options);
346+#endif /* HAVE_MSFORMAT */ 345+#endif /* HAVE_MSFORMAT */
347 if (k < 2 || k > 4) { 346+
348 log_error("Failed to parse /etc/crypttab:%u, ignoring.", n); 347 if (k < 2 || k > 4) {
349 r = EXIT_FAILURE; 348 log_error("Failed to parse /etc/crypttab:%u, ignoring.", n);
349 r = EXIT_FAILURE;
diff --git a/meta/recipes-core/systemd/systemd/udev-linkage.patch b/meta/recipes-core/systemd/systemd/udev-linkage.patch
deleted file mode 100644
index a0d9b4c876..0000000000
--- a/meta/recipes-core/systemd/systemd/udev-linkage.patch
+++ /dev/null
@@ -1,62 +0,0 @@
1Don't cause libudev to link against libsystemd-daemon.
2
3Upstream-Status: Backport
4Signed-off-by: Ross Burton <ross.burton@intel.com>
5
6From 8ee37c2bed1d452d566abf85b0cdf732b7ca029a Mon Sep 17 00:00:00 2001
7From: Kay Sievers <kay@vrfy.org>
8Date: Thu, 7 Feb 2013 13:47:46 +0100
9Subject: [PATCH] build-sys: at least for now, never link libudev against
10 systemd's shared libraries
11
12---
13 Makefile.am | 12 +++++++++---
14 1 file changed, 9 insertions(+), 3 deletions(-)
15
16diff --git a/Makefile.am b/Makefile.am
17index 474110a..0e6c88f 100644
18--- a/Makefile.am
19+++ b/Makefile.am
20@@ -811,8 +811,6 @@ libsystemd_shared_la_SOURCES = \
21 src/shared/calendarspec.c \
22 src/shared/calendarspec.h
23
24-libsystemd_shared_la_LIBADD = libsystemd-daemon.la
25-
26 #-------------------------------------------------------------------------------
27 noinst_LTLIBRARIES += \
28 libsystemd-dbus.la
29@@ -1662,6 +1660,9 @@ systemd_tty_ask_password_agent_LDADD = \
30 libsystemd_daemon_la_SOURCES = \
31 src/libsystemd-daemon/sd-daemon.c
32
33+libsystemd_daemon_internal_la_SOURCES = \
34+ $(libsystemd_daemon_la_SOURCES)
35+
36 libsystemd_daemon_la_CFLAGS = \
37 $(AM_CFLAGS) \
38 -fvisibility=hidden \
39@@ -1689,6 +1690,9 @@ UNINSTALL_EXEC_HOOKS += libsystemd-daemon-uninstall-hook
40 lib_LTLIBRARIES += \
41 libsystemd-daemon.la
42
43+noinst_LTLIBRARIES += \
44+ libsystemd-daemon-internal.la
45+
46 pkgconfiglib_DATA += \
47 src/libsystemd-daemon/libsystemd-daemon.pc
48
49@@ -1768,7 +1772,9 @@ libudev_la_LDFLAGS = \
50 -Wl,--version-script=$(top_srcdir)/src/libudev/libudev.sym
51
52 libudev_la_LIBADD = \
53- libsystemd-shared.la
54+ libsystemd-shared.la \
55+ libsystemd-daemon-internal.la \
56+ libsystemd-id128-internal.la
57
58 pkgconfiglib_DATA += \
59 src/libudev/libudev.pc
60--
611.7.10.4
62
diff --git a/meta/recipes-core/systemd/systemd_197.bb b/meta/recipes-core/systemd/systemd_198.bb
index 5ba3a2348a..6a8db512ca 100644
--- a/meta/recipes-core/systemd/systemd_197.bb
+++ b/meta/recipes-core/systemd/systemd_198.bb
@@ -9,7 +9,6 @@ LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \
9PROVIDES = "udev" 9PROVIDES = "udev"
10 10
11PE = "1" 11PE = "1"
12PR = "r4"
13 12
14DEPENDS = "kmod docbook-sgml-dtd-4.1-native intltool-native gperf-native acl readline dbus libcap libcgroup tcp-wrappers glib-2.0" 13DEPENDS = "kmod docbook-sgml-dtd-4.1-native intltool-native gperf-native acl readline dbus libcap libcgroup tcp-wrappers glib-2.0"
15DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}" 14DEPENDS += "${@base_contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
@@ -24,12 +23,10 @@ SRC_URI = "http://www.freedesktop.org/software/systemd/systemd-${PV}.tar.xz \
24 file://var-run.conf \ 23 file://var-run.conf \
25 ${UCLIBCPATCHES} \ 24 ${UCLIBCPATCHES} \
26 file://00-create-volatile.conf \ 25 file://00-create-volatile.conf \
27 file://0001-systemd-analyze-rewrite-in-C.patch \
28 file://udev-linkage.patch \
29 file://init \ 26 file://init \
30 " 27 "
31SRC_URI[md5sum] = "56a860dceadfafe59f40141eb5223743" 28SRC_URI[md5sum] = "26a75e2a310f8c1c1ea9ec26ddb171c5"
32SRC_URI[sha256sum] = "e6857ea21ae24d7056e7b0f4c2aaaba73b8bf57025b8949c0a8af0c1bc9774b5" 29SRC_URI[sha256sum] = "444492355e5ff0ad99e0691ecaff1081ee8d45901580f47ba8b74e56107c71bf"
33 30
34UCLIBCPATCHES = "" 31UCLIBCPATCHES = ""
35UCLIBCPATCHES_libc-uclibc = "file://systemd-pam-configure-check-uclibc.patch \ 32UCLIBCPATCHES_libc-uclibc = "file://systemd-pam-configure-check-uclibc.patch \
@@ -138,6 +135,7 @@ CONFFILES_${PN} = "${sysconfdir}/systemd/journald.conf \
138 ${sysconfdir}/systemd/user.conf" 135 ${sysconfdir}/systemd/user.conf"
139 136
140FILES_${PN} = " ${base_bindir}/* \ 137FILES_${PN} = " ${base_bindir}/* \
138 ${datadir}/bash-completion \
141 ${datadir}/dbus-1/services \ 139 ${datadir}/dbus-1/services \
142 ${datadir}/dbus-1/system-services \ 140 ${datadir}/dbus-1/system-services \
143 ${datadir}/polkit-1 \ 141 ${datadir}/polkit-1 \
@@ -162,6 +160,8 @@ FILES_${PN} = " ${base_bindir}/* \
162 ${bindir}/localectl \ 160 ${bindir}/localectl \
163 ${bindir}/hostnamectl \ 161 ${bindir}/hostnamectl \
164 ${bindir}/timedatectl \ 162 ${bindir}/timedatectl \
163 ${bindir}/bootctl \
164 ${bindir}/kernel-install \
165 ${exec_prefix}/lib/tmpfiles.d/*.conf \ 165 ${exec_prefix}/lib/tmpfiles.d/*.conf \
166 ${exec_prefix}/lib/systemd \ 166 ${exec_prefix}/lib/systemd \
167 ${exec_prefix}/lib/binfmt.d \ 167 ${exec_prefix}/lib/binfmt.d \