Commit 04c3b030 authored by Stanislaw Gruszka's avatar Stanislaw Gruszka Committed by Rafael J. Wysocki

thermal: netlink: Add thermal_group_has_listeners() helper

Add a helper function to check if there are listeners for
thermal_gnl_family multicast groups.

For now use it to avoid unnecessary allocations and sending
thermal genl messages when there are no recipients.

In the future, in conjunction with (not yet implemented) notification
of change in the netlink socket group membership, this helper can be
used to open/close hardware interfaces based on the presence of
user space subscribers.
Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 5eb4f413
...@@ -76,6 +76,11 @@ typedef int (*cb_t)(struct param *); ...@@ -76,6 +76,11 @@ typedef int (*cb_t)(struct param *);
static struct genl_family thermal_gnl_family; static struct genl_family thermal_gnl_family;
static int thermal_group_has_listeners(enum thermal_genl_multicast_groups group)
{
return genl_has_listeners(&thermal_gnl_family, &init_net, group);
}
/************************** Sampling encoding *******************************/ /************************** Sampling encoding *******************************/
int thermal_genl_sampling_temp(int id, int temp) int thermal_genl_sampling_temp(int id, int temp)
...@@ -83,6 +88,9 @@ int thermal_genl_sampling_temp(int id, int temp) ...@@ -83,6 +88,9 @@ int thermal_genl_sampling_temp(int id, int temp)
struct sk_buff *skb; struct sk_buff *skb;
void *hdr; void *hdr;
if (!thermal_group_has_listeners(THERMAL_GENL_SAMPLING_GROUP))
return 0;
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
if (!skb) if (!skb)
return -ENOMEM; return -ENOMEM;
...@@ -280,6 +288,9 @@ static int thermal_genl_send_event(enum thermal_genl_event event, ...@@ -280,6 +288,9 @@ static int thermal_genl_send_event(enum thermal_genl_event event,
int ret = -EMSGSIZE; int ret = -EMSGSIZE;
void *hdr; void *hdr;
if (!thermal_group_has_listeners(THERMAL_GENL_EVENT_GROUP))
return 0;
msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL); msg = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
if (!msg) if (!msg)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment