public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL] percpu for 2.6.31
@ 2009-06-18  8:07 Tejun Heo
  2009-06-18 21:22 ` Linus Torvalds
  0 siblings, 1 reply; 11+ messages in thread
From: Tejun Heo @ 2009-06-18  8:07 UTC (permalink / raw)
  To: Linus Torvalds, Ingo Molnar, Linux Kernel Mailing List,
	Andrew Morton, kyle

Hello, Linus.

Please pull from percpu-for-linus git tree from:

    git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus

This contains two logical changes 1. convert most archs to dynamic
percpu allocator and 2. fix x86 lpage allocator and re-enable it.
Both have been posted multiple times and shouldn't break most of the
popular archs.  One known breakage is on parisc which Kyle agreed to
fix post merge.

Ingo, does this look okay to you?  If so, I'll create for-next branch
with the rest of patches and also push other percpu changes through it
(Rusty's drop prefix patches and Christoph's this_cpu_* patches) and
publish it to linux-next.

Thanks.

 Documentation/kernel-parameters.txt              |    6 +
 arch/alpha/include/asm/percpu.h                  |  101 +---------
 arch/alpha/include/asm/tlbflush.h                |    1 +
 arch/arm/kernel/smp.c                            |    4 +-
 arch/arm/mach-kirkwood/cpuidle.c                 |    2 +-
 arch/avr32/kernel/cpu.c                          |    2 +-
 arch/blackfin/mach-common/smp.c                  |    2 +-
 arch/blackfin/mm/sram-alloc.c                    |   22 +-
 arch/cris/include/asm/mmu_context.h              |    3 +-
 arch/cris/mm/fault.c                             |    2 +-
 arch/ia64/Kconfig                                |    3 +
 arch/ia64/kernel/crash.c                         |    2 +-
 arch/ia64/kernel/smp.c                           |    4 +-
 arch/ia64/kernel/traps.c                         |    2 +-
 arch/ia64/kvm/kvm-ia64.c                         |    2 +-
 arch/ia64/sn/kernel/setup.c                      |    2 +-
 arch/ia64/xen/irq_xen.c                          |   24 ++--
 arch/mips/kernel/cevt-bcm1480.c                  |    6 +-
 arch/mips/kernel/cevt-sb1250.c                   |    6 +-
 arch/mips/kernel/topology.c                      |    2 +-
 arch/mips/sgi-ip27/ip27-timer.c                  |    4 +-
 arch/parisc/kernel/irq.c                         |    2 +-
 arch/parisc/kernel/topology.c                    |    2 +-
 arch/powerpc/Kconfig                             |    3 +
 arch/powerpc/kernel/cacheinfo.c                  |    2 +-
 arch/powerpc/kernel/process.c                    |    2 +-
 arch/powerpc/kernel/sysfs.c                      |    4 +-
 arch/powerpc/kernel/time.c                       |    6 +-
 arch/powerpc/mm/pgtable.c                        |    2 +-
 arch/powerpc/mm/stab.c                           |    4 +-
 arch/powerpc/oprofile/op_model_cell.c            |    2 +-
 arch/powerpc/platforms/cell/cpufreq_spudemand.c  |    2 +-
 arch/powerpc/platforms/cell/interrupt.c          |    2 +-
 arch/powerpc/platforms/ps3/interrupt.c           |    2 +-
 arch/powerpc/platforms/ps3/smp.c                 |    2 +-
 arch/powerpc/platforms/pseries/dtl.c             |    2 +-
 arch/powerpc/platforms/pseries/iommu.c           |    2 +-
 arch/s390/appldata/appldata_base.c               |    2 +-
 arch/s390/include/asm/percpu.h                   |   32 +---
 arch/s390/kernel/nmi.c                           |    2 +-
 arch/s390/kernel/smp.c                           |    2 +-
 arch/s390/kernel/time.c                          |    4 +-
 arch/s390/kernel/vtime.c                         |    2 +-
 arch/sh/kernel/localtimer.c                      |    2 +-
 arch/sh/kernel/topology.c                        |    2 +-
 arch/sparc/Kconfig                               |    3 +
 arch/sparc/kernel/nmi.c                          |    6 +-
 arch/sparc/kernel/pci_sun4v.c                    |    2 +-
 arch/sparc/kernel/sysfs.c                        |    4 +-
 arch/sparc/kernel/time_64.c                      |    4 +-
 arch/x86/Kconfig                                 |    3 -
 arch/x86/include/asm/percpu.h                    |    9 +
 arch/x86/kernel/apic/apic.c                      |    2 +-
 arch/x86/kernel/apic/nmi.c                       |    8 +-
 arch/x86/kernel/apic/x2apic_cluster.c            |    2 +-
 arch/x86/kernel/cpu/common.c                     |    2 +-
 arch/x86/kernel/cpu/cpu_debug.c                  |    6 +-
 arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c       |    4 +-
 arch/x86/kernel/cpu/cpufreq/powernow-k8.c        |    2 +-
 arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c |    4 +-
 arch/x86/kernel/cpu/intel_cacheinfo.c            |    6 +-
 arch/x86/kernel/cpu/mcheck/mce_amd_64.c          |    4 +-
 arch/x86/kernel/cpu/mcheck/mce_intel_64.c        |    2 +-
 arch/x86/kernel/cpu/mcheck/therm_throt.c         |    4 +-
 arch/x86/kernel/cpu/perf_counter.c               |   16 +-
 arch/x86/kernel/cpu/perfctr-watchdog.c           |    2 +-
 arch/x86/kernel/ds.c                             |    4 +-
 arch/x86/kernel/hpet.c                           |    2 +-
 arch/x86/kernel/irq_32.c                         |    8 +-
 arch/x86/kernel/kvm.c                            |    2 +-
 arch/x86/kernel/kvmclock.c                       |    2 +-
 arch/x86/kernel/paravirt.c                       |    2 +-
 arch/x86/kernel/process_64.c                     |    2 +-
 arch/x86/kernel/setup_percpu.c                   |  219 ++++++++++++++++------
 arch/x86/kernel/smpboot.c                        |    2 +-
 arch/x86/kernel/tlb_uv.c                         |    6 +-
 arch/x86/kernel/topology.c                       |    2 +-
 arch/x86/kernel/uv_time.c                        |    2 +-
 arch/x86/kernel/vmiclock_32.c                    |    2 +-
 arch/x86/kvm/svm.c                               |    2 +-
 arch/x86/kvm/vmx.c                               |    6 +-
 arch/x86/kvm/x86.c                               |    2 +-
 arch/x86/mm/kmemcheck/kmemcheck.c                |    2 +-
 arch/x86/mm/kmmio.c                              |    2 +-
 arch/x86/mm/mmio-mod.c                           |    4 +-
 arch/x86/mm/pageattr.c                           |   65 ++++---
 arch/x86/oprofile/nmi_int.c                      |    4 +-
 arch/x86/xen/enlighten.c                         |    4 +-
 arch/x86/xen/multicalls.c                        |    2 +-
 arch/x86/xen/smp.c                               |    8 +-
 arch/x86/xen/spinlock.c                          |    4 +-
 arch/x86/xen/time.c                              |   10 +-
 block/as-iosched.c                               |   10 +-
 block/blk-softirq.c                              |    2 +-
 block/cfq-iosched.c                              |   10 +-
 crypto/sha512_generic.c                          |    2 +-
 drivers/acpi/processor_core.c                    |    2 +-
 drivers/acpi/processor_thermal.c                 |    2 +-
 drivers/base/cpu.c                               |    2 +-
 drivers/char/random.c                            |    2 +-
 drivers/connector/cn_proc.c                      |    2 +-
 drivers/cpufreq/cpufreq.c                        |    8 +-
 drivers/cpufreq/cpufreq_conservative.c           |   12 +-
 drivers/cpufreq/cpufreq_ondemand.c               |   15 +-
 drivers/cpufreq/cpufreq_stats.c                  |    2 +-
 drivers/cpufreq/cpufreq_userspace.c              |   11 +-
 drivers/cpufreq/freq_table.c                     |    2 +-
 drivers/cpuidle/governors/ladder.c               |    2 +-
 drivers/cpuidle/governors/menu.c                 |    2 +-
 drivers/crypto/padlock-aes.c                     |    2 +-
 drivers/lguest/page_tables.c                     |    2 +-
 drivers/lguest/x86/core.c                        |    2 +-
 drivers/xen/events.c                             |   13 +-
 fs/buffer.c                                      |    4 +-
 fs/file.c                                        |    2 +-
 include/linux/percpu-defs.h                      |   10 +-
 include/linux/percpu.h                           |   12 +-
 init/main.c                                      |   24 ---
 kernel/kprobes.c                                 |    2 +-
 kernel/lockdep.c                                 |    2 +-
 kernel/module.c                                  |    6 +-
 kernel/perf_counter.c                            |    8 +-
 kernel/printk.c                                  |    2 +-
 kernel/profile.c                                 |    4 +-
 kernel/rcuclassic.c                              |    4 +-
 kernel/rcupdate.c                                |    2 +-
 kernel/rcupreempt.c                              |   10 +-
 kernel/rcutorture.c                              |    4 +-
 kernel/sched.c                                   |   30 ++--
 kernel/sched_clock.c                             |    2 +-
 kernel/sched_rt.c                                |    2 +-
 kernel/smp.c                                     |    6 +-
 kernel/softirq.c                                 |    6 +-
 kernel/softlockup.c                              |    6 +-
 kernel/taskstats.c                               |    4 +-
 kernel/time/tick-sched.c                         |    2 +-
 kernel/time/timer_stats.c                        |    2 +-
 kernel/timer.c                                   |    2 +-
 kernel/trace/ftrace.c                            |    2 +-
 kernel/trace/ring_buffer.c                       |    2 +-
 kernel/trace/trace.c                             |    6 +-
 kernel/trace/trace_events.c                      |    6 +-
 kernel/trace/trace_hw_branches.c                 |    4 +-
 kernel/trace/trace_irqsoff.c                     |    2 +-
 kernel/trace/trace_stack.c                       |    2 +-
 kernel/trace/trace_sysprof.c                     |    2 +-
 kernel/trace/trace_workqueue.c                   |    2 +-
 lib/radix-tree.c                                 |    2 +-
 lib/random32.c                                   |    2 +-
 mm/Makefile                                      |    2 +-
 mm/allocpercpu.c                                 |   28 +++
 mm/kmemleak-test.c                               |    6 +-
 mm/page-writeback.c                              |    5 +-
 mm/percpu.c                                      |   64 ++++++-
 mm/quicklist.c                                   |    2 +-
 mm/slab.c                                        |    4 +-
 mm/slub.c                                        |    6 +-
 mm/swap.c                                        |    4 +-
 mm/vmalloc.c                                     |    2 +-
 mm/vmstat.c                                      |    2 +-
 net/core/drop_monitor.c                          |    2 +-
 net/core/flow.c                                  |    6 +-
 net/core/sock.c                                  |    2 +-
 net/ipv4/route.c                                 |    2 +-
 net/ipv4/syncookies.c                            |    4 +-
 net/ipv6/syncookies.c                            |    4 +-
 net/rds/ib_stats.c                               |    2 +-
 net/rds/iw_stats.c                               |    2 +-
 net/rds/page.c                                   |    2 +-
 net/socket.c                                     |    2 +-
 170 files changed, 653 insertions(+), 553 deletions(-)

Jesper Nilsson (1):
      CRIS: Change DEFINE_PER_CPU of current_pgd to be non volatile.

Tejun Heo (16):
      percpu: fix too lazy vunmap cache flushing
      percpu: use dynamic percpu allocator as the default percpu allocator
      percpu: cleanup percpu array definitions
      use-percpu-aligned
      percpu: clean up percpu variable definitions
      percpu: enforce global definition
      alpha: kill unnecessary __used attribute in PER_CPU_ATTRIBUTES
      alpha: switch to dynamic percpu allocator
      s390: switch to dynamic percpu allocator
      x86: fix duplicate free in setup_pcpu_remap() failure path
      x86: rename remap percpu first chunk allocator to lpage
      x86: prepare setup_pcpu_lpage() for pageattr fix
      x86: reorganize cpa_process_alias()
      x86: fix pageattr handling for lpage percpu allocator and re-enable it
      x86: implement percpu_alloc kernel parameter
      x86: ensure percpu lpage doesn't consume too much vmalloc space


-- 
tejun

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18  8:07 [GIT PULL] percpu for 2.6.31 Tejun Heo
@ 2009-06-18 21:22 ` Linus Torvalds
  2009-06-18 21:39   ` Andrew Morton
  2009-06-18 22:33   ` Tejun Heo
  0 siblings, 2 replies; 11+ messages in thread
From: Linus Torvalds @ 2009-06-18 21:22 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Ingo Molnar, Linux Kernel Mailing List, Andrew Morton, kyle



On Thu, 18 Jun 2009, Tejun Heo wrote:
> 
> Please pull from percpu-for-linus git tree from:
> 
>     git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus

I'm very unhappy with this kind of crap.

Has it been tested AT ALL? Apparently not.

	arch/x86/kernel/cpu/mcheck/mce.c:98: error: multiple storage classes in declaration specifiers
	arch/x86/kernel/cpu/mcheck/mce.c:98: error: non-static declaration of ‘per_cpu__mces_seen’ follows static declaration
	arch/x86/kernel/cpu/mcheck/mce.c:98: note: previous declaration of ‘per_cpu__mces_seen’ was here
	.. and tons of other similar errors ..

and it was apparently done on purpose, for no good reason. The bug with 
static per-cpu variables is only for some broken architectures.

Even the _documentation_ uses "static DEFINE_PER_CPU(..)" for chissake!

To make matters worse, this whole series was clearly rebased (or applied 
from some other queue) just _minutes_ before sending it to me. No wonder 
it had zero testing:

 - commit:
	Date: Thu Jun 18 16:22:05 2009 +0900
 - email:
	Date: Thu, 18 Jun 2009 17:07:16 +0900

I'm not pulling it. Or rather, I pulled it, ended up doing other work, 
noticed the problems, and had to re-do my whole tree because I refuse to 
have sh*t like this in the kernel.

And I'm not going to pull trees that get rebased like this with basically 
no testing before sending it to me. There's a reason I don't like 
rebasing.

			Linus

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 21:22 ` Linus Torvalds
@ 2009-06-18 21:39   ` Andrew Morton
  2009-06-18 22:43     ` Tejun Heo
  2009-06-19  6:49     ` Ingo Molnar
  2009-06-18 22:33   ` Tejun Heo
  1 sibling, 2 replies; 11+ messages in thread
From: Andrew Morton @ 2009-06-18 21:39 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: tj, mingo, linux-kernel, kyle

On Thu, 18 Jun 2009 14:22:20 -0700 (PDT)
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Thu, 18 Jun 2009, Tejun Heo wrote:
> > 
> > Please pull from percpu-for-linus git tree from:
> > 
> >     git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus
> 
> I'm very unhappy with this kind of crap.

AFACIT none of these patches have ever been in linux-next.  Half or
more of them turned up on the mailing list for the first time two days
ago and there's little evidence that anyone has even looked at them.

If this doesn't mean "you missed 2.6.31" then what does?



Yes, things like this can be messy and hard to develop and maintain
outside the merge window.  We understand this.  There are special
cases.  But when this happens, let's talk about it and see what we can
do!  Please let's not pretend that this is an ordinary old git merge
like all the others.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 21:22 ` Linus Torvalds
  2009-06-18 21:39   ` Andrew Morton
@ 2009-06-18 22:33   ` Tejun Heo
  2009-06-18 22:45     ` Tejun Heo
  2009-06-19  1:47     ` Tejun Heo
  1 sibling, 2 replies; 11+ messages in thread
From: Tejun Heo @ 2009-06-18 22:33 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Ingo Molnar, Linux Kernel Mailing List, Andrew Morton, kyle

Hello, Linus.

Linus Torvalds wrote:
> 
> On Thu, 18 Jun 2009, Tejun Heo wrote:
>> Please pull from percpu-for-linus git tree from:
>>
>>     git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus
> 
> I'm very unhappy with this kind of crap.
> 
> Has it been tested AT ALL? Apparently not.
> 
> 	arch/x86/kernel/cpu/mcheck/mce.c:98: error: multiple storage classes in declaration specifiers
> 	arch/x86/kernel/cpu/mcheck/mce.c:98: error: non-static declaration of ‘per_cpu__mces_seen’ follows static declaration
> 	arch/x86/kernel/cpu/mcheck/mce.c:98: note: previous declaration of ‘per_cpu__mces_seen’ was here
> 	.. and tons of other similar errors ..

Oops, my apologies.  I had them as floating series and apparently used
different base commit when applying them.  I did grep run and full yes
build on the original quilt tree but didn't after quiltimport.  Sorry.

> and it was apparently done on purpose, for no good reason. The bug with 
> static per-cpu variables is only for some broken architectures.

Yes, for two of them s390 and alpha.  Another route was to tell the
compiler to generate external references were to use weak attribute
which also required globally unique name.  The first take of the
patchset used guard symbols to guarantee variable scope
(static/extern) and uniqueness while using weak attribute for the
actual percpu symbol.  It worked but was a bit too complex.  Consensus
(at least of the ones involved in the discussion) was limiting percpu
definitions to extern is an acceptable compromise.

> Even the _documentation_ uses "static DEFINE_PER_CPU(..)" for chissake!

Yeap, that was me going through grep output and thinking oh... I'll do
it later and then forget about it.  Will update now.

> To make matters worse, this whole series was clearly rebased (or applied 
> from some other queue) just _minutes_ before sending it to me. No wonder 
> it had zero testing:
> 
>  - commit:
> 	Date: Thu Jun 18 16:22:05 2009 +0900
>  - email:
> 	Date: Thu, 18 Jun 2009 17:07:16 +0900
> 
> I'm not pulling it. Or rather, I pulled it, ended up doing other work, 
> noticed the problems, and had to re-do my whole tree because I refuse to 
> have sh*t like this in the kernel.
> 
> And I'm not going to pull trees that get rebased like this with basically 
> no testing before sending it to me. There's a reason I don't like 
> rebasing.

Percpu patches used to run through Ingo's x86 tree (so reached
linux-next from there) but recent changes went out of scope for x86 so
the two patchsets posted here didn't have home.  They were posted well
before the merge window (IIRC the first postings were about two months
ago) and went through four and three revision cycles.

The tree was prepared in kind of hurry because I realized that no one
was gonna push it through a few days ago.  It's true that these
patches didn't see wider testing in linux-next or any other public
tree, so it seems these should wait for the next merge window.  I'll
maintain the percpu tree and push it through linux-next during this
devel cycle.

Sorry about the trouble.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 21:39   ` Andrew Morton
@ 2009-06-18 22:43     ` Tejun Heo
  2009-06-19  6:49     ` Ingo Molnar
  1 sibling, 0 replies; 11+ messages in thread
From: Tejun Heo @ 2009-06-18 22:43 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Linus Torvalds, mingo, linux-kernel, kyle

Hello, Andrew.

Andrew Morton wrote:
> On Thu, 18 Jun 2009 14:22:20 -0700 (PDT)
> Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
>> On Thu, 18 Jun 2009, Tejun Heo wrote:
>>> Please pull from percpu-for-linus git tree from:
>>>
>>>     git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus
>> I'm very unhappy with this kind of crap.
> 
> AFACIT none of these patches have ever been in linux-next.  Half or
> more of them turned up on the mailing list for the first time two days
> ago and there's little evidence that anyone has even looked at them.

Unfortunately, they grew out of their home so they didn't have proper
path to linux-next but I wasn't that careless.  The two patchsets went
through three and four revisions.

percpu-convert-most-archs-to-dynamic-percpu

    http://thread.gmane.org/gmane.linux.kernel.cross-arch/3818
    http://www.gossamer-threads.com/lists/linux/kernel/1083895
    http://thread.gmane.org/gmane.linux.kernel/839059

x86-percpu-fix-pageattr-handling

    http://thread.gmane.org/gmane.linux.kernel.cross-arch/3825
    http://thread.gmane.org/gmane.linux.kernel/844298
    http://article.gmane.org/gmane.linux.kernel/837157
    http://thread.gmane.org/gmane.linux.kernel/836771

> If this doesn't mean "you missed 2.6.31" then what does?
> 
> Yes, things like this can be messy and hard to develop and maintain
> outside the merge window.  We understand this.  There are special
> cases.  But when this happens, let's talk about it and see what we can
> do!  Please let's not pretend that this is an ordinary old git merge
> like all the others.

Sorry.  My fault.  It used to go through x86 and this was me realizing
that nobody was gonna take care of these patchsets and prepping trees
myself in a hurry.  Won't happen again.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 22:33   ` Tejun Heo
@ 2009-06-18 22:45     ` Tejun Heo
  2009-06-19  1:47     ` Tejun Heo
  1 sibling, 0 replies; 11+ messages in thread
