Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp167277ybt; Tue, 23 Jun 2020 18:25:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzVhge6iw+WZQa0Y831XUBDxRNx5MtNinnvdhY8kYYgS8l9h5KfYJDeGrKC+Ang+N9GHLXg X-Received: by 2002:a17:906:dbe5:: with SMTP id yd5mr8741459ejb.328.1592961930591; Tue, 23 Jun 2020 18:25:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592961930; cv=none; d=google.com; s=arc-20160816; b=BoQxGWhh78JOE3PJmBrk7BJHrccZ5rNd9IdkkKiaCsf0YAhXQTNYNf2DZzxjiyDHyW Ty7+sShgmaJlxP7ALjj1pPfMdjfjoIwPwtJ+XnzZ+bo9x4i8Wm7rha/BfyoG0cziQYCe ddMAKU5eUX/dtDXoDuuOlK0mFLBaW4d6vjXzz0ZlXzdLd36znEcxEoPJoo38ryBpjjaw ZbQPIieKaDHzzFefYM0Va99Te723Spbu9WATuT1jNHq8wdad89O3R0faM9/WFbl52s10 M505McIjfnJht1FKYR+6QwiU68nCgvIdK26F0OVoGubF6m1mGHhqgxfNpySRVld0TU9R bHYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature; bh=r5Ps0ckSVMP7RdDIdPCozlpA1Q6xNvrvfOb891tsolA=; b=ga4xrCMOW4xugkwTJrmuyuNAgSPDDjBMIXCvHFKuV/24WcJNSRYBSGlyBKC0oWbiKx rdzCmXcPDn3T7Pm2FJ0G8bexsytSlg8r+XrMcGAPtt/CZ7dM3NAulDUFmEBZDWIswbBH wlf4oXdI84XBviiqqFZ0cTyWB+njgY8TKgbfvHEwJbIfUP6PQYT/92bHkIYhySYEcP/Z fjjlHyU9bk7YuAhjAJBzyYzx3jR0V24abp9LDoejUnsycH9cZnDgKs1seiB2XiSwzRBM 6gFndDPR7nzwU7HdmWIvJQx7TF6oLxGgJ05vWHIDjfOdgp9oIZXedXmu6r+Rzotu3an2 L83A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=Ku2nceJm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w27si13500588edi.519.2020.06.23.18.25.07; Tue, 23 Jun 2020 18:25:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=Ku2nceJm; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388430AbgFXBYy (ORCPT + 99 others); Tue, 23 Jun 2020 21:24:54 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:21190 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388373AbgFXBYt (ORCPT ); Tue, 23 Jun 2020 21:24:49 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1592961887; h=References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=r5Ps0ckSVMP7RdDIdPCozlpA1Q6xNvrvfOb891tsolA=; b=Ku2nceJm/2NN/ptFZ78UAzTxr7Q4vxANSasjyXWAciJKY+jxH2aWDwH7QkR/vfPKTZbK93Lo 7FJvY+YwchWjJslBx6rChuGqYSD+jhKG5zL4YSrPzW2WPZRW5erqOHKnRvajHXGbPXw4kM3r OjstA8P/pAZ8SHs9f+SSZ8tJf2M= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n04.prod.us-east-1.postgun.com with SMTP id 5ef2ab5f0206ad41d1e7e802 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Wed, 24 Jun 2020 01:24:47 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 469A4C4339C; Wed, 24 Jun 2020 01:24:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.0 Received: from rishabhb-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: rishabhb) by smtp.codeaurora.org (Postfix) with ESMTPSA id 684B9C433C8; Wed, 24 Jun 2020 01:24:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 684B9C433C8 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=rishabhb@codeaurora.org From: Rishabh Bhatnagar To: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: bjorn.andersson@linaro.org, mathieu.poirier@linaro.org, tsoni@codeaurora.org, psodagud@codeaurora.org, sidgup@codeaurora.org, Rishabh Bhatnagar Subject: [PATCH v5 3/3] remoteproc: Add coredump debugfs entry Date: Tue, 23 Jun 2020 18:24:14 -0700 Message-Id: <1592961854-634-4-git-send-email-rishabhb@codeaurora.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1592961854-634-1-git-send-email-rishabhb@codeaurora.org> References: <1592961854-634-1-git-send-email-rishabhb@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add coredump debugfs entry to configure the type of dump that will be collected during recovery. User can select between default or inline coredump functionality. Also coredump collection can be disabled through this interface. This functionality can be configured differently for different remote processors. Signed-off-by: Rishabh Bhatnagar Reviewed-by: Bjorn Andersson Reviewed-by: Mathieu Poirier --- drivers/remoteproc/remoteproc_debugfs.c | 86 +++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/drivers/remoteproc/remoteproc_debugfs.c b/drivers/remoteproc/remoteproc_debugfs.c index 732770e..cca0a91 100644 --- a/drivers/remoteproc/remoteproc_debugfs.c +++ b/drivers/remoteproc/remoteproc_debugfs.c @@ -28,6 +28,90 @@ static struct dentry *rproc_dbg; /* + * A coredump-configuration-to-string lookup table, for exposing a + * human readable configuration via debugfs. Always keep in sync with + * enum rproc_coredump_mechanism + */ +static const char * const rproc_coredump_str[] = { + [RPROC_COREDUMP_DEFAULT] = "default", + [RPROC_COREDUMP_INLINE] = "inline", + [RPROC_COREDUMP_DISABLED] = "disabled", +}; + +/* Expose the current coredump configuration via debugfs */ +static ssize_t rproc_coredump_read(struct file *filp, char __user *userbuf, + size_t count, loff_t *ppos) +{ + struct rproc *rproc = filp->private_data; + const char *buf = rproc_coredump_str[rproc->dump_conf]; + + return simple_read_from_buffer(userbuf, count, ppos, buf, strlen(buf)); +} + +/* + * By writing to the 'coredump' debugfs entry, we control the behavior of the + * coredump mechanism dynamically. The default value of this entry is "default". + * + * The 'coredump' debugfs entry supports these commands: + * + * default: This is the default coredump mechanism. When the remoteproc + * crashes the entire coredump will be copied to a separate buffer + * and exposed to userspace. + * + * inline: The coredump will not be copied to a separate buffer and the + * recovery process will have to wait until data is read by + * userspace. But this avoid usage of extra memory. + * + * disabled: This will disable coredump. Recovery will proceed without + * collecting any dump. + */ +static ssize_t rproc_coredump_write(struct file *filp, + const char __user *user_buf, size_t count, + loff_t *ppos) +{ + struct rproc *rproc = filp->private_data; + int ret, err = 0; + char buf[20]; + + if (count > sizeof(buf)) + return -EINVAL; + + ret = copy_from_user(buf, user_buf, count); + if (ret) + return -EFAULT; + + /* remove end of line */ + if (buf[count - 1] == '\n') + buf[count - 1] = '\0'; + + if (rproc->state == RPROC_CRASHED) { + dev_err(&rproc->dev, "can't change coredump configuration\n"); + err = -EBUSY; + goto out; + } + + if (!strncmp(buf, "disable", count)) { + rproc->dump_conf = RPROC_COREDUMP_DISABLED; + } else if (!strncmp(buf, "inline", count)) { + rproc->dump_conf = RPROC_COREDUMP_INLINE; + } else if (!strncmp(buf, "default", count)) { + rproc->dump_conf = RPROC_COREDUMP_DEFAULT; + } else { + dev_err(&rproc->dev, "Invalid coredump configuration\n"); + err = -EINVAL; + } +out: + return err ? err : count; +} + +static const struct file_operations rproc_coredump_fops = { + .read = rproc_coredump_read, + .write = rproc_coredump_write, + .open = simple_open, + .llseek = generic_file_llseek, +}; + +/* * Some remote processors may support dumping trace logs into a shared * memory buffer. We expose this trace buffer using debugfs, so users * can easily tell what's going on remotely. @@ -337,6 +421,8 @@ void rproc_create_debug_dir(struct rproc *rproc) rproc, &rproc_rsc_table_fops); debugfs_create_file("carveout_memories", 0400, rproc->dbg_dir, rproc, &rproc_carveouts_fops); + debugfs_create_file("coredump", 0600, rproc->dbg_dir, + rproc, &rproc_coredump_fops); } void __init rproc_init_debugfs(void) -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project