Pārlūkot izejas kodu

ubwcp: rate limit error prints

Rate limit error messages to avoid flooding logs and
trigger watchdog.

Change-Id: I8584ec441586d7516b3049f12d353b0d674d4453
Signed-off-by: Amol Jadi <[email protected]>
Amol Jadi 2 gadi atpakaļ
vecāks
revīzija
9ee78c53ae
2 mainītis faili ar 18 papildinājumiem un 48 dzēšanām
  1. 6 4
      ubwcp/ubwcp_hw.c
  2. 12 44
      ubwcp/ubwcp_main.c

+ 6 - 4
ubwcp/ubwcp_hw.c

@@ -1,8 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
+#define pr_fmt(fmt) "%s: hw: %s(): " fmt, KBUILD_MODNAME, __func__
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/dma-buf.h>
@@ -17,10 +19,10 @@ static bool ubwcp_hw_trace_en;
 //#define DBG(fmt, args...)
 #define DBG(fmt, args...) \
 	do { \
-		if (ubwcp_hw_trace_en) \
-			pr_err("ubwcp: hw: %s(): " fmt "\n", __func__, ##args); \
+		if (unlikely(ubwcp_hw_trace_en)) \
+			pr_err(fmt "\n", ##args); \
 	} while (0)
-#define ERR(fmt, args...) pr_err("ubwcp: hw: %s(): ~~~ERROR~~~: " fmt "\n", __func__, ##args);
+#define ERR(fmt, args...) pr_err_ratelimited(": %d: ~~~ERROR~~~: " fmt "\n", __LINE__, ##args)
 
 MODULE_LICENSE("GPL");
 

+ 12 - 44
ubwcp/ubwcp_main.c

@@ -3,6 +3,8 @@
  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
+#define pr_fmt(fmt) "%s: %s(): " fmt, KBUILD_MODNAME, __func__
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/dma-buf.h>
@@ -49,17 +51,13 @@ MODULE_IMPORT_NS(DMA_BUF);
 #define UBWCP_ALIGN(_x, _y)  ((((_x) + (_y) - 1)/(_y))*(_y))
 
 
-#define DBG_BUF_ATTR(fmt, args...) do { if (ubwcp_debug_trace_enable) \
-					pr_err("ubwcp: %s(): " fmt "\n", __func__, ##args); \
+#define DBG_BUF_ATTR(fmt, args...) do { if (unlikely(ubwcp_debug_trace_enable)) \
+					pr_err(fmt "\n", ##args); \
 					} while (0)
-#define DBG(fmt, args...) do { if (ubwcp_debug_trace_enable) \
-				pr_err("ubwcp: %s(): " fmt "\n", __func__, ##args); \
+#define DBG(fmt, args...) do { if (unlikely(ubwcp_debug_trace_enable)) \
+				pr_err(fmt "\n", ##args); \
 				} while (0)
-#define ERR(fmt, args...) pr_err("ubwcp: %d: %s(): ~~~ERROR~~~: " fmt "\n", __LINE__, __func__, ##args)
-#define ERR_RATE_LIMIT(fmt, args...) pr_err_ratelimited("ubwcp: %s(): ~~~ERROR~~~: " fmt "\n",\
-							__func__, ##args)
-
-#define FENTRY() DBG("")
+#define ERR(fmt, args...) pr_err_ratelimited("%d: ~~~ERROR~~~: " fmt "\n", __LINE__, ##args)
 
 #define META_DATA_PITCH_ALIGN    64
 #define META_DATA_HEIGHT_ALIGN   16
@@ -379,8 +377,6 @@ int ubwcp_get_hw_version(struct ubwcp_ioctl_hw_version *ver)
 {
 	struct ubwcp_driver *ubwcp;
 
-	FENTRY();
-
 	if (!ver) {
 		ERR("invalid version ptr");
 		return -EINVAL;
@@ -592,7 +588,6 @@ static int ubwcp_init_buffer(struct dma_buf *dmabuf)
 	struct ubwcp_driver *ubwcp = ubwcp_get_driver();
 	unsigned long flags;
 
-	FENTRY();
 	trace_ubwcp_init_buffer_start(dmabuf);
 
 	if (!ubwcp) {
@@ -1279,8 +1274,6 @@ static int ubwcp_calc_ubwcp_buf_params(struct ubwcp_driver *ubwcp,
 	size_t stride_tp10_p;
 	int ret;
 
-	FENTRY();
-
 	ret = to_std_format(attr->image_format, &format);
 	if (ret)
 		return ret;
@@ -1371,7 +1364,6 @@ static phys_addr_t ubwcp_ula_realloc(struct ubwcp_driver *ubwcp,
 /* unmap dma buf */
 static void ubwcp_dma_unmap(struct ubwcp_buf *buf)
 {
-	FENTRY();
 	if (buf->dma_buf && buf->attachment) {
 		DBG("Calling dma_buf_unmap_attachment()");
 		dma_buf_unmap_attachment(buf->attachment, buf->sgt, DMA_BIDIRECTIONAL);
@@ -1519,7 +1511,6 @@ int ubwcp_set_buf_attrs(struct dma_buf *dmabuf, struct ubwcp_buffer_attrs *attr)
 	bool is_non_lin_buf;
 	u16 hw_img_format;
 
-	FENTRY();
 	trace_ubwcp_set_buf_attrs_start(dmabuf);
 
 	if (!dmabuf) {
@@ -1844,7 +1835,6 @@ static int ubwcp_lock(struct dma_buf *dmabuf, enum dma_data_direction dir)
 	struct ubwcp_buf *buf;
 	struct ubwcp_driver *ubwcp;
 
-	FENTRY();
 	trace_ubwcp_lock_start(dmabuf);
 
 	if (!dmabuf) {
@@ -2046,7 +2036,6 @@ static int ubwcp_unlock(struct dma_buf *dmabuf, enum dma_data_direction dir)
 	struct ubwcp_buf *buf;
 	int ret;
 
-	FENTRY();
 	trace_ubwcp_unlock_start(dmabuf);
 	if (!dmabuf) {
 		ERR("NULL dmabuf input ptr");
@@ -2093,8 +2082,6 @@ int ubwcp_get_buf_attrs(struct dma_buf *dmabuf, struct ubwcp_buffer_attrs *attr)
 	int ret = 0;
 	struct ubwcp_buf *buf;
 
-	FENTRY();
-
 	if (!dmabuf) {
 		ERR("NULL dmabuf input ptr");
 		return -EINVAL;
@@ -2144,8 +2131,6 @@ int ubwcp_set_perm_range_translation(struct dma_buf *dmabuf, bool enable)
 	int ret = 0;
 	struct ubwcp_buf *buf;
 
-	FENTRY();
-
 	if (!dmabuf) {
 		ERR("NULL dmabuf input ptr");
 		return -EINVAL;
@@ -2203,7 +2188,6 @@ static int ubwcp_free_buffer(struct dma_buf *dmabuf)
 	unsigned long flags;
 	bool is_non_lin_buf;
 
-	FENTRY();
 	trace_ubwcp_free_buffer_start(dmabuf);
 
 	if (!dmabuf) {
@@ -2901,7 +2885,7 @@ int ubwcp_iommu_fault_handler(struct iommu_domain *domain, struct device *dev,
 	err.smmu_err.dmabuf = get_dma_buf_from_iova(iova);
 	err.smmu_err.iova = iova;
 	err.smmu_err.iommu_fault_flags = flags;
-	ERR_RATE_LIMIT("ubwcp_err: err code: %d (smmu), iommu_dev_id: %d, iova: 0x%llx, flags: 0x%x",
+	ERR("ubwcp_err: err code: %d (smmu), iommu_dev_id: %d, iova: 0x%llx, flags: 0x%x",
 		err.err_code, err.smmu_err.iommu_dev_id, err.smmu_err.iova,
 		err.smmu_err.iommu_fault_flags);
 	ubwcp_notify_error_handlers(&err);
@@ -2926,7 +2910,7 @@ static irqreturn_t ubwcp_irq_handler(int irq, void *ptr)
 		err.translation_err.dmabuf = get_dma_buf_from_ulapa(addr);
 		err.translation_err.ula_pa = addr;
 		err.translation_err.read = true;
-		ERR_RATE_LIMIT("ubwcp_err: err code: %d (range), dmabuf: 0x%llx, read: %d, addr: 0x%llx",
+		ERR("err_code: %d (range read), dmabuf: 0x%llx, read: %d, addr: 0x%llx",
 			err.err_code, err.translation_err.dmabuf, err.translation_err.read, addr);
 		ubwcp_notify_error_handlers(&err);
 		ubwcp_hw_interrupt_clear(ubwcp->base, 0);
@@ -2937,7 +2921,7 @@ static irqreturn_t ubwcp_irq_handler(int irq, void *ptr)
 		err.translation_err.dmabuf = get_dma_buf_from_ulapa(addr);
 		err.translation_err.ula_pa = addr;
 		err.translation_err.read = false;
-		ERR_RATE_LIMIT("ubwcp_err: err code: %d (range), dmabuf: 0x%llx, read: %d, addr: 0x%llx",
+		ERR("err_code: %d (range write), dmabuf: 0x%llx, read: %d, addr: 0x%llx",
 			err.err_code, err.translation_err.dmabuf, err.translation_err.read, addr);
 		ubwcp_notify_error_handlers(&err);
 		ubwcp_hw_interrupt_clear(ubwcp->base, 1);
@@ -2946,7 +2930,7 @@ static irqreturn_t ubwcp_irq_handler(int irq, void *ptr)
 		err.err_code = UBWCP_ENCODE_ERROR;
 		err.enc_err.dmabuf = get_dma_buf_from_ulapa(addr);
 		err.enc_err.ula_pa = addr;
-		ERR_RATE_LIMIT("ubwcp_err: err code: %d (encode), dmabuf: 0x%llx, addr: 0x%llx",
+		ERR("err_code: %d (encode), dmabuf: 0x%llx, addr: 0x%llx",
 				err.err_code, err.enc_err.dmabuf, addr);
 		ubwcp_notify_error_handlers(&err);
 		ubwcp_hw_interrupt_clear(ubwcp->base, 3);
@@ -2955,7 +2939,7 @@ static irqreturn_t ubwcp_irq_handler(int irq, void *ptr)
 		err.err_code = UBWCP_DECODE_ERROR;
 		err.dec_err.dmabuf = get_dma_buf_from_ulapa(addr);
 		err.dec_err.ula_pa = addr;
-		ERR_RATE_LIMIT("ubwcp_err: err code: %d (decode), dmabuf: 0x%llx, addr: 0x%llx",
+		ERR("err_code: %d (decode), dmabuf: 0x%llx, addr: 0x%llx",
 				err.err_code, err.enc_err.dmabuf, addr);
 		ubwcp_notify_error_handlers(&err);
 		ubwcp_hw_interrupt_clear(ubwcp->base, 2);
@@ -2972,8 +2956,6 @@ static int ubwcp_interrupt_register(struct platform_device *pdev, struct ubwcp_d
 	int ret = 0;
 	struct device *dev = &pdev->dev;
 
-	FENTRY();
-
 	ubwcp->irq_range_ck_rd = platform_get_irq(pdev, 0);
 	if (ubwcp->irq_range_ck_rd < 0)
 		return ubwcp->irq_range_ck_rd;
@@ -3033,8 +3015,6 @@ static int qcom_ubwcp_probe(struct platform_device *pdev)
 	struct ubwcp_driver *ubwcp;
 	struct device *ubwcp_dev = &pdev->dev;
 
-	FENTRY();
-
 	ubwcp = devm_kzalloc(ubwcp_dev, sizeof(*ubwcp), GFP_KERNEL);
 	if (!ubwcp) {
 		ERR("devm_kzalloc() failed");
@@ -3197,8 +3177,6 @@ static int ubwcp_probe_cb_buf(struct platform_device *pdev)
 	struct ubwcp_driver *ubwcp;
 	struct iommu_domain *domain = NULL;
 
-	FENTRY();
-
 	ubwcp = dev_get_drvdata(pdev->dev.parent);
 	if (!ubwcp) {
 		ERR("failed to get ubwcp ptr");
@@ -3223,8 +3201,6 @@ static int ubwcp_probe_cb_desc(struct platform_device *pdev)
 	struct ubwcp_driver *ubwcp;
 	struct iommu_domain *domain = NULL;
 
-	FENTRY();
-
 	ubwcp = dev_get_drvdata(pdev->dev.parent);
 	if (!ubwcp) {
 		ERR("failed to get ubwcp ptr");
@@ -3292,8 +3268,6 @@ static int ubwcp_remove_cb_buf(struct platform_device *pdev)
 {
 	struct ubwcp_driver *ubwcp;
 
-	FENTRY();
-
 	ubwcp = dev_get_drvdata(pdev->dev.parent);
 	if (!ubwcp) {
 		ERR("failed to get ubwcp ptr");
@@ -3310,8 +3284,6 @@ static int ubwcp_remove_cb_desc(struct platform_device *pdev)
 {
 	struct ubwcp_driver *ubwcp;
 
-	FENTRY();
-
 	ubwcp = dev_get_drvdata(pdev->dev.parent);
 	if (!ubwcp) {
 		ERR("failed to get ubwcp ptr");
@@ -3345,8 +3317,6 @@ static int qcom_ubwcp_remove(struct platform_device *pdev)
 	size_t psize;
 	struct ubwcp_driver *ubwcp;
 
-	FENTRY();
-
 	/* get pdev->dev->driver_data = ubwcp */
 	ubwcp = platform_get_drvdata(pdev);
 	if (!ubwcp) {
@@ -3385,7 +3355,6 @@ static int ubwcp_probe(struct platform_device *pdev)
 {
 	const char *compatible = "";
 
-	FENTRY();
 	trace_ubwcp_probe(pdev);
 
 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,ubwcp"))
@@ -3405,7 +3374,6 @@ static int ubwcp_remove(struct platform_device *pdev)
 {
 	const char *compatible = "";
 
-	FENTRY();
 	trace_ubwcp_remove(pdev);
 
 	/* TBD: what if buffers are still allocated? locked? etc.