[PATCH] Fix build breakage if !SYSFS

From: Dhaval Giani
Date: Wed Oct 17 2007 - 01:24:31 EST


On Tue, Oct 16, 2007 at 08:00:44PM +0100, Ralf Baechle wrote:
> On Tue, Oct 16, 2007 at 11:10:16PM +0530, Dhaval Giani wrote:
>
> > On Tue, Oct 16, 2007 at 02:02:31PM +0100, Ralf Baechle wrote:
> > > Changeset 5cb350baf580017da38199625b7365b1763d7180 causes build breakage
> > > if sysfs support is disabled:
> > >
> > > kernel/built-in.o: In function `uids_kobject_init':
> > > (.init.text+0x1488): undefined reference to `kernel_subsys'
> > > kernel/built-in.o: In function `uids_kobject_init':
> > > (.init.text+0x1490): undefined reference to `kernel_subsys'
> > > kernel/built-in.o: In function `uids_kobject_init':
> > > (.init.text+0x1480): undefined reference to `kernel_subsys'
> > > kernel/built-in.o: In function `uids_kobject_init':
> > > (.init.text+0x1494): undefined reference to `kernel_subsys'
> > >
> > > This breaks for example mipssim_defconfig.
> > >
> > > Ralf
> >
> > Hi Ralf,
> >
> > Can you try this and confirm if it works?
>
> Yes, this solves the issue.

Hi,

Could you please include this patch to fix the build breakage?

thanks
Dhaval

--

When CONFIG_SYSFS is not set, CONFIG_FAIR_USER_SCHED fails to build
with

kernel/built-in.o: In function `uids_kobject_init':
(.init.text+0x1488): undefined reference to `kernel_subsys'
kernel/built-in.o: In function `uids_kobject_init':
(.init.text+0x1490): undefined reference to `kernel_subsys'
kernel/built-in.o: In function `uids_kobject_init':
(.init.text+0x1480): undefined reference to `kernel_subsys'
kernel/built-in.o: In function `uids_kobject_init':
(.init.text+0x1494): undefined reference to `kernel_subsys'

This patch fixes this build error.

Signed-off-by: Srivatsa Vaddagiri <vatsa@xxxxxxxxxxxxxxxxxx>
Signed-off-by: Dhaval Giani <dhaval@xxxxxxxxxxxxxxxxxx>

---
include/linux/sched.h | 2 ++
kernel/user.c | 23 +++++++++++++++--------
2 files changed, 17 insertions(+), 8 deletions(-)

Index: current/include/linux/sched.h
===================================================================
--- current.orig/include/linux/sched.h
+++ current/include/linux/sched.h
@@ -602,10 +602,12 @@ struct user_struct {

#ifdef CONFIG_FAIR_USER_SCHED
struct task_group *tg;
+#ifdef CONFIG_SYSFS
struct kset kset;
struct subsys_attribute user_attr;
struct work_struct work;
#endif
+#endif
};

#ifdef CONFIG_FAIR_USER_SCHED
Index: current/kernel/user.c
===================================================================
--- current.orig/kernel/user.c
+++ current/kernel/user.c
@@ -87,9 +87,6 @@ static inline struct user_struct *uid_ha

#ifdef CONFIG_FAIR_USER_SCHED

-static struct kobject uids_kobject; /* represents /sys/kernel/uids directory */
-static DEFINE_MUTEX(uids_mutex);
-
static void sched_destroy_user(struct user_struct *up)
{
sched_destroy_group(up->tg);
@@ -111,6 +108,19 @@ static void sched_switch_user(struct tas
sched_move_task(p);
}

+#else /* CONFIG_FAIR_USER_SCHED */
+
+static void sched_destroy_user(struct user_struct *up) { }
+static int sched_create_user(struct user_struct *up) { return 0; }
+static void sched_switch_user(struct task_struct *p) { }
+
+#endif /* CONFIG_FAIR_USER_SCHED */
+
+#if defined(CONFIG_FAIR_USER_SCHED) && defined(CONFIG_SYSFS)
+
+static struct kobject uids_kobject; /* represents /sys/kernel/uids directory */
+static DEFINE_MUTEX(uids_mutex);
+
static inline void uids_mutex_lock(void)
{
mutex_lock(&uids_mutex);
@@ -257,11 +267,8 @@ static inline void free_user(struct user
schedule_work(&up->work);
}

-#else /* CONFIG_FAIR_USER_SCHED */
+#else /* CONFIG_FAIR_USER_SCHED && CONFIG_SYSFS */

-static void sched_destroy_user(struct user_struct *up) { }
-static int sched_create_user(struct user_struct *up) { return 0; }
-static void sched_switch_user(struct task_struct *p) { }
static inline int user_kobject_create(struct user_struct *up) { return 0; }
static inline void uids_mutex_lock(void) { }
static inline void uids_mutex_unlock(void) { }
@@ -280,7 +287,7 @@ static inline void free_user(struct user
kmem_cache_free(uid_cachep, up);
}

-#endif /* CONFIG_FAIR_USER_SCHED */
+#endif

/*
* Locate the user_struct for the passed UID. If found, take a ref on it. The

--
regards,
Dhaval
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/