diff options
| author | 2008-10-03 11:52:33 +0100 | |
|---|---|---|
| committer | 2008-10-03 11:52:33 +0100 | |
| commit | 56f68556d7bbb51dd158c74deb09c783345bfbbd (patch) | |
| tree | 536e6e3c7063b1eee927194dda257602bd3dc66f /arch/x86/kernel/cpuid.c | |
| parent | Merge branch 'omap2-clock' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git (diff) | |
| parent | [ARM] omap: fix a load of "warning: symbol 'xxx' was not declared. Should it be static?" (diff) | |
| download | linux-dev-56f68556d7bbb51dd158c74deb09c783345bfbbd.tar.xz linux-dev-56f68556d7bbb51dd158c74deb09c783345bfbbd.zip | |
Merge unstable branch 'omap-rmk'
Merge branch 'omap-rmk' into omap-all
Diffstat (limited to 'arch/x86/kernel/cpuid.c')
| -rw-r--r-- | arch/x86/kernel/cpuid.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 14b11b3be31c..8e9cd6a8ec12 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c @@ -89,6 +89,8 @@ static ssize_t cpuid_read(struct file *file, char __user *buf, struct cpuid_regs cmd; int cpu = iminor(file->f_path.dentry->d_inode); u64 pos = *ppos; + ssize_t bytes = 0; + int err = 0; if (count % 16) return -EINVAL; /* Invalid chunk size */ @@ -96,14 +98,19 @@ static ssize_t cpuid_read(struct file *file, char __user *buf, for (; count; count -= 16) { cmd.eax = pos; cmd.ecx = pos >> 32; - smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1); - if (copy_to_user(tmp, &cmd, 16)) - return -EFAULT; + err = smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1); + if (err) + break; + if (copy_to_user(tmp, &cmd, 16)) { + err = -EFAULT; + break; + } tmp += 16; + bytes += 16; *ppos = ++pos; } - return tmp - buf; + return bytes ? bytes : err; } static int cpuid_open(struct inode *inode, struct file *file) |
