Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp1493584rdh; Fri, 24 Nov 2023 14:23:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IFKfS+6tHWRL9tzmK1XcvZuDbHf1Ed1w22d4Ms3Owyd1G/hsh370MrUggs9aQ989BMEBw+3 X-Received: by 2002:a05:6e02:3399:b0:35c:8410:84ed with SMTP id bn25-20020a056e02339900b0035c841084edmr829835ilb.13.1700864629753; Fri, 24 Nov 2023 14:23:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700864629; cv=none; d=google.com; s=arc-20160816; b=lU6tlljGUhyqBCIsSvgcvN1gdPV0UxxHxl9hnUhYtYE+0JB7ktyRagKoz616MoSWs1 IA5lBhC0TvH+BRXQ0obkBQA11QBMEQpefR0A92ojYayESDasUmOVjQOkN57GmX805HCi 7DjvR/V4i6/X0ndCjO7dUWwtZQMsUyg1JwZvCStC+/faXsXBop+02geRUgOgdguoosWN Gd3eqbiJNnDT/D+Yp5KrU24MK8z0A+9mDXypM6ONyRm/jDLV2lBFghg/TY9R8lm8GQlp G+UKI2dfwCTHR8BZ+ZewGg0pk0QkBxPMellPI/CyI78gyHwZ6yruVkd4CVfT9VpctRao R8Hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=4990baIAlfmVS/cuHV5ll4dJd4q948H/yj67VkxMl0o=; fh=rxs3vuaxTEbDPyqEuqHlUTAdsjZJxeRheFqgoSifI+0=; b=HOCT11RJJ8+ZipsqjxvOJFFyw9pKCQzJpnd/rNCvwovj7QB8zAdPQPKk0LsnUsoko7 uw/7zE72Qn4FqPyGr4BjzDYZrI0QFjYuIYp330RnjmgkcA3bGnk3y3QtwQMGme9ZK53Z bMJe9rRlXdRrl2RETbDdYD1F4c4kTpoFMA322RoSV+C7YHWQp/KywanlH+0Q5SPZVoqb 5o1gLzSwCszv//etjwnKgUc0H6refawuggwA2dQq7v4LOefZGwSnHEBDfwF9rCsgS/8X Hsw8lQCYaWLZPmnRESEpMBRdqm81JrQbHvzgKVCXIc5mSaB3l8UnCjtDF1RucaXUydNI dqSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=a8s4b0Sp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id w191-20020a6382c8000000b00565e509dc75si4377228pgd.359.2023.11.24.14.23.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Nov 2023 14:23:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=a8s4b0Sp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id CAD6580725D7; Fri, 24 Nov 2023 14:23:07 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231823AbjKXWWg (ORCPT + 99 others); Fri, 24 Nov 2023 17:22:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231667AbjKXWW1 (ORCPT ); Fri, 24 Nov 2023 17:22:27 -0500 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DA2FA1FD7; Fri, 24 Nov 2023 14:22:07 -0800 (PST) Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AOMD7Vp010830; Fri, 24 Nov 2023 22:21:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=qcppdkim1; bh=4990baIAlfmVS/cuHV5ll4dJd4q948H/yj67VkxMl0o=; b=a8s4b0SpiRAl5E8ln5Cb26pe+rXlFHCURefuDuMQ3SIiNW5Ac8h2m5cu6XoJX9WQZSPP wLKJDNucJscGH3O9BIgf111O8m2VuWcOADzhTZxDkfx812U8+GMGKSQyX/RSOkiSI/jA ss4w3DTJyYJj/eRperxj4Xj2+Ps7VLD0SQzxBc0hzY2OsY1NynFcvt2jXSpJ0cRgMFAG 6OKsMd2tPgaq885i5S5/CSV2eqaLICIMkZDFNYj+5SG6co/geXjpwlu9eun8LSiIwoP9 eBjhLgPFFfFnWIyToc+U8SNWzjauUeiGQFtRjXiWFSjAPSRCuONed7YgqDFbYXQ3d2Cy FQ== Received: from nasanppmta02.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3ujtd8hc5n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Nov 2023 22:21:47 +0000 Received: from nasanex01c.na.qualcomm.com (nasanex01c.na.qualcomm.com [10.45.79.139]) by NASANPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 3AOMLlQa018649 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Nov 2023 22:21:47 GMT Received: from hu-mojha-hyd.qualcomm.com (10.80.80.8) by nasanex01c.na.qualcomm.com (10.45.79.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Fri, 24 Nov 2023 14:21:37 -0800 From: Mukesh Ojha To: , , , , , , , , , , , , , , , , CC: , , , , , , , , , Mukesh Ojha Subject: [Patch v6 11/12] pstore/ram: Add ramoops ready notifier support Date: Sat, 25 Nov 2023 03:49:54 +0530 Message-ID: <1700864395-1479-12-git-send-email-quic_mojha@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1700864395-1479-1-git-send-email-quic_mojha@quicinc.com> References: <1700864395-1479-1-git-send-email-quic_mojha@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nasanex01c.na.qualcomm.com (10.45.79.139) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: lqkUmmB8IS1KaL6dqzOsIkviN8gd4TWl X-Proofpoint-GUID: lqkUmmB8IS1KaL6dqzOsIkviN8gd4TWl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-24_09,2023-11-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 bulkscore=0 suspectscore=0 mlxlogscore=999 impostorscore=0 adultscore=0 malwarescore=0 priorityscore=1501 clxscore=1015 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311240174 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Fri, 24 Nov 2023 14:23:08 -0800 (PST) Client like minidump, is only interested in ramoops region addresses/size so that it could register them with its table and also it is only deals with ram backend and does not use pstorefs to read the records. Let's introduce a client notifier in ramoops which gets called when ramoops driver probes successfully and it passes the ramoops region information to the passed callback by the client and If the call for ramoops ready register comes after ramoops probe than call the callback directly. Signed-off-by: Mukesh Ojha --- fs/pstore/ram.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++ include/linux/pstore_ram.h | 6 ++++ 2 files changed, 83 insertions(+) diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c index a6c0da8cfdd4..72341fd21aec 100644 --- a/fs/pstore/ram.c +++ b/fs/pstore/ram.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "internal.h" #include "ram_internal.h" @@ -101,6 +102,14 @@ struct ramoops_context { unsigned int ftrace_read_cnt; unsigned int pmsg_read_cnt; struct pstore_info pstore; + /* + * Lock to serialize calls to register_ramoops_ready_notifier, + * ramoops_ready_notifier and read/modification of 'ramoops_ready'. + */ + struct mutex lock; + bool ramoops_ready; + int (*callback)(const char *name, int id, void *vaddr, + phys_addr_t paddr, size_t size); }; static struct platform_device *dummy; @@ -488,6 +497,7 @@ static int ramoops_pstore_erase(struct pstore_record *record) } static struct ramoops_context oops_cxt = { + .lock = __MUTEX_INITIALIZER(oops_cxt.lock), .pstore = { .owner = THIS_MODULE, .name = "ramoops", @@ -662,6 +672,68 @@ static int ramoops_init_prz(const char *name, return 0; } +void ramoops_ready_notifier(struct ramoops_context *cxt) +{ + struct persistent_ram_zone *prz; + int i; + + if (!cxt->callback) + return; + + for (i = 0; i < cxt->max_dump_cnt; i++) { + prz = cxt->dprzs[i]; + cxt->callback("dmesg", i, prz->vaddr, prz->paddr, prz->size); + } + + if (cxt->console_size) { + prz = cxt->cprz; + cxt->callback("console", 0, prz->vaddr, prz->paddr, prz->size); + } + + for (i = 0; i < cxt->max_ftrace_cnt; i++) { + prz = cxt->fprzs[i]; + cxt->callback("ftrace", i, prz->vaddr, prz->paddr, prz->size); + } + + if (cxt->pmsg_size) { + prz = cxt->mprz; + cxt->callback("pmsg", 0, prz->vaddr, prz->paddr, prz->size); + } +} + +int register_ramoops_ready_notifier(int (*fn)(const char *, int, + void *, phys_addr_t, size_t)) +{ + struct ramoops_context *cxt = &oops_cxt; + + mutex_lock(&cxt->lock); + if (cxt->callback) { + mutex_unlock(&cxt->lock); + return -EEXIST; + } + + cxt->callback = fn; + if (cxt->ramoops_ready) + ramoops_ready_notifier(cxt); + + mutex_unlock(&cxt->lock); + + return 0; +} +EXPORT_SYMBOL_GPL(register_ramoops_ready_notifier); + +void unregister_ramoops_ready_notifier(int (*fn)(const char *, int, + void *, phys_addr_t, size_t)) +{ + struct ramoops_context *cxt = &oops_cxt; + + mutex_lock(&cxt->lock); + WARN_ON_ONCE(cxt->callback != fn); + cxt->callback = NULL; + mutex_unlock(&cxt->lock); +} +EXPORT_SYMBOL_GPL(unregister_ramoops_ready_notifier); + /* Read a u32 from a dt property and make sure it's safe for an int. */ static int ramoops_parse_dt_u32(struct platform_device *pdev, const char *propname, @@ -911,6 +983,11 @@ static int ramoops_probe(struct platform_device *pdev) ramoops_pmsg_size = pdata->pmsg_size; ramoops_ftrace_size = pdata->ftrace_size; + mutex_lock(&cxt->lock); + ramoops_ready_notifier(cxt); + cxt->ramoops_ready = true; + mutex_unlock(&cxt->lock); + pr_info("using 0x%lx@0x%llx, ecc: %d\n", cxt->size, (unsigned long long)cxt->phys_addr, cxt->ecc_info.ecc_size); diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h index b3537336c4e1..9745d48ba59e 100644 --- a/include/linux/pstore_ram.h +++ b/include/linux/pstore_ram.h @@ -39,6 +39,12 @@ struct ramoops_platform_data { struct persistent_ram_ecc_info ecc_info; }; +int register_ramoops_ready_notifier(int (*fn)(const char *name, int id, + void *vaddr, phys_addr_t paddr, + size_t size)); +void unregister_ramoops_ready_notifier(int (*fn)(const char *name, int id, + void *vaddr, phys_addr_t paddr, + size_t size)); #ifdef CONFIG_PSTORE_DYNAMIC_RAMOOPS_REGION_RESERVATION void __init setup_dynamic_ramoops(void); #else -- 2.7.4