Drivers: hv: Add arch independent default functions for some Hyper-V handlers

Architecture independent Hyper-V code calls various arch-specific handlers
when needed.  To aid in supporting multiple architectures, provide weak
defaults that can be overridden by arch-specific implementations where
appropriate.  But when arch-specific overrides aren't needed or haven't
been implemented yet for a particular architecture, these stubs reduce
the amount of clutter under arch/.

No functional change.

Signed-off-by: Michael Kelley <mikelley@microsoft.com>
Link: https://lore.kernel.org/r/1626287687-2045-3-git-send-email-mikelley@microsoft.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
This commit is contained in:
Michael Kelley 2021-07-14 11:34:46 -07:00 committed by Wei Liu
parent afca4d95dd
commit 9d7cf2c967
3 changed files with 49 additions and 8 deletions

View File

@ -468,7 +468,6 @@ void hyperv_cleanup(void)
hypercall_msr.as_uint64 = 0; hypercall_msr.as_uint64 = 0;
wrmsrl(HV_X64_MSR_REFERENCE_TSC, hypercall_msr.as_uint64); wrmsrl(HV_X64_MSR_REFERENCE_TSC, hypercall_msr.as_uint64);
} }
EXPORT_SYMBOL_GPL(hyperv_cleanup);
void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die) void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die)
{ {
@ -542,4 +541,3 @@ bool hv_is_isolation_supported(void)
{ {
return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE; return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE;
} }
EXPORT_SYMBOL_GPL(hv_is_isolation_supported);

View File

@ -62,14 +62,12 @@ void hv_setup_vmbus_handler(void (*handler)(void))
{ {
vmbus_handler = handler; vmbus_handler = handler;
} }
EXPORT_SYMBOL_GPL(hv_setup_vmbus_handler);
void hv_remove_vmbus_handler(void) void hv_remove_vmbus_handler(void)
{ {
/* We have no way to deallocate the interrupt gate */ /* We have no way to deallocate the interrupt gate */
vmbus_handler = NULL; vmbus_handler = NULL;
} }
EXPORT_SYMBOL_GPL(hv_remove_vmbus_handler);
/* /*
* Routines to do per-architecture handling of stimer0 * Routines to do per-architecture handling of stimer0
@ -104,25 +102,21 @@ void hv_setup_kexec_handler(void (*handler)(void))
{ {
hv_kexec_handler = handler; hv_kexec_handler = handler;
} }
EXPORT_SYMBOL_GPL(hv_setup_kexec_handler);
void hv_remove_kexec_handler(void) void hv_remove_kexec_handler(void)
{ {
hv_kexec_handler = NULL; hv_kexec_handler = NULL;
} }
EXPORT_SYMBOL_GPL(hv_remove_kexec_handler);
void hv_setup_crash_handler(void (*handler)(struct pt_regs *regs)) void hv_setup_crash_handler(void (*handler)(struct pt_regs *regs))
{ {
hv_crash_handler = handler; hv_crash_handler = handler;
} }
EXPORT_SYMBOL_GPL(hv_setup_crash_handler);
void hv_remove_crash_handler(void) void hv_remove_crash_handler(void)
{ {
hv_crash_handler = NULL; hv_crash_handler = NULL;
} }
EXPORT_SYMBOL_GPL(hv_remove_crash_handler);
#ifdef CONFIG_KEXEC_CORE #ifdef CONFIG_KEXEC_CORE
static void hv_machine_shutdown(void) static void hv_machine_shutdown(void)

View File

@ -16,6 +16,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <linux/bitfield.h> #include <linux/bitfield.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/ptrace.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/hyperv-tlfs.h> #include <asm/hyperv-tlfs.h>
#include <asm/mshyperv.h> #include <asm/mshyperv.h>
@ -202,3 +203,51 @@ bool hv_query_ext_cap(u64 cap_query)
return hv_extended_cap & cap_query; return hv_extended_cap & cap_query;
} }
EXPORT_SYMBOL_GPL(hv_query_ext_cap); EXPORT_SYMBOL_GPL(hv_query_ext_cap);
/* These __weak functions provide default "no-op" behavior and
* may be overridden by architecture specific versions. Architectures
* for which the default "no-op" behavior is sufficient can leave
* them unimplemented and not be cluttered with a bunch of stub
* functions in arch-specific code.
*/
bool __weak hv_is_isolation_supported(void)
{
return false;
}
EXPORT_SYMBOL_GPL(hv_is_isolation_supported);
void __weak hv_setup_vmbus_handler(void (*handler)(void))
{
}
EXPORT_SYMBOL_GPL(hv_setup_vmbus_handler);
void __weak hv_remove_vmbus_handler(void)
{
}
EXPORT_SYMBOL_GPL(hv_remove_vmbus_handler);
void __weak hv_setup_kexec_handler(void (*handler)(void))
{
}
EXPORT_SYMBOL_GPL(hv_setup_kexec_handler);
void __weak hv_remove_kexec_handler(void)
{
}
EXPORT_SYMBOL_GPL(hv_remove_kexec_handler);
void __weak hv_setup_crash_handler(void (*handler)(struct pt_regs *regs))
{
}
EXPORT_SYMBOL_GPL(hv_setup_crash_handler);
void __weak hv_remove_crash_handler(void)
{
}
EXPORT_SYMBOL_GPL(hv_remove_crash_handler);
void __weak hyperv_cleanup(void)
{
}
EXPORT_SYMBOL_GPL(hyperv_cleanup);