From: Tejun Heo @ 2009-06-18 22:45 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Ingo Molnar, Linux Kernel Mailing List, Andrew Morton, kyle

Tejun Heo wrote:
> the two patchsets posted here didn't have home.  They were posted well
> before the merge window (IIRC the first postings were about two months
> ago) and went through four and three revision cycles.

Correction: They are four and five weeks old.  It somehow felt longer
to me.  :-)

-- 
tejun

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 22:33   ` Tejun Heo
  2009-06-18 22:45     ` Tejun Heo
@ 2009-06-19  1:47     ` Tejun Heo
  2009-06-19  5:39       ` Ingo Molnar
  1 sibling, 1 reply; 11+ messages in thread
From: Tejun Heo @ 2009-06-19  1:47 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Ingo Molnar, Linux Kernel Mailing List, Andrew Morton, kyle

Hello, again.

Tejun Heo wrote:
> Oops, my apologies.  I had them as floating series and apparently used
> different base commit when applying them.  I did grep run and full yes
> build on the original quilt tree but didn't after quiltimport.  Sorry.

I digged through git changelogs to find out where it went wrong.  I
did use the same base commit when quiltimporting but when I updated
the patches on top of mainline two days ago, I forgot to quilt add the
file and the mce change got committed to the base tree instead of
quilt patch.  After pulling the latest master into the quilt branch
yesterday, I updated the series for newcomers and everything worked
fine (as the base tree change got merged by git).  quiltimporting of
course lost the base tree change and thinking the output gotta be
identical I didn't test the final git tree.

Anyways, I'm dropping the for-linus branch from percpu tree, fixing it
up, adding patchsets scheduled for .32 release and will try to get it
merged into #linux-next.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-19  1:47     ` Tejun Heo
@ 2009-06-19  5:39       ` Ingo Molnar
  2009-06-19 19:39         ` Linus Torvalds
  0 siblings, 1 reply; 11+ messages in thread
From: Ingo Molnar @ 2009-06-19  5:39 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Linus Torvalds, Linux Kernel Mailing List, Andrew Morton, kyle


* Tejun Heo <tj@kernel.org> wrote:

> Hello, again.
> 
> Tejun Heo wrote:
> > Oops, my apologies.  I had them as floating series and apparently used
> > different base commit when applying them.  I did grep run and full yes
> > build on the original quilt tree but didn't after quiltimport.  Sorry.
> 
> I digged through git changelogs to find out where it went wrong.  
> I did use the same base commit when quiltimporting but when I 
> updated the patches on top of mainline two days ago, I forgot to 
> quilt add the file and the mce change got committed to the base 
> tree instead of quilt patch.  After pulling the latest master into 
> the quilt branch yesterday, I updated the series for newcomers and 
> everything worked fine (as the base tree change got merged by 
> git).  quiltimporting of course lost the base tree change and 
> thinking the output gotta be identical I didn't test the final git 
> tree.
> 
> Anyways, I'm dropping the for-linus branch from percpu tree, 
> fixing it up, adding patchsets scheduled for .32 release and will 
> try to get it merged into #linux-next.

