diff --git a/packages/linux/patches/0001-trace-add-trace-events-for-open-exec-an.diff b/packages/linux/patches/0001-trace-add-trace-events-for-open-exec-an.diff new file mode 100644 index 0000000000..11961d0f50 --- /dev/null +++ b/packages/linux/patches/0001-trace-add-trace-events-for-open-exec-an.diff @@ -0,0 +1,155 @@ +From ee9c0b591bf16ca11bb354bc68dae75a903f3a64 Mon Sep 17 00:00:00 2001 +From: Scott James Remnant +Date: Tue, 27 Oct 2009 10:05:32 +0000 +Subject: [PATCH] trace: add trace events for open(), exec() and uselib() + +This patch uses TRACE_EVENT to add tracepoints for the open(), +exec() and uselib() syscalls so that ureadahead can cheaply trace +the boot sequence to determine what to read to speed up the next. + +It's not upstream because it will need to be rebased onto the syscall +trace events whenever that gets merged, and is a stop-gap. + +Signed-off-by: Scott James Remnant +--- + fs/exec.c | 8 +++++ + fs/open.c | 4 ++ + include/trace/events/fs.h | 71 +++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 83 insertions(+), 0 deletions(-) + create mode 100644 include/trace/events/fs.h + +diff --git a/fs/exec.c b/fs/exec.c +index 172ceb6..c936999 100644 +--- a/fs/exec.c ++++ b/fs/exec.c +@@ -56,6 +56,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +@@ -130,6 +132,10 @@ SYSCALL_DEFINE1(uselib, const char __user *, library) + + fsnotify_open(file->f_path.dentry); + ++ tmp = getname(library); ++ trace_uselib(tmp); ++ putname(library); ++ + error = -ENOEXEC; + if(file->f_op) { + struct linux_binfmt * fmt; +@@ -665,6 +671,8 @@ struct file *open_exec(const char *name) + + fsnotify_open(file->f_path.dentry); + ++ trace_open_exec(name); ++ + err = deny_write_access(file); + if (err) + goto exit; +diff --git a/fs/open.c b/fs/open.c +index 04b9aad..41c87f3 100644 +--- a/fs/open.c ++++ b/fs/open.c +@@ -31,6 +31,9 @@ + #include + #include + ++#define CREATE_TRACE_POINTS ++#include ++ + int vfs_statfs(struct dentry *dentry, struct kstatfs *buf) + { + int retval = -ENODEV; +@@ -1041,6 +1044,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode) + } else { + fsnotify_open(f->f_path.dentry); + fd_install(fd, f); ++ trace_do_sys_open(tmp, flags, mode); + } + } + putname(tmp); +diff --git a/include/trace/events/fs.h b/include/trace/events/fs.h +new file mode 100644 +index 0000000..e967c55 +--- /dev/null ++++ b/include/trace/events/fs.h +@@ -0,0 +1,71 @@ ++#undef TRACE_SYSTEM ++#define TRACE_SYSTEM fs ++ ++#if !defined(_TRACE_FS_H) || defined(TRACE_HEADER_MULTI_READ) ++#define _TRACE_FS_H ++ ++#include ++#include ++ ++TRACE_EVENT(do_sys_open, ++ ++ TP_PROTO(char *filename, int flags, int mode), ++ ++ TP_ARGS(filename, flags, mode), ++ ++ TP_STRUCT__entry( ++ __string( filename, filename ) ++ __field( int, flags ) ++ __field( int, mode ) ++ ), ++ ++ TP_fast_assign( ++ __assign_str(filename, filename); ++ __entry->flags = flags; ++ __entry->mode = mode; ++ ), ++ ++ TP_printk("\"%s\" %x %o", ++ __get_str(filename), __entry->flags, __entry->mode) ++); ++ ++TRACE_EVENT(uselib, ++ ++ TP_PROTO(char *filename), ++ ++ TP_ARGS(filename), ++ ++ TP_STRUCT__entry( ++ __string( filename, filename ) ++ ), ++ ++ TP_fast_assign( ++ __assign_str(filename, filename); ++ ), ++ ++ TP_printk("\"%s\"", ++ __get_str(filename)) ++); ++ ++TRACE_EVENT(open_exec, ++ ++ TP_PROTO(char *filename), ++ ++ TP_ARGS(filename), ++ ++ TP_STRUCT__entry( ++ __string( filename, filename ) ++ ), ++ ++ TP_fast_assign( ++ __assign_str(filename, filename); ++ ), ++ ++ TP_printk("\"%s\"", ++ __get_str(filename)) ++); ++ ++#endif /* _TRACE_FS_H */ ++ ++/* This part must be outside protection */ ++#include +-- +1.6.3.3 + diff --git a/packages/sysutils/ureadahead/build b/packages/sysutils/ureadahead/build new file mode 100755 index 0000000000..0ae6baad9e --- /dev/null +++ b/packages/sysutils/ureadahead/build @@ -0,0 +1,20 @@ +#!/bin/sh + +. config/options + +$SCRIPTS/build toolchain +$SCRIPTS/build libnih +$SCRIPTS/build e2fsprogs + +cd $PKG_BUILD +EXT2FS_LIBS="-lext2fs -lcom_err" \ +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + +make diff --git a/packages/sysutils/ureadahead/init.d/07_ureadahead b/packages/sysutils/ureadahead/init.d/07_ureadahead new file mode 100755 index 0000000000..9915d174b0 --- /dev/null +++ b/packages/sysutils/ureadahead/init.d/07_ureadahead @@ -0,0 +1,10 @@ +# start the ureadahead daemon +# +# runlevels: openelec, textmode + +( + progress "Starting ureadahead" + + ureadahead --daemon --timeout=30 > /dev/null 2>&1 + +)& \ No newline at end of file diff --git a/packages/sysutils/ureadahead/install b/packages/sysutils/ureadahead/install new file mode 100755 index 0000000000..7ab7a30d7c --- /dev/null +++ b/packages/sysutils/ureadahead/install @@ -0,0 +1,6 @@ +#!/bin/sh + +. config/options + +mkdir -p $INSTALL/usr/sbin + cp -P $PKG_BUILD/src/ureadahead $INSTALL/usr/sbin diff --git a/packages/sysutils/ureadahead/url b/packages/sysutils/ureadahead/url new file mode 100644 index 0000000000..400d2e3709 --- /dev/null +++ b/packages/sysutils/ureadahead/url @@ -0,0 +1 @@ +http://sources.openelec.tv/svn/ureadahead-111.tar.bz2 \ No newline at end of file