/* * user_space.c - A simple user space Thermal events notifier * * Copyright (C) 2012 Intel Corp * Copyright (C) 2012 Durgadoss R * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ #include #include #include "thermal_core.h" /** * notify_user_space - Notifies user space about thermal events * @tz - thermal_zone_device * @trip - Trip point index * * This function notifies the user space through UEvents. */ static int notify_user_space(struct thermal_zone_device *tz, int trip) { char *thermal_prop[5]; int i; mutex_lock(&tz->lock); thermal_prop[0] = kasprintf(GFP_KERNEL, "NAME=%s", tz->type); thermal_prop[1] = kasprintf(GFP_KERNEL, "TEMP=%d", tz->temperature); thermal_prop[2] = kasprintf(GFP_KERNEL, "TRIP=%d", trip); thermal_prop[3] = kasprintf(GFP_KERNEL, "EVENT=%d", tz->notify_event); thermal_prop[4] = NULL; kobject_uevent_env(&tz->device.kobj, KOBJ_CHANGE, thermal_prop); for (i = 0; i < 4; ++i) kfree(thermal_prop[i]); mutex_unlock(&tz->lock); return 0; } static struct thermal_governor thermal_gov_user_space = { .name = "user_space", .throttle = notify_user_space, }; int thermal_gov_user_space_register(void) { return thermal_register_governor(&thermal_gov_user_space); } void thermal_gov_user_space_unregister(void) { thermal_unregister_governor(&thermal_gov_user_space); } lass='txt' type='search' size='10' name='q' value=''/>
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2016-12-16 16:27:43 +0100
committerTobias Klauser <tklauser@distanz.ch>2016-12-19 13:04:09 +0100
commit4e28e05aac78dca759c4b2b374ec99306f7ae8ae (patch)
treed13b7d82d6263784654faeaf60882e68460d5797
parent93d8be41c619ea6d4b29a1cefd15b60d2d82e764 (diff)
net: packet: Introduce PACKET_XMIT_RECEIVE socket optionpacket-loop-back
The PACKET_XMIT_RECEIVE socket options allows to immediately pump packets sent through PF_PACKET back into the network stack via dev_forward_skb() instead of submitting them to the device driver using dev_queue_xmit(). This feature might be useful to load the network stack with a lot of packets, similar to pktgen. Enable the setting using: int one = 1; setsockopt(fd, SOL_PACKET, PACKET_XMIT_RECEIVE, &one, sizeof(one)); By default, PACKET_XMIT_RECEIVE is disabled and needs to be explicitly enabled on PF_PACKET sockets. Joint work with Daniel Borkmann. Suggested-by: Daniel Borkmann <daniel@iogearbox.net> Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com> Cc: Eric Dumazet <edumazet@google.com> Cc: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>