net: add per_cpu_fw_alloc field to struct proto
[linux-2.6-microblaze.git] / net / core / sock.c
index 2ff40dd..f96efc9 100644 (file)
@@ -991,7 +991,7 @@ EXPORT_SYMBOL(sock_set_mark);
 static void sock_release_reserved_memory(struct sock *sk, int bytes)
 {
        /* Round down bytes to multiple of pages */
-       bytes &= ~(SK_MEM_QUANTUM - 1);
+       bytes = round_down(bytes, PAGE_SIZE);
 
        WARN_ON(bytes > sk->sk_reserved_mem);
        sk->sk_reserved_mem -= bytes;
@@ -1028,9 +1028,9 @@ static int sock_reserve_memory(struct sock *sk, int bytes)
                mem_cgroup_uncharge_skmem(sk->sk_memcg, pages);
                return -ENOMEM;
        }
-       sk->sk_forward_alloc += pages << SK_MEM_QUANTUM_SHIFT;
+       sk->sk_forward_alloc += pages << PAGE_SHIFT;
 
-       sk->sk_reserved_mem += pages << SK_MEM_QUANTUM_SHIFT;
+       sk->sk_reserved_mem += pages << PAGE_SHIFT;
 
        return 0;
 }
@@ -2844,7 +2844,7 @@ void __release_sock(struct sock *sk)
                do {
                        next = skb->next;
                        prefetch(next);
-                       WARN_ON_ONCE(skb_dst_is_noref(skb));
+                       DEBUG_NET_WARN_ON_ONCE(skb_dst_is_noref(skb));
                        skb_mark_not_on_list(skb);
                        sk_backlog_rcv(sk, skb);
 
@@ -3003,10 +3003,10 @@ int __sk_mem_schedule(struct sock *sk, int size, int kind)
 {
        int ret, amt = sk_mem_pages(size);
 
-       sk->sk_forward_alloc += amt << SK_MEM_QUANTUM_SHIFT;
+       sk->sk_forward_alloc += amt << PAGE_SHIFT;
        ret = __sk_mem_raise_allocated(sk, size, amt, kind);
        if (!ret)
-               sk->sk_forward_alloc -= amt << SK_MEM_QUANTUM_SHIFT;
+               sk->sk_forward_alloc -= amt << PAGE_SHIFT;
        return ret;
 }
 EXPORT_SYMBOL(__sk_mem_schedule);
@@ -3034,12 +3034,12 @@ EXPORT_SYMBOL(__sk_mem_reduce_allocated);
 /**
  *     __sk_mem_reclaim - reclaim sk_forward_alloc and memory_allocated
  *     @sk: socket
- *     @amount: number of bytes (rounded down to a SK_MEM_QUANTUM multiple)
+ *     @amount: number of bytes (rounded down to a PAGE_SIZE multiple)
  */
 void __sk_mem_reclaim(struct sock *sk, int amount)
 {
-       amount >>= SK_MEM_QUANTUM_SHIFT;
-       sk->sk_forward_alloc -= amount << SK_MEM_QUANTUM_SHIFT;
+       amount >>= PAGE_SHIFT;
+       sk->sk_forward_alloc -= amount << PAGE_SHIFT;
        __sk_mem_reduce_allocated(sk, amount);
 }
 EXPORT_SYMBOL(__sk_mem_reclaim);
@@ -3798,6 +3798,10 @@ int proto_register(struct proto *prot, int alloc_slab)
                pr_err("%s: missing sysctl_mem\n", prot->name);
                return -EINVAL;
        }
+       if (prot->memory_allocated && !prot->per_cpu_fw_alloc) {
+               pr_err("%s: missing per_cpu_fw_alloc\n", prot->name);
+               return -EINVAL;
+       }
        if (alloc_slab) {
                prot->slab = kmem_cache_create_usercopy(prot->name,
                                        prot->obj_size, 0,