Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b46ca70 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86: cpuid: propagate error from smp_call_function_single()



Propagate error (-ENXIO) from smp_call_function_single() in the CPUID
driver.  This can happen when a CPU is unplugged while the CPUID
driver is open.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent c6f31932
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -89,6 +89,7 @@ static ssize_t cpuid_read(struct file *file, char __user *buf,
	struct cpuid_regs cmd;
	struct cpuid_regs cmd;
	int cpu = iminor(file->f_path.dentry->d_inode);
	int cpu = iminor(file->f_path.dentry->d_inode);
	u64 pos = *ppos;
	u64 pos = *ppos;
	int err;


	if (count % 16)
	if (count % 16)
		return -EINVAL;	/* Invalid chunk size */
		return -EINVAL;	/* Invalid chunk size */
@@ -96,7 +97,9 @@ static ssize_t cpuid_read(struct file *file, char __user *buf,
	for (; count; count -= 16) {
	for (; count; count -= 16) {
		cmd.eax = pos;
		cmd.eax = pos;
		cmd.ecx = pos >> 32;
		cmd.ecx = pos >> 32;
		smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1);
		err = smp_call_function_single(cpu, cpuid_smp_cpuid, &cmd, 1);
		if (err)
			return err;
		if (copy_to_user(tmp, &cmd, 16))
		if (copy_to_user(tmp, &cmd, 16))
			return -EFAULT;
			return -EFAULT;
		tmp += 16;
		tmp += 16;