[Debian] Re: fix for 500876

dann frazier dannf at dannf.org
Tue Mar 3 15:43:56 EST 2009


On Tue, Mar 03, 2009 at 09:34:26PM +0100, Ola Lundqvist wrote:
> Hi Dann
> 
> The openvz 686 version is now regression tested. I have also asked the
> person that had the problem with this bug to verify the amd64 kernel as well.
> 
> Best regards,

Thanks!

> // Ola
> 
> On Tue, Mar 03, 2009 at 11:36:17AM -0700, dann frazier wrote:
> > On Tue, Mar 03, 2009 at 05:54:09PM +0100, Ola Lundqvist wrote:
> > > Hi Dann
> > > 
> > > Looks very similar to the patch I proposed. Here it is.
> > > I was not aware you could add more files so I appended to the
> > > end of the file.
> > 
> > Ah - yeah, in fact we _must_ have separate files. That gives us the
> > ability to generate older versions of the source tree from the
> > latest. Of course, that doesn't work so well for the "features"
> > patches, since they sometimes have to be regen'd to apply.
> > 
> > > When you have different files like this, which order will it take
> > > them?
> > 
> > That is determined by the series file. At application, the build
> > system parses the series file (using the changelog to determine
> > order), and applys all of the normal patches (series files that don't
> > end in "-extra"), followed by all of the -extra patches.
> > 
> > I guess the only thing remaining is to verify that this patch works
> > well and risk of regression is low - do you have a system (or systems)
> > you can use to test the builds here?
> > 
> >   http://people.debian.org/~dannf/bugs/500876/
> > 
> > > Best regards,
> > > 
> > > // Ola
> > > 
> > > On Tue, Mar 03, 2009 at 09:31:36AM -0700, dann frazier wrote:
> > > > On Tue, Mar 03, 2009 at 07:49:05AM +0100, Ola Lundqvist wrote:
> > > > > Hi Dann
> > > > >
> > > > > Quoting dann frazier <dannf at dannf.org>:
> > > > >
> > > > >> hey Ola,
> > > > >>  Attached is a patch I have queued for lenny.
> > > > >> I've posted builds w/ this fix here:
> > > > >>
> > > > >>  http://people.debian.org/~dannf/bugs/500876/
> > > > >
> > > > > Oh, thanks a lot.
> > > > >
> > > > >> Would you be able to review the patch/test the build to confirm that
> > > > >> its ok for a stable update? Note that it doesn't change the ABI.
> > > > >
> > > > > Good to know that it does not change the ABI. I was just about to send you 
> > > > > a mail with my own work regarding this issue. My machine is currently 
> > > > > building a package with this patch.
> > > > >
> > > > > Do you have a diff file on what you did? If not I'll send mine later today. 
> > > > > The patch applied fine and seems to build on 686 arch at least.
> > > > >
> > > > > Best regards,
> > > > >
> > > > > // Ola
> > > > 
> > > > oops - forgot to attach it
> > > 
> > > > Index: debian/patches/series/14-extra
> > > > ===================================================================
> > > > --- debian/patches/series/14-extra	(revision 0)
> > > > +++ debian/patches/series/14-extra	(revision 0)
> > > > @@ -0,0 +1 @@
> > > > ++ features/all/openvz/fix-wrong-size-of-ub0_percpu.patch featureset=openvz
> > > > Index: debian/patches/features/all/openvz/fix-wrong-size-of-ub0_percpu.patch
> > > > ===================================================================
> > > > --- debian/patches/features/all/openvz/fix-wrong-size-of-ub0_percpu.patch	(revision 0)
> > > > +++ debian/patches/features/all/openvz/fix-wrong-size-of-ub0_percpu.patch	(revision 0)
> > > > @@ -0,0 +1,112 @@
> > > > +From: Konstantin Khlebnikov <khlebnikov at openvz.org>
> > > > +Date: Tue, 7 Oct 2008 08:57:48 +0000 (+0400)
> > > > +Subject: fix wrong size of ub0_percpu.
> > > > +X-Git-Tag: sync-2.6.27-15.10.08~5
> > > > +X-Git-Url: http://git.openvz.org/?p=linux-2.6.26-openvz;a=commitdiff_plain;h=777e8164ebf8a03e43511983cdec472f8691a8af
> > > > +
> > > > +fix wrong size of ub0_percpu.
> > > > +
> > > > +after commit b3242151 struct percpu_data dynamically allocated
> > > > +and have array only for 1 cpu, so static usage of it does not work.
> > > > +
> > > > +Plus rework macros for static percpu variables declaration and initialization.
> > > > +
> > > > +http://bugzilla.openvz.org/show_bug.cgi?id=1039
> > > > +
> > > > +Signed-off-by: Konstantin Khlebnikov <khlebnikov at openvz.org>
> > > > +Signed-off-by: Pavel Emelyanov <xemul at openvz.org>
> > > > +---
> > > > +
> > > > +diff --git a/include/linux/percpu.h b/include/linux/percpu.h
> > > > +index 5ac97e1..e159f4d 100644
> > > > +--- a/include/linux/percpu.h
> > > > ++++ b/include/linux/percpu.h
> > > > +@@ -74,11 +74,20 @@ struct percpu_data {
> > > > +         (__typeof__(ptr))__p->ptrs[(cpu)];	          \
> > > > + })
> > > > + 
> > > > +-#define static_percpu_ptr(sptr, sptrs) ({		\
> > > > ++struct percpu_data_static {
> > > > ++	void *ptrs[NR_CPUS];
> > > > ++};
> > > > ++
> > > > ++#define DEFINE_PER_CPU_STATIC(type, name) \
> > > > ++	static struct percpu_data_static per_cpu_data__##name; \
> > > > ++	static __typeof__(type) per_cpu__##name[NR_CPUS]
> > > > ++
> > > > ++#define percpu_static_init(name) ({			\
> > > > + 		int i;					\
> > > > + 		for (i = 0; i < NR_CPUS; i++)		\
> > > > +-			(sptr)->ptrs[i] = &(sptrs)[i];	\
> > > > +-		(__typeof__(&sptrs[0]))__percpu_disguise(sptr);\
> > > > ++			(per_cpu_data__##name).ptrs[i] = &(per_cpu__##name)[i];\
> > > > ++		(__typeof__(&(per_cpu__##name)[0]))	\
> > > > ++			__percpu_disguise(&(per_cpu_data__##name));\
> > > > + 	})
> > > > + 
> > > > + extern void *percpu_populate(void *__pdata, size_t size, gfp_t gfp, int cpu);
> > > > +@@ -92,7 +101,11 @@ extern void percpu_free(void *__pdata);
> > > > + #else /* CONFIG_SMP */
> > > > + 
> > > > + #define percpu_ptr(ptr, cpu) ({ (void)(cpu); (ptr); })
> > > > +-#define static_percpu_ptr(sptr, sptrs)	(&sptrs[0])
> > > > ++
> > > > ++#define DEFINE_PER_CPU_STATIC(type, name) \
> > > > ++	static __typeof__(type) per_cpu__##name[NR_CPUS]
> > > > ++
> > > > ++#define percpu_static_init(name)	(&(per_cpu__##name)[0])
> > > > + 
> > > > + static inline void percpu_depopulate(void *__pdata, int cpu)
> > > > + {
> > > > +diff --git a/kernel/bc/beancounter.c b/kernel/bc/beancounter.c
> > > > +index 48fa1cc..8cd0ef0 100644
> > > > +--- a/kernel/bc/beancounter.c
> > > > ++++ b/kernel/bc/beancounter.c
> > > > +@@ -629,10 +629,7 @@ static void init_beancounter_syslimits(struct user_beancounter *ub)
> > > > + 	ub->ub_limit_rl.interval = 300*HZ;
> > > > + }
> > > > + 
> > > > +-#ifdef CONFIG_SMP
> > > > +-static struct percpu_data ub0_percpu;
> > > > +-#endif
> > > > +-static struct ub_percpu_struct ub0_percpu_data[NR_CPUS];
> > > > ++DEFINE_PER_CPU_STATIC(struct ub_percpu_struct, ub0_percpu);
> > > > + 
> > > > + void __init ub_init_early(void)
> > > > + {
> > > > +@@ -645,7 +642,7 @@ void __init ub_init_early(void)
> > > > + 	init_beancounter_nolimits(ub);
> > > > + 	init_beancounter_store(ub);
> > > > + 	init_beancounter_struct(ub);
> > > > +-	ub->ub_percpu = static_percpu_ptr(&ub0_percpu, ub0_percpu_data);
> > > > ++	ub->ub_percpu = percpu_static_init(ub0_percpu);
> > > > + 
> > > > + 	memset(&current->task_bc, 0, sizeof(struct task_beancounter));
> > > > + 	(void)set_exec_ub(ub);
> > > > +diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
> > > > +index 7322e50..0248f38 100644
> > > > +--- a/kernel/ve/ve.c
> > > > ++++ b/kernel/ve/ve.c
> > > > +@@ -111,12 +111,7 @@ struct ve_struct ve0 = {
> > > > + 
> > > > + EXPORT_SYMBOL(ve0);
> > > > + 
> > > > +-#ifdef CONFIG_SMP
> > > > +-static struct {
> > > > +-	void *ptrs[NR_CPUS];
> > > > +-} ve0_cpu_stats;
> > > > +-#endif
> > > > +-static struct ve_cpu_stats ve0_cpu_stats_data[NR_CPUS];
> > > > ++DEFINE_PER_CPU_STATIC(struct ve_cpu_stats, ve0_cpu_stats);
> > > > + 
> > > > + LIST_HEAD(ve_list_head);
> > > > + rwlock_t ve_list_lock = RW_LOCK_UNLOCKED;
> > > > +@@ -136,7 +131,7 @@ void init_ve0(void)
> > > > + 	struct ve_struct *ve;
> > > > + 
> > > > + 	ve = get_ve0();
> > > > +-	ve->cpu_stats = static_percpu_ptr(&ve0_cpu_stats, ve0_cpu_stats_data);
> > > > ++	ve->cpu_stats = percpu_static_init(ve0_cpu_stats);
> > > > + 	list_add(&ve->ve_list, &ve_list_head);
> > > > + }
> > > > + 
> > > > Index: debian/changelog
> > > > ===================================================================
> > > > --- debian/changelog	(revision 12956)
> > > > +++ debian/changelog	(working copy)
> > > > @@ -18,6 +18,7 @@
> > > >    [ dann frazier ]
> > > >    * Fix softlockups in sungem driver (Closes: #514624)
> > > >    * intel-agp: Add support for G41 chipset (Closes: #513228)
> > > > +  * [openvz] Fix wrong size of ub0_percpu
> > > >  
> > > >    [ Martin Michlmayr ]
> > > >    * rt2x00: Fix VGC lower bound initialization. (Closes: #510607)
> > > > @@ -30,7 +31,7 @@
> > > >    * [sparc] Revert: Reintroduce dummy PCI host controller to workaround broken
> > > >      X.org. Not supportable and breaks to many things.
> > > >  
> > > > - -- dann frazier <dannf at debian.org>  Fri, 13 Feb 2009 10:46:22 -0700
> > > > + -- dann frazier <dannf at debian.org>  Thu, 26 Feb 2009 13:27:19 -0700
> > > >  
> > > >  linux-2.6 (2.6.26-13) unstable; urgency=high
> > > >  
> > > 
> > > 
> > 
> > 
> > 
> 

-- 
dann frazier



More information about the Debian mailing list