Skip to content

Commit

Permalink
clocksource: Split out user string input
Browse files Browse the repository at this point in the history
Split out the user string input for clocksource override. Preparatory
patch for unbind.

[ jstultz: Fix an off by one error ]

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Magnus Damm <magnus.damm@gmail.com>
Link: http://lkml.kernel.org/r/20130425143435.895851338@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
KAGA-KOKO committed May 16, 2013
1 parent f5a2e34 commit 29b5407
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions kernel/time/clocksource.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 maxsec)
static struct clocksource *curr_clocksource;
static LIST_HEAD(clocksource_list);
static DEFINE_MUTEX(clocksource_mutex);
static char override_name[32];
#define CS_NAME_LEN 32
static char override_name[CS_NAME_LEN];
static int finished_booting;

#ifdef CONFIG_CLOCKSOURCE_WATCHDOG
Expand Down Expand Up @@ -838,6 +839,23 @@ sysfs_show_current_clocksources(struct device *dev,
return count;
}

static size_t clocksource_get_uname(const char *buf, char *dst, size_t cnt)
{
size_t ret = cnt;

/* strings from sysfs write are not 0 terminated! */
if (!cnt || cnt >= CS_NAME_LEN)
return -EINVAL;

/* strip of \n: */
if (buf[cnt-1] == '\n')
cnt--;
if (cnt > 0)
memcpy(dst, buf, cnt);
dst[cnt] = 0;
return ret;
}

/**
* sysfs_override_clocksource - interface for manually overriding clocksource
* @dev: unused
Expand All @@ -852,22 +870,13 @@ static ssize_t sysfs_override_clocksource(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
size_t ret = count;

/* strings from sysfs write are not 0 terminated! */
if (count >= sizeof(override_name))
return -EINVAL;

/* strip of \n: */
if (buf[count-1] == '\n')
count--;
size_t ret;

mutex_lock(&clocksource_mutex);

if (count > 0)
memcpy(override_name, buf, count);
override_name[count] = 0;
clocksource_select();
ret = clocksource_get_uname(buf, override_name, count);
if (ret >= 0)
clocksource_select();

mutex_unlock(&clocksource_mutex);

Expand Down

0 comments on commit 29b5407

Please sign in to comment.