lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 110/306] powerpc/pseries: Export raw per-CPU VPA data via debugfs
    Date
    From: Aravinda Prasad <aravinda@linux.vnet.ibm.com>

    [ Upstream commit c6c26fb55e8e4b3fc376be5611685990a17de27a ]

    This patch exports the raw per-CPU VPA data via debugfs.
    A per-CPU file is created which exports the VPA data of
    that CPU to help debug some of the VPA related issues or
    to analyze the per-CPU VPA related statistics.

    v3: Removed offline CPU check.

    v2: Included offline CPU check and other review comments.

    Signed-off-by: Aravinda Prasad <aravinda@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/platforms/pseries/lpar.c | 54 +++++++++++++++++++++++++++
    1 file changed, 54 insertions(+)

    diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
    index ea602f7f97ce1..49e3a88b6a0c1 100644
    --- a/arch/powerpc/platforms/pseries/lpar.c
    +++ b/arch/powerpc/platforms/pseries/lpar.c
    @@ -48,6 +48,7 @@
    #include <asm/kexec.h>
    #include <asm/fadump.h>
    #include <asm/asm-prototypes.h>
    +#include <asm/debugfs.h>

    #include "pseries.h"

    @@ -1032,3 +1033,56 @@ static int __init reserve_vrma_context_id(void)
    return 0;
    }
    machine_device_initcall(pseries, reserve_vrma_context_id);
    +
    +#ifdef CONFIG_DEBUG_FS
    +/* debugfs file interface for vpa data */
    +static ssize_t vpa_file_read(struct file *filp, char __user *buf, size_t len,
    + loff_t *pos)
    +{
    + int cpu = (long)filp->private_data;
    + struct lppaca *lppaca = &lppaca_of(cpu);
    +
    + return simple_read_from_buffer(buf, len, pos, lppaca,
    + sizeof(struct lppaca));
    +}
    +
    +static const struct file_operations vpa_fops = {
    + .open = simple_open,
    + .read = vpa_file_read,
    + .llseek = default_llseek,
    +};
    +
    +static int __init vpa_debugfs_init(void)
    +{
    + char name[16];
    + long i;
    + static struct dentry *vpa_dir;
    +
    + if (!firmware_has_feature(FW_FEATURE_SPLPAR))
    + return 0;
    +
    + vpa_dir = debugfs_create_dir("vpa", powerpc_debugfs_root);
    + if (!vpa_dir) {
    + pr_warn("%s: can't create vpa root dir\n", __func__);
    + return -ENOMEM;
    + }
    +
    + /* set up the per-cpu vpa file*/
    + for_each_possible_cpu(i) {
    + struct dentry *d;
    +
    + sprintf(name, "cpu-%ld", i);
    +
    + d = debugfs_create_file(name, 0400, vpa_dir, (void *)i,
    + &vpa_fops);
    + if (!d) {
    + pr_warn("%s: can't create per-cpu vpa file\n",
    + __func__);
    + return -ENOMEM;
    + }
    + }
    +
    + return 0;
    +}
    +machine_arch_initcall(pseries, vpa_debugfs_init);
    +#endif /* CONFIG_DEBUG_FS */
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-27 22:00    [W:4.040 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site