Thread (12 messages) 12 messages, 3 authors, 2022-07-27

Re: [PATCH v2 4/4] wcn36xx: Add debugfs entry to read firmware feature strings

From: Kalle Valo <kvalo@kernel.org>
Date: 2022-07-27 11:08:40
Also in: linux-wireless

Bryan O'Donoghue [off-list ref] writes:
On 27/07/2022 11:31, Kalle Valo wrote:
quoted
Bryan O'Donoghue [off-list ref] writes:
quoted
quoted
+static ssize_t read_file_firmware_feature_caps(struct file *file,
+					       char __user *user_buf,
+					       size_t count, loff_t *ppos)
+{
+	struct wcn36xx *wcn = file->private_data;
+	unsigned long page = get_zeroed_page(GFP_KERNEL);
+	char *p = (char *)page;
+	int i;
+	int ret;
+
+	if (!p)
+		return -ENOMEM;
+
+	mutex_lock(&wcn->hal_mutex);
+	for (i = 0; i < MAX_FEATURE_SUPPORTED; i++) {
+		if (wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, i)) {
+			p += sprintf(p, "%s\n",
+				     wcn36xx_firmware_get_cap_name(i));
+		}
+	}
+	mutex_unlock(&wcn->hal_mutex);
+
+	ret = simple_read_from_buffer(user_buf, count, ppos, (char *)page,
+				      (unsigned long)p - page);
+
+	free_page(page);
+	return ret;
+}
Why not use the normal use kzalloc() and kfree()? That way you would not
need a separate page variable. What's the benefit from
get_zeroed_page()?

TBH I did a copy/paste here from another driver... I forget which
quoted
Also I don't see any checks for a memory allocation failure.
its there

char *p = (char*) page;

if (!p)
    return -ENOMEM;
Ah, it's pretty evil to have the error handling so far away from the
actual call :)
I can V2 this for kzalloc and kfree if you prefer though
Yes, please do that. We should use standard infrastructure as much as
possible.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help