Move kvm_stats_linear_hist_update() and kvm_stats_log_hist_update() to kvm_host.h as static inline helpers to resolve a linker error on PPC, which references the latter from module code. This also fixes a goof where the functions are tagged as "inline", despite being externs and thus not inline-friendy. ERROR: modpost: ".kvm_stats_log_hist_update" [arch/powerpc/kvm/kvm-hv.ko] undefined! Fixes: c8ba95948182 ("KVM: stats: Support linear and logarithmic histogram statistics") Cc: Jing Zhang <jingzhangos@xxxxxxxxxx> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- include/linux/kvm_host.h | 38 +++++++++++++++++++++++++++++++++++--- virt/kvm/binary_stats.c | 34 ---------------------------------- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index d447b21cdd73..e4d712e9f760 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1467,9 +1467,41 @@ ssize_t kvm_stats_read(char *id, const struct kvm_stats_header *header, const struct _kvm_stats_desc *desc, void *stats, size_t size_stats, char __user *user_buffer, size_t size, loff_t *offset); -inline void kvm_stats_linear_hist_update(u64 *data, size_t size, - u64 value, size_t bucket_size); -inline void kvm_stats_log_hist_update(u64 *data, size_t size, u64 value); + +/** + * kvm_stats_linear_hist_update() - Update bucket value for linear histogram + * statistics data. + * + * @data: start address of the stats data + * @size: the number of bucket of the stats data + * @value: the new value used to update the linear histogram's bucket + * @bucket_size: the size (width) of a bucket + */ +static inline void kvm_stats_linear_hist_update(u64 *data, size_t size, + u64 value, size_t bucket_size) +{ + size_t index = div64_u64(value, bucket_size); + + index = min(index, size - 1); + ++data[index]; +} + +/** + * kvm_stats_log_hist_update() - Update bucket value for logarithmic histogram + * statistics data. + * + * @data: start address of the stats data + * @size: the number of bucket of the stats data + * @value: the new value used to update the logarithmic histogram's bucket + */ +static inline void kvm_stats_log_hist_update(u64 *data, size_t size, u64 value) +{ + size_t index = fls64(value); + + index = min(index, size - 1); + ++data[index]; +} + #define KVM_STATS_LINEAR_HIST_UPDATE(array, value, bsize) \ kvm_stats_linear_hist_update(array, ARRAY_SIZE(array), value, bsize) #define KVM_STATS_LOG_HIST_UPDATE(array, value) \ diff --git a/virt/kvm/binary_stats.c b/virt/kvm/binary_stats.c index 9bd595c92d3a..eefca6c69f51 100644 --- a/virt/kvm/binary_stats.c +++ b/virt/kvm/binary_stats.c @@ -142,37 +142,3 @@ ssize_t kvm_stats_read(char *id, const struct kvm_stats_header *header, *offset = pos; return len; } - -/** - * kvm_stats_linear_hist_update() - Update bucket value for linear histogram - * statistics data. - * - * @data: start address of the stats data - * @size: the number of bucket of the stats data - * @value: the new value used to update the linear histogram's bucket - * @bucket_size: the size (width) of a bucket - */ -inline void kvm_stats_linear_hist_update(u64 *data, size_t size, - u64 value, size_t bucket_size) -{ - size_t index = div64_u64(value, bucket_size); - - index = min(index, size - 1); - ++data[index]; -} - -/** - * kvm_stats_log_hist_update() - Update bucket value for logarithmic histogram - * statistics data. - * - * @data: start address of the stats data - * @size: the number of bucket of the stats data - * @value: the new value used to update the logarithmic histogram's bucket - */ -inline void kvm_stats_log_hist_update(u64 *data, size_t size, u64 value) -{ - size_t index = fls64(value); - - index = min(index, size - 1); - ++data[index]; -} -- 2.32.0.605.g8dce9f2422-goog