Please create a -git based bit for the x86 side (as i asked you 
previously) - we can certainly get that upstream sooner after the 
necessary amount of testing.

Condolences for trying to improve a dozen SMP architectures at once, 
you've ended up with:

 - being forced to rebase all the time. (This will happen in the
   cycle to come too: just watch as the conflicts in linux-next
   mount up with the architecture trees. Your tree will become
   crappy quickly due to the combined noise.)

 - the 10x patch logistics end up killing your overall quality, let
   crap creep in and cause breakage even on x86.

You wasted 3 months of your life on that. Now you've learned not to 
do that ever again - i've been there, done that, got the T-shirt.

Just stick your new stuff behind an ARCH_HAS flag, add it to the 
architecture(s) you care about and forget about the rest - let the 
remaining arch maintainers pick things up in their own pace. You'll 
get 90% of the benefits to Linux with just 30% of the work.

( Many wont btw: we still dont have lockdep support in all
  architectures - 3 years and counting. It's a highly useful purely
  sw feature with zero hardware dependencies. Fortunately it's
  well-modularized and the functionality is non-essential. Percpu
  allocation is not so lucky as it's essential functionality. )

	Ingo

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-18 21:39   ` Andrew Morton
  2009-06-18 22:43     ` Tejun Heo
@ 2009-06-19  6:49     ` Ingo Molnar
  1 sibling, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2009-06-19  6:49 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Linus Torvalds, tj, linux-kernel, kyle


* Andrew Morton <akpm@linux-foundation.org> wrote:

> On Thu, 18 Jun 2009 14:22:20 -0700 (PDT)
> Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> > On Thu, 18 Jun 2009, Tejun Heo wrote:
> > > 
> > > Please pull from percpu-for-linus git tree from:
> > > 
> > >     git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-linus
> > 
> > I'm very unhappy with this kind of crap.
> 
> AFACIT none of these patches have ever been in linux-next.  Half 
> or more of them turned up on the mailing list for the first time 
> two days ago and there's little evidence that anyone has even 
> looked at them.

Hm, i've seen many of them (for months literally) and you were 
definitely Cc:-ed to all of them. The new bits (which i think you 
are referring to) are not included in this series - only the old 
bits.

I even asked you about them a month ago, whether you'd want to pick 
Tejun's bits up into -mm because they are clearly generic VM patches 
and they seemed to be falling between the cracks for v2.6.31. I had 
two small bits of x86 relevant percpu patches which i'd gladly have 
bounced over to you.

Btw., it will be a lot of work for Tejun to go through another 3 
months with a patch-set of this magnitude:

  170 files changed, 653 insertions(+), 553 deletions(-)

and i suspect it will cause a fair amount of linux-next conflict 
resolution overhead as well. So Tejun, if you can get it tested 
please consider targeting it for this merge window still. I can
help out with some -tip testig if you want.

	Ingo

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-19  5:39       ` Ingo Molnar
@ 2009-06-19 19:39         ` Linus Torvalds
  2009-06-19 21:08           ` Ingo Molnar
  0 siblings, 1 reply; 11+ messages in thread
From: Linus Torvalds @ 2009-06-19 19:39 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Tejun Heo, Linux Kernel Mailing List, Andrew Morton, kyle



On Fri, 19 Jun 2009, Ingo Molnar wrote:
> 
> ( Many wont btw: we still dont have lockdep support in all
>   architectures - 3 years and counting. It's a highly useful purely
>   sw feature with zero hardware dependencies. Fortunately it's
>   well-modularized and the functionality is non-essential. Percpu
>   allocation is not so lucky as it's essential functionality. )

When it coems to code coverage, x86 matters _so_ much more than any other 
architecture, that verification features like lockdep etc are way more 
important on x86 than on anything else.

Sure, there may be locking issues in some arch-specific code, and other 
architectures could be better off caring. But the advantage of lockdep for 
some pissant architecture that has a very limited user base (maybe lots of 
chips, but much more limited _use_ - fewer drivers, fewer workloads etc) 
is much lower, since those architectures know that x86 will give them 99% 
of the coverage.

So it's quite reasonable to think that other architectures simply care 
less.

			Linus

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [GIT PULL] percpu for 2.6.31
  2009-06-19 19:39         ` Linus Torvalds
@ 2009-06-19 21:08           ` Ingo Molnar
  0 siblings, 0 replies; 11+ messages in thread
From: Ingo Molnar @ 2009-06-19 21:08 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Tejun Heo, Linux Kernel Mailing List, Andrew Morton, kyle


* Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Fri, 19 Jun 2009, Ingo Molnar wrote:
> > 
> > ( Many wont btw: we still dont have lockdep support in all
> >   architectures - 3 years and counting. It's a highly useful purely
> >   sw feature with zero hardware dependencies. Fortunately it's
> >   well-modularized and the functionality is non-essential. Percpu
> >   allocation is not so lucky as it's essential functionality. )
> 
> When it coems to code coverage, x86 matters _so_ much more than 
> any other architecture, that verification features like lockdep 
> etc are way more important on x86 than on anything else.
> 
> Sure, there may be locking issues in some arch-specific code, and 
> other architectures could be better off caring. But the advantage 
> of lockdep for some pissant architecture that has a very limited 
> user base (maybe lots of chips, but much more limited _use_ - 
> fewer drivers, fewer workloads etc) is much lower, since those 
> architectures know that x86 will give them 99% of the coverage.
> 
> So it's quite reasonable to think that other architectures simply 
> care less.

Hm, agreed, i accept that point. A minimal architecture can be 
implemented in as little as 10-20 KLOC, and the chances of there 
being lockups in that code, versus the millions of lines of code 
they take advantage of, is proportionately low.

Btw., here's the current lockdep support list:

  for N in arch/*/; do printf "%30s: %d\n" $N \
    $(git grep -l -w LOCKDEP_SUPPORT $N | wc -l); done | \
      sort -t: -n -k 2 -r
 
                     arch/x86/: 1
                      arch/um/: 1
                   arch/sparc/: 1
                      arch/sh/: 1
                    arch/s390/: 1
                 arch/powerpc/: 1
                    arch/mips/: 1
                arch/blackfin/: 1
                   arch/avr32/: 1
                     arch/arm/: 1
                  arch/xtensa/: 0
                  arch/parisc/: 0
                 arch/mn10300/: 0
              arch/microblaze/: 0
               arch/m68knommu/: 0
                    arch/m68k/: 0
                    arch/m32r/: 0
                    arch/ia64/: 0
                   arch/h8300/: 0
                     arch/frv/: 0
                    arch/cris/: 0
                   arch/alpha/: 0

Lockdep is supported on 10 architectures, not supported on 12.

We still have regular friction between pre-lockdep and post-lockdep 
APIs, such as local_irq_save / raw_local_irq_save. If some generic 
code makes use of raw_local_irq_save then non-lockdep architectures 
break and the 'offending' tree gets excluded from linux-next.

So there's ongoing cost involved for the core kernel as well and 
non-lockdep architectures dont just hurt themselves, they also hurt 
core kernel changes, via their incomplete APIs. Such assymetries 
could be eliminated without adding lockdep support, by providing 1:1 
aliases - but not even this minimal step is done as there's 
basically no incentive on the part of these architectures to do it.

Taking advantage of other trees while costing them - that looks a 
bit like parasitic behavior to me, in this specific instance of 
lockdep support - wouldnt you agree to a certain degree?

	Ingo

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-06-19 21:09 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-18  8:07 [GIT PULL] percpu for 2.6.31 Tejun Heo
2009-06-18 21:22 ` Linus Torvalds
2009-06-18 21:39   ` Andrew Morton
2009-06-18 22:43     ` Tejun Heo
2009-06-19  6:49     ` Ingo Molnar
2009-06-18 22:33   ` Tejun Heo
2009-06-18 22:45     ` Tejun Heo
2009-06-19  1:47     ` Tejun Heo
2009-06-19  5:39       ` Ingo Molnar
2009-06-19 19:39         ` Linus Torvalds
2009-06-19 21:08           ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox