[Debian] Re: fix for 500876

Ola Lundqvist ola at inguza.com
Tue Mar 3 15:34:26 EST 2009


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,

// 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
> 
> 

-- 
 --- Inguza Technology AB --- MSc in Information Technology ----
/  ola at inguza.com                    Annebergsslingan 37        \
|  opal at debian.org                   654 65 KARLSTAD            |
|  http://inguza.com/                Mobile: +46 (0)70-332 1551 |
\  gpg/f.p.: 7090 A92B 18FE 7994 0C36 4FE4 18A1 B1CF 0FE5 3DD9  /
 ---------------------------------------------------------------


More information about the Debian mailing list