lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 28 Mar 2008 10:46:30 +0100 From: Eric Dumazet <dada1@...mosbay.com> To: Pavel Emelyanov <xemul@...nvz.org> Cc: Linux Netdev List <netdev@...r.kernel.org> Subject: Re: [PATCH net-2.6.26 5/5][LIB]: Forget the pcounter abstraction. Pavel Emelyanov a écrit : > It was used by proto.inuse only. Now it's reworked and we can > drop the pcounter, all the more so this was intended to be done. > > Not sure whether this should go via netdev tree, but as far as > I remember it was added via this one... > > Signed-off-by: Pavel Emelyanov <xemul@...nvz.org> > I believe this will be Acked-by Andrew himself, dont worry :) > --- > include/linux/pcounter.h | 74 ---------------------------------------------- > lib/Makefile | 1 - > lib/pcounter.c | 58 ------------------------------------ > 3 files changed, 0 insertions(+), 133 deletions(-) > delete mode 100644 include/linux/pcounter.h > delete mode 100644 lib/pcounter.c > > diff --git a/include/linux/pcounter.h b/include/linux/pcounter.h > deleted file mode 100644 > index a82d9f2..0000000 > --- a/include/linux/pcounter.h > +++ /dev/null > @@ -1,74 +0,0 @@ > -#ifndef __LINUX_PCOUNTER_H > -#define __LINUX_PCOUNTER_H > -/* > - * Using a dynamic percpu 'int' variable has a cost : > - * 1) Extra dereference > - * Current per_cpu_ptr() implementation uses an array per 'percpu variable'. > - * 2) memory cost of NR_CPUS*(32+sizeof(void *)) instead of num_possible_cpus()*4 > - * > - * This pcounter implementation is an abstraction to be able to use > - * either a static or a dynamic per cpu variable. > - * One dynamic per cpu variable gets a fast & cheap implementation, we can > - * change pcounter implementation too. > - */ > -struct pcounter { > -#ifdef CONFIG_SMP > - void (*add)(struct pcounter *self, int inc); > - int (*getval)(const struct pcounter *self, int cpu); > - int *per_cpu_values; > -#else > - int val; > -#endif > -}; > - > -#ifdef CONFIG_SMP > -#include <linux/percpu.h> > - > -#define DEFINE_PCOUNTER(NAME) \ > -static DEFINE_PER_CPU(int, NAME##_pcounter_values); \ > -static void NAME##_pcounter_add(struct pcounter *self, int val) \ > -{ \ > - __get_cpu_var(NAME##_pcounter_values) += val; \ > -} \ > -static int NAME##_pcounter_getval(const struct pcounter *self, int cpu) \ > -{ \ > - return per_cpu(NAME##_pcounter_values, cpu); \ > -} \ > - > -#define PCOUNTER_MEMBER_INITIALIZER(NAME, MEMBER) \ > - MEMBER = { \ > - .add = NAME##_pcounter_add, \ > - .getval = NAME##_pcounter_getval, \ > - } > - > - > -static inline void pcounter_add(struct pcounter *self, int inc) > -{ > - self->add(self, inc); > -} > - > -extern int pcounter_getval(const struct pcounter *self); > -extern int pcounter_alloc(struct pcounter *self); > -extern void pcounter_free(struct pcounter *self); > - > - > -#else /* CONFIG_SMP */ > - > -static inline void pcounter_add(struct pcounter *self, int inc) > -{ > - self->val += inc; > -} > - > -static inline int pcounter_getval(const struct pcounter *self) > -{ > - return self->val; > -} > - > -#define DEFINE_PCOUNTER(NAME) > -#define PCOUNTER_MEMBER_INITIALIZER(NAME, MEMBER) > -#define pcounter_alloc(self) 0 > -#define pcounter_free(self) > - > -#endif /* CONFIG_SMP */ > - > -#endif /* __LINUX_PCOUNTER_H */ > diff --git a/lib/Makefile b/lib/Makefile > index 23de261..4d059d4 100644 > --- a/lib/Makefile > +++ b/lib/Makefile > @@ -61,7 +61,6 @@ obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o > obj-$(CONFIG_TEXTSEARCH_BM) += ts_bm.o > obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o > obj-$(CONFIG_SMP) += percpu_counter.o > -obj-$(CONFIG_SMP) += pcounter.o > obj-$(CONFIG_AUDIT_GENERIC) += audit.o > > obj-$(CONFIG_SWIOTLB) += swiotlb.o > diff --git a/lib/pcounter.c b/lib/pcounter.c > deleted file mode 100644 > index 9b56807..0000000 > --- a/lib/pcounter.c > +++ /dev/null > @@ -1,58 +0,0 @@ > -/* > - * Define default pcounter functions > - * Note that often used pcounters use dedicated functions to get a speed increase. > - * (see DEFINE_PCOUNTER/REF_PCOUNTER_MEMBER) > - */ > - > -#include <linux/module.h> > -#include <linux/pcounter.h> > -#include <linux/smp.h> > -#include <linux/cpumask.h> > - > -static void pcounter_dyn_add(struct pcounter *self, int inc) > -{ > - per_cpu_ptr(self->per_cpu_values, smp_processor_id())[0] += inc; > -} > - > -static int pcounter_dyn_getval(const struct pcounter *self, int cpu) > -{ > - return per_cpu_ptr(self->per_cpu_values, cpu)[0]; > -} > - > -int pcounter_getval(const struct pcounter *self) > -{ > - int res = 0, cpu; > - > - for_each_possible_cpu(cpu) > - res += self->getval(self, cpu); > - > - return res; > -} > -EXPORT_SYMBOL_GPL(pcounter_getval); > - > -int pcounter_alloc(struct pcounter *self) > -{ > - int rc = 0; > - if (self->add == NULL) { > - self->per_cpu_values = alloc_percpu(int); > - if (self->per_cpu_values != NULL) { > - self->add = pcounter_dyn_add; > - self->getval = pcounter_dyn_getval; > - } else > - rc = 1; > - } > - return rc; > -} > -EXPORT_SYMBOL_GPL(pcounter_alloc); > - > -void pcounter_free(struct pcounter *self) > -{ > - if (self->per_cpu_values != NULL) { > - free_percpu(self->per_cpu_values); > - self->per_cpu_values = NULL; > - self->getval = NULL; > - self->add = NULL; > - } > -} > -EXPORT_SYMBOL_GPL(pcounter_free); > - > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists