Commit 3637897b authored by Borislav Petkov's avatar Borislav Petkov Committed by Ingo Molnar
Browse files

x86/paravirt: Clean up native_patch()



When CONFIG_PARAVIRT_SPINLOCKS=n, it generates a warning:

  arch/x86/kernel/paravirt_patch_64.c: In function ‘native_patch’:
  arch/x86/kernel/paravirt_patch_64.c:89:1: warning: label ‘patch_site’ defined but not used [-Wunused-label]
   patch_site:

... but those labels can simply be removed by directly calling the
respective functions there.

Get rid of local variables too, while at it. Also, simplify function
flow for better readability.

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: virtualization@lists.linux-foundation.org
Link: http://lkml.kernel.org/r/20180911091510.GA12094@zn.tnic


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent b7a5eb6a
Loading
Loading
Loading
Loading
+16 −28
Original line number Diff line number Diff line
@@ -34,14 +34,10 @@ extern bool pv_is_native_vcpu_is_preempted(void);

unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
{
	const unsigned char *start, *end;
	unsigned ret;

#define PATCH_SITE(ops, x)					\
	case PARAVIRT_PATCH(ops.x):				\
			start = start_##ops##_##x;		\
			end = end_##ops##_##x;			\
			goto patch_site
		return paravirt_patch_insns(ibuf, len, start_##ops##_##x, end_##ops##_##x)

	switch (type) {
#ifdef CONFIG_PARAVIRT_XXL
		PATCH_SITE(irq, irq_disable);
@@ -55,31 +51,23 @@ unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
#endif
#if defined(CONFIG_PARAVIRT_SPINLOCKS)
	case PARAVIRT_PATCH(lock.queued_spin_unlock):
			if (pv_is_native_spin_unlock()) {
				start = start_lock_queued_spin_unlock;
				end   = end_lock_queued_spin_unlock;
				goto patch_site;
			}
			goto patch_default;
		if (pv_is_native_spin_unlock())
			return paravirt_patch_insns(ibuf, len,
						    start_lock_queued_spin_unlock,
						    end_lock_queued_spin_unlock);
		break;

	case PARAVIRT_PATCH(lock.vcpu_is_preempted):
			if (pv_is_native_vcpu_is_preempted()) {
				start = start_lock_vcpu_is_preempted;
				end   = end_lock_vcpu_is_preempted;
				goto patch_site;
			}
			goto patch_default;
		if (pv_is_native_vcpu_is_preempted())
			return paravirt_patch_insns(ibuf, len,
						    start_lock_vcpu_is_preempted,
						    end_lock_vcpu_is_preempted);
		break;
#endif

	default:
patch_default: __maybe_unused
		ret = paravirt_patch_default(type, ibuf, addr, len);
		break;

patch_site:
		ret = paravirt_patch_insns(ibuf, len, start, end);
		break;
	}
#undef PATCH_SITE
	return ret;
	return paravirt_patch_default(type, ibuf, addr, len);
}
+17 −29
Original line number Diff line number Diff line
@@ -42,14 +42,10 @@ extern bool pv_is_native_vcpu_is_preempted(void);

unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
{
	const unsigned char *start, *end;
	unsigned ret;

#define PATCH_SITE(ops, x)					\
	case PARAVIRT_PATCH(ops.x):				\
			start = start_##ops##_##x;		\
			end = end_##ops##_##x;			\
			goto patch_site
		return paravirt_patch_insns(ibuf, len, start_##ops##_##x, end_##ops##_##x)

	switch (type) {
#ifdef CONFIG_PARAVIRT_XXL
		PATCH_SITE(irq, restore_fl);
@@ -65,31 +61,23 @@ unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
#endif
#if defined(CONFIG_PARAVIRT_SPINLOCKS)
	case PARAVIRT_PATCH(lock.queued_spin_unlock):
			if (pv_is_native_spin_unlock()) {
				start = start_lock_queued_spin_unlock;
				end   = end_lock_queued_spin_unlock;
				goto patch_site;
			}
			goto patch_default;
		if (pv_is_native_spin_unlock())
			return paravirt_patch_insns(ibuf, len,
						    start_lock_queued_spin_unlock,
						    end_lock_queued_spin_unlock);
		break;

	case PARAVIRT_PATCH(lock.vcpu_is_preempted):
			if (pv_is_native_vcpu_is_preempted()) {
				start = start_lock_vcpu_is_preempted;
				end   = end_lock_vcpu_is_preempted;
				goto patch_site;
			}
			goto patch_default;
		if (pv_is_native_vcpu_is_preempted())
			return paravirt_patch_insns(ibuf, len,
						    start_lock_vcpu_is_preempted,
						    end_lock_vcpu_is_preempted);
		break;
#endif

	default:
patch_default: __maybe_unused
		ret = paravirt_patch_default(type, ibuf, addr, len);
		break;

patch_site:
		ret = paravirt_patch_insns(ibuf, len, start, end);
		break;
	}
#undef PATCH_SITE
	return ret;
	return paravirt_patch_default(type, ibuf, addr, len);
}