]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/linux/netfilter/x_tables.h
netfilter: x_tables: pass xt_counters struct to counter allocator
[mirror_ubuntu-artful-kernel.git] / include / linux / netfilter / x_tables.h
index cd4eaf8df445fe4ecb699c07b170b1af778748c6..05a94bd32c55859af17b8ad1578a39219815f9aa 100644 (file)
@@ -404,37 +404,8 @@ static inline unsigned long ifname_compare_aligned(const char *_a,
 }
 
 
-/* On SMP, ip(6)t_entry->counters.pcnt holds address of the
- * real (percpu) counter.  On !SMP, its just the packet count,
- * so nothing needs to be done there.
- *
- * xt_percpu_counter_alloc returns the address of the percpu
- * counter, or 0 on !SMP. We force an alignment of 16 bytes
- * so that bytes/packets share a common cache line.
- *
- * Hence caller must use IS_ERR_VALUE to check for error, this
- * allows us to return 0 for single core systems without forcing
- * callers to deal with SMP vs. NONSMP issues.
- */
-static inline unsigned long xt_percpu_counter_alloc(void)
-{
-       if (nr_cpu_ids > 1) {
-               void __percpu *res = __alloc_percpu(sizeof(struct xt_counters),
-                                                   sizeof(struct xt_counters));
-
-               if (res == NULL)
-                       return -ENOMEM;
-
-               return (__force unsigned long) res;
-       }
-
-       return 0;
-}
-static inline void xt_percpu_counter_free(u64 pcnt)
-{
-       if (nr_cpu_ids > 1)
-               free_percpu((void __percpu *) (unsigned long) pcnt);
-}
+bool xt_percpu_counter_alloc(struct xt_counters *counters);
+void xt_percpu_counter_free(struct xt_counters *cnt);
 
 static inline struct xt_counters *
 xt_get_this_cpu_counter(struct xt_counters *cnt)