Commit 4b8130a7 authored by Pagadala Yesu Anjaneyulu's avatar Pagadala Yesu Anjaneyulu Committed by Johannes Berg
Browse files

wifi: iwlwifi: mld: Add support for WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro



Introduced the WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro to enable reading
data from the driver while holding the wiphy lock.
This will enable read operations with wiphy locked.

Signed-off-by: default avatarPagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250313002008.b0ddb6b0a144.I1fab63f2c6f52fea61cc5d7b27775aed58adfd8d@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent d4c6ca39
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -121,6 +121,16 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \
		.llseek = generic_file_llseek,				\
	}

#define WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name)			\
static ssize_t iwl_dbgfs_##name##_read_handler(struct wiphy *wiphy,	\
				       struct file *file, char *buf,	\
				       size_t count, void *data)	\
{									\
	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);		\
	struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw);			\
	return iwl_dbgfs_##name##_read(mld, buf, count);		\
}

#define WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD(name)			\
static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy,	\
				       struct file *file, char *buf,	\
@@ -147,6 +157,40 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file, \
				NULL);					\
}

#define WIPHY_DEBUGFS_READ_WRAPPER_MLD(name)				\
WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name)				\
static ssize_t __iwl_dbgfs_##name##_read(struct file *file,		\
					char __user *user_buf,		\
					size_t count, loff_t *ppos)	\
{									\
	struct dbgfs_##name##_data *data = file->private_data;		\
	struct iwl_mld *mld = data->arg;				\
									\
	if (!data->read_done) {						\
		data->read_done = true;					\
		data->rlen = wiphy_locked_debugfs_read(mld->wiphy,	\
				file, data->buf, sizeof(data->buf),	\
				user_buf, count, ppos,			\
				iwl_dbgfs_##name##_read_handler, NULL);	\
		return data->rlen;					\
	}								\
									\
	if (data->rlen < 0)						\
		return data->rlen;					\
	return simple_read_from_buffer(user_buf, count, ppos,		\
				       data->buf, data->rlen);		\
}

#define WIPHY_DEBUGFS_READ_FILE_OPS_MLD(name, bufsz)			\
	MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld)		\
	WIPHY_DEBUGFS_READ_WRAPPER_MLD(name)				\
	static const struct file_operations iwl_dbgfs_##name##_ops = {	\
		.read = __iwl_dbgfs_##name##_read,			\
		.open = _iwl_dbgfs_##name##_open,			\
		.llseek = generic_file_llseek,				\
		.release = _iwl_dbgfs_release,				\
	}

#define WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(name, bufsz)			\
	MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld)		\
	WIPHY_DEBUGFS_WRITE_WRAPPER_MLD(name)				\