|
@@ -404,32 +404,7 @@ 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;
|
|
|
-}
|
|
|
+bool xt_percpu_counter_alloc(struct xt_counters *counters);
|
|
|
void xt_percpu_counter_free(struct xt_counters *cnt);
|
|
|
|
|
|
static inline struct xt_counters *
|