#ifndef __NET_GEN_STATS_H
#define __NET_GEN_STATS_H

#include <linux/gen_stats.h>
#include <linux/socket.h>
#include <linux/rtnetlink.h>
#include <linux/pkt_sched.h>

struct gnet_stats_basic_cpu {
	struct gnet_stats_basic_packed bstats;
	struct u64_stats_sync syncp;
};

struct net_rate_estimator;

struct gnet_dump {
	spinlock_t *      lock;
	struct sk_buff *  skb;
	struct nlattr *   tail;

	/* Backward compatibility */
	int               compat_tc_stats;
	int               compat_xstats;
	int               padattr;
	void *            xstats;
	int               xstats_len;
	struct tc_stats   tc_stats;
};

int gnet_stats_start_copy(struct sk_buff *skb, int type, spinlock_t *lock,
			  struct gnet_dump *d, int padattr);

int gnet_stats_start_copy_compat(struct sk_buff *skb, int type,
				 int tc_stats_type, int xstats_type,
				 spinlock_t *lock, struct gnet_dump *d,
				 int padattr);

int gnet_stats_copy_basic(const seqcount_t *running,
			  struct gnet_dump *d,
			  struct gnet_stats_basic_cpu __percpu *cpu,
			  struct gnet_stats_basic_packed *b);
void __gnet_stats_copy_basic(const seqcount_t *running,
			     struct gnet_stats_basic_packed *bstats,
			     struct gnet_stats_basic_cpu __percpu *cpu,
			     struct gnet_stats_basic_packed *b);
int gnet_stats_copy_rate_est(struct gnet_dump *d,
			     struct net_rate_estimator __rcu **ptr);
int gnet_stats_copy_queue(struct gnet_dump *d,
			  struct gnet_stats_queue __percpu *cpu_q,
			  struct gnet_stats_queue *q, __u32 qlen);
int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len);

int gnet_stats_finish_copy(struct gnet_dump *d);

int gen_new_estimator(struct gnet_stats_basic_packed *bstats,
		      struct gnet_stats_basic_cpu __percpu *cpu_bstats,
		      struct net_rate_estimator __rcu **rate_est,
		      spinlock_t *stats_lock,
		      seqcount_t *running, struct nlattr *opt);
void gen_kill_estimator(struct net_rate_estimator __rcu **ptr);
int gen_replace_estimator(struct gnet_stats_basic_packed *bstats,
			  struct gnet_stats_basic_cpu __percpu *cpu_bstats,
			  struct net_rate_estimator __rcu **ptr,
			  spinlock_t *stats_lock,
			  seqcount_t *running, struct nlattr *opt);
bool gen_estimator_active(struct net_rate_estimator __rcu **ptr);
bool gen_estimator_read(struct net_rate_estimator __rcu **ptr,
			struct gnet_stats_rate_est64 *sample);
#endif
7'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/net/rxrpc/af_rxrpc.c'>
<input type='hidden' name='h' value='nds-private-remove'/><input type='hidden' name='id' value='424414947da3dd5cb0d60e4f299f7c51e472ae77'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/commit/?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>root</a>/<a href='/cgit.cgi/linux/net-next.git/commit/net?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>net</a>/<a href='/cgit.cgi/linux/net-next.git/commit/net/rxrpc?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>rxrpc</a>/<a href='/cgit.cgi/linux/net-next.git/commit/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>af_rxrpc.c</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='nds-private-remove'/><input type='hidden' name='id' value='424414947da3dd5cb0d60e4f299f7c51e472ae77'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;</td><td class='right'>2017-02-03 22:19:15 +0100</td></tr>
<tr><th>committer</th><td>Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;</td><td class='right'>2017-02-03 22:19:15 +0100</td></tr>
<tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>424414947da3dd5cb0d60e4f299f7c51e472ae77</a> (<a href='/cgit.cgi/linux/net-next.git/patch/net/rxrpc/af_rxrpc.c?id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>a4067480c4256c80ae8f8438a3e4bb88e32050bc</a> /<a href='/cgit.cgi/linux/net-next.git/tree/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>net/rxrpc/af_rxrpc.c</a></td></tr>
<tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=a3683e0c1410c5c8136a7a93b0336ce88d3b893a'>a3683e0c1410c5c8136a7a93b0336ce88d3b893a</a> (<a href='/cgit.cgi/linux/net-next.git/diff/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77&amp;id2=a3683e0c1410c5c8136a7a93b0336ce88d3b893a'>diff</a>)</td></tr><tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=d07830db1bdb254e4b50d366010b219286b8c937'>d07830db1bdb254e4b50d366010b219286b8c937</a> (<a href='/cgit.cgi/linux/net-next.git/diff/net/rxrpc/af_rxrpc.c?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77&amp;id2=d07830db1bdb254e4b50d366010b219286b8c937'>diff</a>)</td></tr></table>
<div class='commit-subject'>Merge tag 'usb-serial-4.10-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-linus</div><div class='commit-msg'>Johan writes:

USB-serial fixes for v4.10-rc7

One more device ID for pl2303.

Signed-off-by: Johan Hovold &lt;johan@kernel.org&gt;
</div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?h=nds-private-remove&amp;id=424414947da3dd5cb0d60e4f299f7c51e472ae77'>Diffstat</a> (limited to 'net/rxrpc/af_rxrpc.c')</div><table summary='diffstat' class='diffstat'>