Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18fb0b46 authored by David S. Miller's avatar David S. Miller
Browse files
parents 39cebdb7 6d9c153a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -352,7 +352,7 @@ static void __exit dsa_loop_exit(void)

	mdio_driver_unregister(&dsa_loop_drv);
	for (i = 0; i < NUM_FIXED_PHYS; i++)
		if (phydevs[i])
		if (!IS_ERR(phydevs[i]))
			fixed_phy_unregister(phydevs[i]);
}
module_exit(dsa_loop_exit);
+9 −26
Original line number Diff line number Diff line
#ifndef __NET_FRAG_H__
#define __NET_FRAG_H__

#include <linux/percpu_counter.h>

struct netns_frags {
	/* The percpu_counter "mem" need to be cacheline aligned.
	 *  mem.count must not share cacheline with other writers
	 */
	struct percpu_counter   mem ____cacheline_aligned_in_smp;

	/* Keep atomic mem on separate cachelines in structs that include it */
	atomic_t		mem ____cacheline_aligned_in_smp;
	/* sysctls */
	int			timeout;
	int			high_thresh;
@@ -108,15 +103,10 @@ struct inet_frags {
int inet_frags_init(struct inet_frags *);
void inet_frags_fini(struct inet_frags *);

static inline int inet_frags_init_net(struct netns_frags *nf)
{
	return percpu_counter_init(&nf->mem, 0, GFP_KERNEL);
}
static inline void inet_frags_uninit_net(struct netns_frags *nf)
static inline void inet_frags_init_net(struct netns_frags *nf)
{
	percpu_counter_destroy(&nf->mem);
	atomic_set(&nf->mem, 0);
}

void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f);

void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
@@ -140,31 +130,24 @@ static inline bool inet_frag_evicting(struct inet_frag_queue *q)

/* Memory Tracking Functions. */

/* The default percpu_counter batch size is not big enough to scale to
 * fragmentation mem acct sizes.
 * The mem size of a 64K fragment is approx:
 *  (44 fragments * 2944 truesize) + frag_queue struct(200) = 129736 bytes
 */
static unsigned int frag_percpu_counter_batch = 130000;

static inline int frag_mem_limit(struct netns_frags *nf)
{
	return percpu_counter_read(&nf->mem);
	return atomic_read(&nf->mem);
}

static inline void sub_frag_mem_limit(struct netns_frags *nf, int i)
{
	percpu_counter_add_batch(&nf->mem, -i, frag_percpu_counter_batch);
	atomic_sub(i, &nf->mem);
}

static inline void add_frag_mem_limit(struct netns_frags *nf, int i)
{
	percpu_counter_add_batch(&nf->mem, i, frag_percpu_counter_batch);
	atomic_add(i, &nf->mem);
}

static inline unsigned int sum_frag_mem_limit(struct netns_frags *nf)
static inline int sum_frag_mem_limit(struct netns_frags *nf)
{
	return percpu_counter_sum_positive(&nf->mem);
	return atomic_read(&nf->mem);
}

/* RFC 3168 support :
+4 −3
Original line number Diff line number Diff line
@@ -189,10 +189,11 @@ static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,

	rcu_read_lock();
	err = ip_route_input_noref(skb, dst, src, tos, devin);
	if (!err)
	if (!err) {
		skb_dst_force_safe(skb);
		if (!skb_dst(skb))
			err = -EINVAL;
	}
	rcu_read_unlock();

	return err;
+3 −8
Original line number Diff line number Diff line
@@ -580,19 +580,14 @@ static int __net_init lowpan_frags_init_net(struct net *net)
{
	struct netns_ieee802154_lowpan *ieee802154_lowpan =
		net_ieee802154_lowpan(net);
	int res;

	ieee802154_lowpan->frags.high_thresh = IPV6_FRAG_HIGH_THRESH;
	ieee802154_lowpan->frags.low_thresh = IPV6_FRAG_LOW_THRESH;
	ieee802154_lowpan->frags.timeout = IPV6_FRAG_TIMEOUT;

	res = inet_frags_init_net(&ieee802154_lowpan->frags);
	if (res)
		return res;
	res = lowpan_frags_ns_sysctl_register(net);
	if (res)
		inet_frags_uninit_net(&ieee802154_lowpan->frags);
	return res;
	inet_frags_init_net(&ieee802154_lowpan->frags);

	return lowpan_frags_ns_sysctl_register(net);
}

static void __net_exit lowpan_frags_exit_net(struct net *net)
+1 −3
Original line number Diff line number Diff line
@@ -234,10 +234,8 @@ void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f)
	cond_resched();

	if (read_seqretry(&f->rnd_seqlock, seq) ||
	    percpu_counter_sum(&nf->mem))
	    sum_frag_mem_limit(nf))
		goto evict_again;

	percpu_counter_destroy(&nf->mem);
}
EXPORT_SYMBOL(inet_frags_exit_net);

Loading