====== powerpc-of-serial-3.diff ====== Subject: powerpc: of serial port driver From: Arnd Bergmann This can be used for serial ports that are connected to an OF platform bus but are not autodetected by the lecacy serial support. It will automatically take over devices that come from the legacy serial detection, which usually is only one device. In some cases, rtas may be set up to use the serial port in the firmware, which allows easier debugging before probing the serial ports. In this case, the "used-by-rtas" property must be set by the firmware. This patch also adds code to the legacy serial driver to check for this. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/kernel/legacy_serial.c | 15 + drivers/serial/Kconfig | 10 + drivers/serial/Makefile | 1 drivers/serial/of_serial.c | 143 ++++++++++++++++ 4 files changed, 169 insertions(+) ====== ipmi_fix_find_default_bmc.diff ====== Subject: ipmi: check, if default ports are accessible on PPC From: Christian Krafft ipmi_si_intf tries to access default ports, if no device could be found elsewhere. On PPC we have a function to check, if these legacy IO ports are accessible. This patch adds a check for these ports on PPC. This patch fixes a breakage of IPMI module on PPC machines without a BMC. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: ipmi_si_intf.c | 5 +++++ 1 file changed, 5 insertions(+) ====== pmi-initial-checkin-5.diff ====== Subject: powerpc: add PMI driver for cell blade From: Christian Krafft This patch adds driver code for the PMI device found in future IBM products. PMI stands for "Platform Management Interrupt" and is a way to communicate with the BMC (Baseboard Management Controller). It provides bidirectional communication with a low latency. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/Kconfig | 9 arch/powerpc/configs/cell_defconfig | 1 arch/powerpc/sysdev/Makefile | 1 arch/powerpc/sysdev/pmi.c | 313 ++++++++++++++++ include/asm-powerpc/pmi.h | 67 +++ 5 files changed, 391 insertions(+) ====== spidernet-linas.diff ====== Subject: spidernet: backport from from 2.6.21 From: Linas Vepstas Backport of Linas patches submitted for 2.6.21, already upstream via netdev. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann --- diffstat: spider_net.c | 311 ++++++++++++++----------------- spider_net.h | 20 - spider_net_ethtool.c | 4 3 files changed, 158 insertions(+), 177 deletions(-) ====== spidernet-sungem-update-4.diff ====== Subject: spidernet: add improved phy support From: Jens Osterkamp This version moves the medium variable to the card specific structure and changes the GMII_* to BCM54XX_* #defines. This patch adds improved version of enable_fiber for both the 5421 and the 5461 phy. It is now possible to specify with these wether you want autonegotiation or not. This is needed for bladecenter switches where some expect autonegotiation and some dont seem to like this at all. Depending on this flag it sets phy->autoneg accordingly for the fiber mode. More importantly it implements proper read_link and poll_link functions for both phys which can handle both copper and fiber mode by determining the medium first and then branching to the required functions. For fiber they all work fine, for copper they are not tested but return the result of the genmii_* function anyway which is supposed to work. The patch moves the genmii_* functions around to avoid foreward declarations. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann Acked-by: Linas Vepstas --- diffstat: sungem_phy.c | 389 +++++++++++++++++++++++++-------------- sungem_phy.h | 10 - 2 files changed, 263 insertions(+), 136 deletions(-) ====== spidernet-autoneg-support-for-celleb.diff ====== Subject: spidernet: autoneg support for Celleb From: Kou Ishizaki Add auto negotiation support for Celleb. Signed-off-by: Kou Ishizaki Signed-off-by: Arnd Bergmann --- --- diffstat: spider_net.c | 175 +++++++++++++++++++++++++++++++++++---- spider_net.h | 10 ++ 2 files changed, 169 insertions(+), 16 deletions(-) ====== spidernet-load-firmware-when-open.diff ====== Subject: spidernet: load firmware when open From: Kou Ishizaki This patch moves calling init_firmware() from spider_net_probe() to spider_net_open() so as to use the driver by built-in. Signed-off-by: Kou Ishizaki Signed-off-by: Arnd Bergmann --- --- diffstat: spider_net.c | 247 +++++++++++++++++++-------------------- 1 file changed, 123 insertions(+), 124 deletions(-) ====== spidernet-add-support-for-celleb.diff ====== Subject: spidernet: spidernet: add support for Celleb From: Kou Ishizaki This patch adds or changes some HW specific settings for spider_net on Celleb. Signed-off-by: Kou Ishizaki Signed-off-by: Arnd Bergmann --- --- diffstat: Kconfig | 2 +- spider_net.c | 8 +++++++- spider_net.h | 6 ++++-- 3 files changed, 12 insertions(+), 4 deletions(-) ====== spidernet-remove-txram-full-logging.diff ====== Subject: spidernet: remove txram full logging From: Kou Ishizaki This patches removes logging for SPIDER_NET_GTMFLLINT interrupts. Since the interrupts are not irregular, and they happen frequently when using 100Mbps network switches. Signed-off-by: Kou Ishizaki Signed-off-by: Arnd Bergmann --- --- diffstat: spider_net.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) ====== spidernet-autoneg-medium.diff ====== Subject: spidernet: move medium variable into card struct From: Jens Osterkamp This moves the medium variable into the spidernet card structure. It renames the GMII_ variables to BCM54XX specific ones. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann Acked-by: Linas Vepstas --- --- diffstat: spider_net.c | 14 +++++++------- spider_net.h | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) ====== spidernet-linas-2-sync-with-mainline.diff ====== Subject: spidernet: Synchronize with linux-2.6.20-git16 From: Linas Vepstas Signed-off-by: Linas Vepstas Signed-off-by: Arnd Bergmann ---- drivers/net/spider_net.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) --- diffstat: spider_net.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) ====== spidernet-linas-3-split-descr.diff ====== Subject: [PATCH 8/12] spidernet: separate hardware state from driver state. From: Linas Vepstas This patch separates the hardware descriptor state from the driver descriptor state, per (old) suggestion from Ben Herrenschmidt. This compiles and boots and seems to work. Signed-off-by: Linas Vepstas Cc: Jens Osterkamp Cc: Kou Ishizaki Signed-off-by: Arnd Bergmann --- Sent on 9 Feb 2007 drivers/net/spider_net.c | 150 ++++++++++++++++++++++++++--------------------- drivers/net/spider_net.h | 16 +++-- 2 files changed, 95 insertions(+), 71 deletions(-) --- diffstat: spider_net.c | 150 +++++++++++++++++++++------------------ spider_net.h | 16 ++-- 2 files changed, 95 insertions(+), 71 deletions(-) ====== spidernet-linas-4-tx-race.diff ====== Subject: [PATCH 9/12]: spidernet: fix racy double-free of skb From: Linas Vepstas It appears that under certain circumstances, a race will result in a double-free of an skb. This patch null's out the skb pointer upon the skb free, avoiding the inadvertent deref of bogus data. The next patch fixes the actual race. Signed-off-by: Linas Vepstas Cc: Jens Osterkamp Cc: Kou Ishizaki Signed-off-by: Arnd Bergmann --- Sent on 9 Feb 2007 Fix an unlikely race in the transmit stuff, per Jim on 10 January 2007 and bugzilla report. drivers/net/spider_net.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) --- diffstat: spider_net.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) ====== spidernet-linas-5-nother-race.diff ====== Subject: [PATCH 10/12]: spidernet: transmit race From: Linas Vepstas Multiple threads performing a transmit can race into the spidernet tx ring cleanup code. This puts the relevant check under a lock. Signed-off-by: Linas Vepstas Cc: Jens Osterkamp Cc: Kou Ishizaki Signed-off-by: Arnd Bergmann ---- Sent on 9 Feb 2007 drivers/net/spider_net.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- diffstat: spider_net.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) ====== spidernet-linas-6-typo.diff ====== Subject: [PATCH 11/12] spidernet: janitorial, typos From: Linas Vepstas Janitorial patch. Undo long lines, fix typo in err msg. Signed-off-by: Linas Vepstas Cc: Jens Osterkamp Cc: Kou Ishizaki Signed-off-by: Arnd Bergmann ---- Sent on 9 Feb 2007 drivers/net/spider_net.c | 13 +++++++------ drivers/net/spider_net.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) --- diffstat: spider_net.c | 13 +++++++------ spider_net.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) ====== spufs-remove-SPU_CONTEXT_PREEMPT.diff ====== Subject: spufs: remove SPU_CONTEXT_PREEMPT From: Christoph Hellwig Remove the SPU_CONTEXT_PREEMPT define. It's unused and won't be used in this form after the scheduler rework. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: spufs.h | 3 --- 1 file changed, 3 deletions(-) ====== spufs-run.c-remove-emptry-last-line.diff ====== Subject: spufs: remove empty last line in run.c From: Christoph Hellwig Remove the empty last line in arch/powerpc/platforms/cell/spufs/run.c. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: run.c | 1 - 1 file changed, 1 deletion(-) ====== spufs-remove-superflous-SPU_STATE_SAVED-assignments.diff ====== Subject: spufs: remove superfluous SPU_STATE_SAVED assignments From: Christoph Hellwig unbind_context already sets the context state to SPU_STATE_SAVED, thus the spu_deactivate callers don't need to do it again. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: context.c | 4 +--- sched.c | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) ====== spufs-bind-context-set-SPU_STATE_RUNNABLE.diff ====== Subject: spufs: bind_context sets SPU_STATE_RUNNABLE From: Christoph Hellwig Only bind_context/unbind_context change the spu context state. Thus we can move all assignents of SPU_STATE_RUNNABLE into bind_context, which parallels the unbind side aswell. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: context.c | 2 -- sched.c | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) ====== spufs-sched.c-cleanups.diff ====== Subject: spufs: sched.c cleanups From: Christoph Hellwig Various cleanups to sched.c that don't change the global control flow: - add kerneldoc comments to various functions - add spu_ prefixes to various functions - add/remove context from the runqueue in bind/unbind_context as it's part of the logical operation - add a call to put_active_spu to spu_unbind_contex as it's logically part of the unbind operation Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 98 +++++++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 37 deletions(-) ====== spufs-state-mutex-simple.diff ====== Subject: spufs: simplify state_mutex From: Christoph Hellwig The r/w semaphore to lock the spus was overkill and can be replaced with a mutex to make it faster, simpler and easier to debug. It also helps to allow making most spufs interruptible in future patches. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: context.c | 33 ++++++++++----------------------- sched.c | 8 ++++---- spufs.h | 6 +++--- 3 files changed, 17 insertions(+), 30 deletions(-) ====== spufs-state-mutex-cleanup.diff ====== Subject: spufs: state_mutex cleanup From: Christoph Hellwig Various cleanups in code surrounding the state semaphore: - inline spu_acquire/spu_release - cleanup spu_acquire_* and add kerneldoc comments to these functions - remove spu_release_exclusive and replace it with spu_release Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: context.c | 97 ++++++++++++++++++++++-------------------- run.c | 2 spufs.h | 18 ++++--- 3 files changed, 64 insertions(+), 53 deletions(-) ====== spufs-prio-in-ctx.diff ====== Subject: spufs: move prio to spu_context From: Christoph Hellwig It doesn't make any sense to have a priority field in the physical spu structure. Move it into the spu context instead. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spufs/context.c | 4 ++-- arch/powerpc/platforms/cell/spufs/sched.c | 6 +----- arch/powerpc/platforms/cell/spufs/spufs.h | 3 +++ arch/powerpc/xmon/xmon.c | 1 - include/asm-powerpc/spu.h | 1 - 5 files changed, 6 insertions(+), 9 deletions(-) ====== powerpc-fix-bugverbose.diff ====== Subject: powerpc: fix building without CONFIG_DEBUG_BUGVERBOSE From: Arnd Bergmann Signed-off-by: Arnd Bergmann Signed-off-by: Arnd Bergmann --- diffstat: xmon.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) ====== spufs-runqueue-simplification.diff ====== Subject: spufs: runqueue simplification From: Christoph Hellwig This is the biggest patch in this series, and it reworks the guts of the spu scheduler runqueue mechanism: - instead of embedding a waitqueue in the runqueue there is now a simple doubly-linked list, the actual wakeups happen by reusing the stop_wq in the spu context (maybe we should rename it one day) - spu_free and spu_prio_wakeup are merged into a single spu_reschedule function - various functionality is split out into small helpers, and kerneldoc comments are added in various places to document what's going on. - spu_activate is rewritten into a tight loop by removing test for various impossible conditions and using the infrastructure in this patch. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: sched.c | 159 +++++++++++++++++++++++++------------------- spufs.h | 1 2 files changed, 93 insertions(+), 67 deletions(-) ====== spufs-optimize-spu_run.diff ====== Subject: spufs: optimize spu_run From: Christoph Hellwig There is no need to directly wake up contexts in spu_activate when called from spu_run, so add a flag to surpress this wakeup. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: context.c | 4 ++-- file.c | 4 ++-- run.c | 4 ++-- sched.c | 10 ++++++---- spufs.h | 13 +++++++++++-- 5 files changed, 23 insertions(+), 12 deletions(-) ====== add-vm_insert_pfn.diff ====== Subject: add vm_insert_pfn() From: Benjamin Herrenschmidt From: Nick Piggin Add a vm_insert_pfn helper, so that ->fault handlers can have nopfn functionality by installing their own pte and returning NULL. Signed-off-by: Nick Piggin Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- include/linux/mm.h | 1 + mm/memory.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) --- diffstat: include/linux/mm.h | 1 mm/memory.c | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) ====== add-nopfn_refault-result-from-vm_ops-nopfn.diff ====== Subject: Add NOPFN_REFAULT result from vm_ops->nopfn() From: Benjamin Herrenschmidt Add a NOPFN_REFAULT return code for vm_ops->nopfn() equivalent to NOPAGE_REFAULT for vmops->nopage() indicating that the handler requests a re-execution of the faulting instruction Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- include/linux/mm.h | 1 + mm/memory.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) --- diffstat: include/linux/mm.h | 1 + mm/memory.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) ====== spufs-remove-need-for-struct-page-for-spes.diff ====== Subject: spufs: remove need for struct page for SPEs From: Benjamin Herrenschmidt This patch removes the need for struct page for SPE local store and registers from spufs. It also makes the locking much more obvious and no longer relying on the truncate logic black magic for protecting against races between unmap_mapping_range() and new pages faulted in. It does so by switching to a nopfn() handler and using the new vm_insert_pfn() to setup the PTEs itself while holding a lock on the SPE. The nice thing is that this patch actually removes a lot more code than it adds :-) Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- Kconfig | 2 --- diffstat: Kconfig | 2 platforms/cell/spu_priv1_mmio.c | 65 ---------- platforms/cell/spufs/file.c | 121 +++++++++----------- 3 files changed, 60 insertions(+), 128 deletions(-) ====== spufs-fix-bitrot-of-the-spu-mmap-facility.diff ====== Subject: spufs: Fix bitrot of the SPU mmap facility From: Benjamin Herrenschmidt It looks like we've had some serious bitrot there mostly due to tracking of address_space's of mmap'ed files getting out of sync with the actual mmap code. The mfc, mss and psmap were not tracked properly and thus not invalidated on context switches (oops !) Note that I kept the various file->f_mapping = inode->i_mapping; assignments that were done in the other open() routines though it's unclear to me wether those are really necessary as I think the generic open code already does that but then, I'm not that familiar with filesystem foo. Another improvement we might want to do is assign those to the varioux ctx-> fields at mmap time instead of file open/close time. I also added some smp_wmb's after assigning the ctx-> fields to make sure they are visible to other CPUs. I don't think this is really necessary as I suspect locking in the fs layer will make that happen anyway but better safe than sorry. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spufs/context.c | 12 ++++++++---- arch/powerpc/platforms/cell/spufs/file.c | 15 +++++++++++++++ arch/powerpc/platforms/cell/spufs/spufs.h | 2 ++ 3 files changed, 25 insertions(+), 4 deletions(-) --- diffstat: context.c | 12 ++++++++---- file.c | 15 +++++++++++++++ spufs.h | 2 ++ 3 files changed, 25 insertions(+), 4 deletions(-) ====== spu-sched-simplity-spu_remove_from_active_list.diff ====== Subject: spu sched: simplity spu_remove_from_active_list From: Christoph Hellwig If we call spu_remove_from_active_list that spu is always guaranteed to be on the active list and in runnable state, so we can simply do a list_del to remove it and unconditionally take the was_active codepath. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: sched.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) ====== spu-sched-update-some-comments.diff ====== Subject: spu sched: update some comments From: Christoph Hellwig Give spu_yield a kerneldoc comment and remove the old comment documenting spu_activate, spu_deactive and spu_yield as all of them now have descriptive kerneldoc comments of their own. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: sched.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) ====== spu-sched-forced-preemption-at-execution.diff ====== Subject: spu sched: forced preemption at execution From: Christoph Hellwig If we start a spu context with realtime priority we want it to run immediately and not wait until some other lower priority thread has finished. Try to find a suitable victim and use it's spu in this case. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: context.c | 1 sched.c | 74 ++++++++++++++++++++++++++++++++++++++++++ spufs.h | 1 3 files changed, 76 insertions(+) ====== spu-sched-use-declare_bitmap.diff ====== Subject: spu sched: use DECLARE_BITMAP From: Christoph Hellwig use DECLARE_BITMAP in the spu scheduler instead of reimplementing it. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: sched.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) ====== spu-sched-static-timeslicing-for-sched_rr-contexts.diff ====== Subject: spu sched: static timeslicing for SCHED_RR contexts From: Christoph Hellwig For SCHED_RR tasks we can do some really trivial timeslicing. Basically we fire up a time for every scheduler tick that searches for a higher or same priority thread that is on the runqueue and if there is one context switches to it. Because we can't lock spus from timer context we actually run this from a delayed runqueue instead of a timer. A nice optimization would be to skip the actual priority bitmap search when there are less contexts than physical spus available. To implement this I need a so far unpublished patch from Andre, and it will be added after we have that patch in. Note that right now we only do the time slicing for SCHED_RR tasks. The code would work for SCHED_OTHER tasks aswell, but their prio value is defered from the one the PPU thread has at time of spu_run, and using this for spu scheduling decisions would make the code very unfair. SCHED_OTHER support will be enabled once we the spu scheduler knows how to calculcate cpu_context.prio (very soon) Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: context.c | 2 + run.c | 9 ++++++-- sched.c | 43 +++++++++++++++++++++++++++++++++++++++++- spufs.h | 5 ++++ 4 files changed, 56 insertions(+), 3 deletions(-) ====== spufs-avoid-accessing-kernel-memory-through-mmapped-mem-node.diff ====== Subject: spufs: avoid accessing kernel memory through mmapped /mem node From: Masato Noguchi I found an exploit in current kernel. Currently, there is no range check about mmapping "/mem" node in spufs. Thus, an application can access privilege memory region. In case this kernel already worked on a public server, I send this information only here. If there are such servers in somewhere, please replace it, ASAP. Signed-off-by: Masato Noguchi Signed-off-by: Arnd Bergmann --- file.c | 4 ++++ 1 files changed, 4 insertions(+) [NOTICE] This is a security patch. Please handle it carefully. --- --- diffstat: file.c | 3 +++ 1 file changed, 3 insertions(+) ====== cell-ppu-oprofile-cleanup-patch-updated-patch.diff ====== Subject: CELL PPU Oprofile cleanup patch (updated patch) From: Carl Love This is a clean up patch that includes the following changes: -Some comments were added to clarify the code based on feedback from the community. -The write_pm_cntrl() and set_count_mode() were passed a structure element from a global variable. The argument was removed so the functions now just operate on the global directly. -The set_pm_event() function call in the cell_virtual_cntr() routine was moved to a for-loop before the for_each_cpu loop Signed-off-by: Carl Love Signed-off-by: Maynard Johnson Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/oprofile/op_model_cell.c | 104 ++++++++------ arch/powerpc/platforms/cell/pmu.c | 14 - include/asm-powerpc/cell-pmu.h | 15 -- 3 files changed, 73 insertions(+), 60 deletions(-) ====== pm_rtas_activat_signals-routine-cleanup.diff ====== Subject: pm_rtas_activat_signals routine cleanup From: Maynard Johnson The code was setting up the debug bus for group 21 when profiling on the event PPU CYCLES. The debug bus is not actually used by the hardware performance counters when counting PPU CYCLES. Setting up the debug bus for PPU CYCLES causes signal routing conflicts on the debug bus when profiling PPU cycles and another PPU event. This patch fixes the code to only setup the debug bus to route the performance signals for the non PPU CYCLE events. Signed-off-by: Maynard Johnson Signed-off-by: Carl Love Signed-off-by: Arnd Bergmann --- diffstat: op_model_cell.c | 51 ++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 17 deletions(-) ====== spufs-avoid-nowake.diff ====== Subject: avoid SPU_ACTIVATE_NOWAKE optimization From: Christoph Hellwig This optimization is still buggy, so back it out for now. Signed-off-by: Arnd Bergmann --- diffstat: run.c | 4 ++-- sched.c | 7 ++----- spufs.h | 6 ++---- 3 files changed, 6 insertions(+), 11 deletions(-) ====== spufs-mem-write-overflow.diff ====== Subject: spufs: fix possible memory corruption is spufs_mem_write From: Arnd Bergmann Due to a buggy unsigned comparison, it was possible to write beyond the end of the local store file in spufs under some circumstances. This rewrites the buggy function to look more like simple_copy_from_buffer. Signed-off-by: Arnd Bergmann Cc: Ulrich Weigand --- diffstat: file.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) ====== cell-defconfig-2.6.20.diff ====== Subject: update cell_defconfig From: Jens Osterkamp Signed-off-by: Arnd Bergmann --- --- diffstat: cell_defconfig | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) ====== ecell-config-sata.diff ====== Subject: Enable CONFIG_SATA_PROMISE in cell_defconfig From: Michael Ellerman Enable CONFIG_SATA_PROMISE in cell_defconfig. Signed-off-by: Michael Ellerman Signed-off-by: Arnd Bergmann --- diffstat: cell_defconfig | 53 ++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) ====== powerpc-fix-spu-slb-invalidations-2.diff ====== commit 94b2a4393c500a620de90c3266d595926302e26b Author: Benjamin Herrenschmidt Date: Sat Mar 10 00:05:37 2007 +0100 [POWERPC] Fix spu SLB invalidations The SPU code doesn't properly invalidate SPUs SLBs when necessary, for example when changing a segment size from the hugetlbfs code. In addition, it saves and restores the SLB content on context switches which makes it harder to properly handle those invalidations. This patch removes the saving & restoring for now, something more efficient might be found later on. It also adds a spu_flush_all_slbs(mm) that can be used by the core mm code to flush the SLBs of all SPEs that are running a given mm at the time of the flush. In order to do that, it adds a spinlock to the list of all SPEs and move some bits & pieces from spufs to spu_base.c Signed-off-by: Benjamin Herrenschmidt --- diffstat: arch/powerpc/mm/hash_utils_64.c | 6 arch/powerpc/mm/hugetlbpage.c | 4 arch/powerpc/platforms/cell/spu_base.c | 81 ++++++++-- arch/powerpc/platforms/cell/spufs/sched.c | 13 - arch/powerpc/platforms/cell/spufs/switch.c | 62 ------- include/asm-powerpc/spu.h | 7 include/asm-powerpc/spu_csa.h | 4 7 files changed, 91 insertions(+), 86 deletions(-) ====== spidernet-ipfrag-nfs.diff ====== Subject: spidernet: Fix problem sending IP fragments From: Norbert Eicker I found out that the spidernet-driver is unable to send fragmented IP frames. Let me just recall the basic structure of "normal" UDP/IP/Ethernet frames (that actually work): - It starts with the Ethernet header (dest MAC, src MAC, etc.) - The next part is occupied by the IP header (version info, length of packet, id=0, fragment offset=0, checksum, from / to address, etc.) - Then comes the UDP header (src / dest port, length, checksum) - Actual payload - Ethernet checksum Now what's different for IP fragment: - The IP header has id set to some value (same for all fragments), offset is set appropriately (i.e. 0 for first fragment, following according to size of other fragments), size is the length of the frame. - UDP header is unchanged. I.e. length is according to full UDP datagram, not just the part within the actual frame! But this is only true within the first frame: all following frames don't have a valid UDP-header at all. The spidernet silicon seems to be quite intelligent: It's able to compute (IP / UDP / Ethernet) checksums on the fly and tests if frames are conforming to RFC -- at least conforming to RFC on complete frames. But IP fragments are different as explained above: I.e. for IP fragments containing part of a UDP datagram it sees incompatible length in the headers for IP and UDP in the first frame and, thus, skips this frame. But the content *is* correct for IP fragments. For all following frames it finds (most probably) no valid UDP header at all. But this *is* also correct for IP fragments. The Linux IP-stack seems to be clever in this point. It expects the spidernet to calculate the checksum (since the module claims to be able to do so) and marks the skb's for "normal" frames accordingly (ip_summed set to CHECKSUM_HW). But for the IP fragments it does not expect the driver to be capable to handle the frames appropriately. Thus all checksums are allready computed. This is also flaged within the skb (ip_summed set to CHECKSUM_NONE). Unfortunately the spidernet driver ignores that hints. It tries to send the IP fragments of UDP datagrams as normal UDP/IP frames. Since they have different structure the silicon detects them the be not "well-formed" and skips them. The following one-liner against 2.6.21-rc2 changes this behavior. If the IP-stack claims to have done the checksumming, the driver should not try to checksum (and analyze) the frame but send it as is. Signed-off-by: Norbert Eicker Signed-off-by: Linas Vepstas Signed-off-by: Arnd Bergmann ---- --- diffstat: spider_net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== ipmi_si-check-devicetree-3.diff ====== Subject: ipmi: add suport for powerpc of_platform_driver From: Christian Krafft This patch adds support for of_platform_driver to the ipmi_si module. When loading the module, the driver will be registered to of_platform. The driver will be probed for all devices with the type ipmi. It's supporting devices with compatible settings ipmi-kcs, ipmi-smic and ipmi-bt. Only ipmi-kcs could be tested. Signed-off-by: Christian Krafft Acked-by: Heiko J Schick Signed-off-by: Corey Minyard Signed-off-by: Arnd Bergmann --- diffstat: ipmi_si_intf.c | 108 +++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) ====== ipmi_add_module_device_table.diff ====== Subject: ipmi: add module_device_table to ipmi_si From: Christian Krafft This patch adds MODULE_DEVICE_TABLE to ipmi_si. This way the module can be autoloaded by the kernel if a matching device is found. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: ipmi_si_intf.c | 2 ++ 1 file changed, 2 insertions(+) ====== spu-sched-tick-workqueue-is-rearming.diff ====== Subject: use cancel_rearming_delayed_workqueue when stopping spu contexts From: Christoph Hellwig The scheduler workqueue may rearm itself and deadlock when we try to stop it. Put a flag in place to avoid skip the work if we're tearing down the context. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 23 +++++++++++++++++++++-- spufs.h | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) ====== cbe_thermal-add-reg_to_temp.diff ====== Subject: cbe_thermal: clean up computation of temperature From: Christian Krafft This patch introduces a little function for transforming register values into temperature. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: cbe_thermal.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) ====== cbe_thermal-throttling-attributes.diff ====== Subject: cbe_thermal: add throttling attributes to cpu and spu nodes From: Christian Krafft This patch adds some attributes the cpu and spu nodes: /sys/devices/system/[c|s]pu/[c|s]pu*/thermal/throttle_begin /sys/devices/system/[c|s]pu/[c|s]pu*/thermal/throttle_end /sys/devices/system/[c|s]pu/[c|s]pu*/thermal/throttle_full_stop Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: cbe_thermal.c | 155 +++++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 1 deletion(-) ====== cell-add-node-to-cpu-4.diff ====== Subject: cell: add cbe_node_to_cpu function From: Christian Krafft This patch adds code to deal with conversion of logical cpu to cbe nodes. It removes code that assummed there were two logical CPUs per CBE. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/oprofile/op_model_cell.c | 1 arch/powerpc/platforms/cell/cbe_regs.c | 53 +++++++++---- arch/powerpc/platforms/cell/cbe_regs.h | 5 + include/asm-powerpc/cell-pmu.h | 5 - 4 files changed, 45 insertions(+), 19 deletions(-) ====== cbe_cpufreq-use-pmi-3.diff ====== Subject: cell: use pmi in cpufreq driver From: Christian Krafft The new PMI driver was added in order to support cpufreq on blades that require the frequency to be controlled by the service processor, so use it on those. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- --- diffstat: cbe_cpufreq.c | 81 +++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) ====== powerpc-add-of_remap.diff ====== Subject: powerpc: add of_iomap function From: Christian Krafft The of_iomap function maps memory for a given device_node and returns a pointer to that memory. This is used at some places, so it makes sense to a seperate function. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/sysdev/pmi.c | 19 ++----------------- include/asm-powerpc/prom.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 17 deletions(-) ====== cell-support-new-device-tree-layout.diff ====== Subject: cell: add support for proper device-tree From: Christian Krafft This patch adds support for a proper device-tree. A porper device-tree on cell contains be nodes for each CBE containg nodes for SPEs and all the other special devices on it. Ofcourse oldschool devicetree is still supported. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: cbe_regs.c | 121 ++++++++++++++++++++++++++++++----------- 1 file changed, 90 insertions(+), 31 deletions(-) ====== spufs-fix-ctx-lifetimes.diff ====== Subject: Clear mapping pointers after last close From: Christoph Hellwig Make sure the pointers to various mappings are cleared once the last user stopped using them. This avoids accessing freed memory when tearing down the gang directory aswell as optimizing away pte invalidations if no one uses these. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: context.c | 1 file.c | 153 +++++++++++++++++++++++++++++++++++++----- inode.c | 1 spufs.h | 2 4 files changed, 142 insertions(+), 15 deletions(-) ====== spufs-ensure-preempted-threads-are-on-the-runqueue.diff ====== Subject: spu sched: ensure preempted threads are put back on the runqueue From: Christoph Hellwig To not lose a spu thread we need to make sure it always gets put back on the runqueue. Signed-off-by: Christoph Hellwig Acked-by: Jeremy Kerr Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) ====== spufs-add-missing-wakeup-in-find_victim.diff ====== Subject: spu sched: ensure preempted threads are put back on the runqueue, part2 From: Christoph Hellwig To not lose a spu thread we need to make sure it always gets put back on the runqueue. In find_victim aswell as in the scheduler tick as done in the previous patch. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 6 ++++++ 1 file changed, 6 insertions(+) ====== spufs-use-barriers-for-set_bit.diff ====== Subject: spufs: add memory barriers after set_bit From: Arnd Bergmann set_bit does not guarantee ordering on powerpc, so using it for communication between threads requires explicit mb() calls. Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 3 +++ 1 file changed, 3 insertions(+) ====== spusched-remove-from-runqueue-early.diff ====== Subject: remove woken threads from the runqueue early From: Christoph Hellwig A single context should only be woken once, and we should not have more wakeups for a given priority than the number of contexts on that runqueue position. Also add some asserts to trap future problems in this area more easily. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: context.c | 2 + sched.c | 44 ++++++++++++++++-------------------------- 2 files changed, 19 insertions(+), 27 deletions(-) ====== spufs-always-release-mapping-lock.diff ====== Subject: fix missing unlock in spufs_signal1_release From: Christoph Hellwig Add a missing spin_unlock in spufs_signal1_release. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: file.c | 1 + 1 file changed, 1 insertion(+) ====== spu_base-move-spu-init-channel-out-of-spu-mutex.diff ====== Subject: spu_base: move spu_init_channels out of spu_mutex From: Christoph Hellwig There is no reason to execute spu_init_channels under spu_mutex - after the spu has been taken off the freelist it's ours. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- --- diffstat: spu_base.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) ====== cell-rtas-ptcal.diff ====== Subject: cell: enable RTAS-based PTCAL for Cell XDR memory From: Jeremy Kerr Enable Periodic Recalibration (PTCAL) support for Cell XDR memory, using the new ibm,cbe-start-ptcal and ibm,cbe-stop-ptcal RTAS calls. Tested on QS20 and QS21 (by Thomas Huth). It seems that SLOF has problems disabling, at least on QS20; this patch should only be used once these problems have been addressed. Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann -- Update: Updated with Michael's feedback, expanded comment. --- diffstat: ras.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) ====== axon-ram-2.diff ====== Subject: cell: driver for DDR2 memory on AXON From: Maxim Shchetynin Signed-off-by: Arnd Bergmann --- diffstat: Kconfig | 7 sysdev/Makefile | 1 sysdev/axonram.c | 498 +++++++++++++++++++++++++++++++++++ 3 files changed, 506 insertions(+) ====== axon-ram-block-config-fix.diff ====== Subject: axonram bugfix From: Jens Osterkamp unlink_gendisk is already called in del_gendisk, so we dont need it here. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann --- --- diffstat: axonram.c | 1 - 1 file changed, 1 deletion(-) ====== spufs-export-expand_stack.diff ====== Subject: spufs: export expand_stack From: Arnd Bergmann An SPU can create page faults on the stack, which we need to handle from a loadable module, so export the expand_stack function used for this. Signed-off-by: Arnd Bergmann --- diffstat: mmap.c | 1 + 1 file changed, 1 insertion(+) ====== spufs-pagefault-rework.diff ====== Subject: spufs: make spu page faults not block scheduling From: Arnd Bergmann Until now, we have always entered the spu page fault handler with a mutex for the spu context held. This has multiple bad side-effects: - it becomes impossible to suspend the context during page faults - if an spu program attempts to access its own mmio areas through DMA, we get an immediate livelock when the nopage function tries to acquire the same mutex This patch makes the page fault logic operate on a struct spu_context instead of a struct spu, and moves it from spu_base.c to a new file fault.c inside of spufs. We now also need to copy the dar and dsisr contents of the last fault into the saved context to have it accessible in case we schedule out the context before activating the page fault handler. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 103 ----- arch/powerpc/platforms/cell/spufs/Makefile | 1 arch/powerpc/platforms/cell/spufs/backing_ops.c | 6 arch/powerpc/platforms/cell/spufs/fault.c | 192 ++++++++++ arch/powerpc/platforms/cell/spufs/hw_ops.c | 9 arch/powerpc/platforms/cell/spufs/run.c | 28 - arch/powerpc/platforms/cell/spufs/spufs.h | 4 arch/powerpc/platforms/cell/spufs/switch.c | 8 include/asm-powerpc/mmu.h | 1 include/asm-powerpc/spu_csa.h | 1 10 files changed, 224 insertions(+), 129 deletions(-) ====== export-force-siginfo.diff ====== Subject: export force_sig_info From: Jeremy Kerr Export force_sig_info for use by modules. This is required to allow spufs to provide siginfo data for SPE-generated signals. Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann --- diffstat: signal.c | 1 + 1 file changed, 1 insertion(+) ====== spufs-provide-siginfo-for-SPE-faults.diff ====== Subject: spufs: provide siginfo for SPE faults From: Jeremy Kerr This change populates a siginfo struct for SPE application exceptions (ie, invalid DMAs and illegal instructions). Tested on an IBM Cell Blade. Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann --- diffstat: fault.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) ====== cell-be_info-2.diff ====== Subject: cell: add per BE structure with info about its SPUs From: Andre Detsch Addition of a spufs-global "be_info" array. Each entry contains information about one BE node, namelly: * list of spus (both free and busy spus are in this list); * list of free spus (replacing the static spu_list from spu_base.c) * number of spus; * number of reserved (non scheduleable) spus. SPE affinity implementation actually requires only access to one spu per BE node (since it implements its own pointer to walk through the other spus of the ring) and the number of scheduleable spus (n_spus - non_sched_spus) However having this more general structure can be useful for other functionalities, concentrating per-be statistics / data. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 26 ++++++---- arch/powerpc/platforms/cell/spufs/sched.c | 4 + include/asm-powerpc/spu.h | 10 +++ 3 files changed, 31 insertions(+), 9 deletions(-) ====== cell-spu_indexing-2.diff ====== Subject: cell: add vicinity information on spus From: Andre Detsch This patch adds affinity data to each spu instance. A doubly linked list is created, meant to connect the spus in the physical order they are placed in the BE. SPUs near to memory should be marked as having memory affinity. Adjustments of the fields acording to FW properties is done in separate patches, one for CPBW, one for Malta (patch for Malta under testing). Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 2 ++ include/asm-powerpc/spu.h | 3 +++ 2 files changed, 5 insertions(+) ====== cell-spu_indexing_QS20-2.diff ====== Subject: cell: add hardcoded spu vicinity information for QS20 From: Andre Detsch This patch allows the use of spu affinity on QS20, whose original FW does not provide affinity information. This is done through two hardcoded arrays, and by reading the reg property from each spu. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: spu_base.c | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) ====== spufs-affinity_create-4.diff ====== Subject: spufs: extension of spu_create to support affinity definition From: Andre Detsch This patch adds support for additional flags at spu_create, which relate to the establishment of affinity between contexts and contexts to memory. A fourth, optional, parameter is supported. This parameter represent a affinity neighbor of the context being created, and is used when defining SPU-SPU affinity. Affinity is represented as a doubly linked list of spu_contexts. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spu_syscalls.c | 17 + arch/powerpc/platforms/cell/spufs/context.c | 1 arch/powerpc/platforms/cell/spufs/gang.c | 4 arch/powerpc/platforms/cell/spufs/inode.c | 132 +++++++++- arch/powerpc/platforms/cell/spufs/spufs.h | 14 - arch/powerpc/platforms/cell/spufs/syscalls.c | 32 ++ include/asm-powerpc/spu.h | 8 include/linux/syscalls.h | 2 8 files changed, 194 insertions(+), 16 deletions(-) ====== spufs-affinity_placement-3.diff ====== Subject: cell: add placement computation for scheduling of affinity contexts From: Andre Detsch This patch provides the spu affinity placement logic for the spufs scheduler. Each time a gang is going to be scheduled, the placement of a reference context is defined. The placement of all other contexts with affinity from the gang is defined based on this reference context location and on a precomputed displacement offset. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: gang.c | 4 - sched.c | 134 ++++++++++++++++++++++++++++++++++++++++++++ spufs.h | 6 + 3 files changed, 143 insertions(+), 1 deletion(-) ====== spufs-affinity_schedulling-2.diff ====== Subject: spufs: integration of SPE affinity with the scheduller From: Andre Detsch This patch makes the scheduller honor affinity information for each context being scheduled. If the context has no affinity information, behaviour is unchanged. If there are affinity information, context is schedulled to be run on the exact spu recommended by the affinity placement algorithm. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- --- diffstat: spu_base.c | 19 +++++++++++++++++++ spufs/sched.c | 4 ++++ 2 files changed, 23 insertions(+) ====== cell-spu_indexing_FW_vicinity-1.diff ====== Subject: cell: indexing of SPUs based on firmware vicinity properties From: Andre Detsch This patch links spus according to their physical position using information provided by the firmware through a special vicinity device-tree property. This property is present in current version of Malta firmware. Example of vicinity properties for a node in Malta: Node: Vicinity property contains phandles of: spe@0 [ spe@100000 , mic-tm@50a000 ] spe@100000 [ spe@0 , spe@200000 ] spe@200000 [ spe@100000 , spe@300000 ] spe@300000 [ spe@200000 , bif0@512000 ] spe@80000 [ spe@180000 , mic-tm@50a000 ] spe@180000 [ spe@80000 , spe@280000 ] spe@280000 [ spe@180000 , spe@380000 ] spe@380000 [ spe@280000 , bif0@512000 ] Only spe@* have a vicinity property (e.g., bif0@512000 and mic-tm@50a000 do not have it). Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- diffstat: spu_base.c | 90 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) ====== spufs-affinity-respecting-numa-properties.diff ====== Subject: spufs: affinity now respecting numa properties From: Andre Detsch Placement of context with affinity honoring numa properties, the same way contexts without affinity already do. Signed-off-by: Andre Detsch Signed-off-by: Arnd Bergmann --- diffstat: sched.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) ====== re-cell-oprofile-spu-profiling-updated-patch-3.diff ====== Subject: Add support to OProfile for profiling Cell BE SPUs From: Maynard Johnson This patch updates the existing arch/powerpc/oprofile/op_model_cell.c to add in the SPU profiling capabilities. In addition, a 'cell' subdirectory was added to arch/powerpc/oprofile to hold Cell-specific SPU profiling code. Signed-off-by: Carl Love Signed-off-by: Maynard Johnson Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/configs/cell_defconfig | 3 arch/powerpc/kernel/time.c | 1 arch/powerpc/oprofile/Kconfig | 7 arch/powerpc/oprofile/Makefile | 3 arch/powerpc/oprofile/cell/pr_util.h | 90 + arch/powerpc/oprofile/cell/spu_profiler.c | 220 ++++ arch/powerpc/oprofile/cell/spu_task_sync.c | 487 +++++++++ arch/powerpc/oprofile/cell/vma_map.c | 279 +++++ arch/powerpc/oprofile/common.c | 49 arch/powerpc/oprofile/op_model_cell.c | 505 +++++++++- arch/powerpc/oprofile/op_model_power4.c | 11 arch/powerpc/oprofile/op_model_rs64.c | 10 arch/powerpc/platforms/cell/spufs/context.c | 20 arch/powerpc/platforms/cell/spufs/sched.c | 8 arch/powerpc/platforms/cell/spufs/spufs.h | 4 drivers/oprofile/buffer_sync.c | 1 drivers/oprofile/event_buffer.h | 20 drivers/oprofile/oprof.c | 26 include/asm-powerpc/oprofile_impl.h | 10 include/asm-powerpc/spu.h | 15 include/linux/dcookies.h | 1 include/linux/elf-em.h | 3 include/linux/oprofile.h | 38 kernel/hrtimer.c | 1 24 files changed, 1723 insertions(+), 89 deletions(-) ====== oprofile-spu-cleanup.diff ====== Subject: cleanup spu oprofile code From: Arnd Bergmann This cleans up some of the new oprofile code. It's mostly cosmetic changes, like way multi-line comments are formatted. The most significant change is a simplification of the context-switch record format. It does mean the oprofile report tool needs to be adapted, but I'm sure that it pays off in the end. Signed-off-by: Arnd Bergmann --- diffstat: cell/spu_task_sync.c | 89 ++++--------- op_model_cell.c | 204 +++++++++++++++++-------------- 2 files changed, 147 insertions(+), 146 deletions(-) ====== miscellaneous-fixes-for-spu-profiling-code.diff ====== Subject: Miscellaneous fixes for SPU profiling code From: Maynard Johnson After applying the "cleanup spu oprofile code" patch posted by Arnd Bergmann on Feb 26, 2007, I found a few issues that required fixing up: - Bug fix: Initialize retval in spu_task_sync.c, line 95, otherwise this function returns non-zero and OProfile fails. - Remove unused codes in include/linux/oprofile.h - Compile warnings: Initialize offset and spu_cookie at lines 283 and 284 in spu_task_sync.c. Additionally, in a separate email, Arnd pointed out a bug in spu_task_sync.c:process_context_switch, where we were ignoring invalid values in the dcookies returned from get_exec_dcookie_and_offset. This is fixed in this patch so that we now fail with ENOENT if either cookie is invalid. Signed-off-by: Maynard Johnson Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/oprofile/cell/spu_task_sync.c | 10 +++- include/linux/oprofile.h | 23 ++++------ 2 files changed, 17 insertions(+), 16 deletions(-) ====== re-add-support-to-oprofile-for-profiling-cell-be-spus-update-2.diff ====== Subject: Enable SPU switch notification to detect currently active SPU tasks. From: Maynard Johnson This patch adds to the capability of spu_switch_event_register so that the caller is also notified of currently active SPU tasks. It also exports spu_switch_event_register and spu_switch_event_unregister. Signed-off-by: Maynard Johnson Signed-off-by: Carl Love Signed-off-by: Arnd Bergmann --- diffstat: run.c | 16 ++++++++++++++-- sched.c | 30 ++++++++++++++++++++++++++++-- spufs.h | 2 ++ 3 files changed, 44 insertions(+), 4 deletions(-) ====== cell-oprofile-compile-fix.diff ====== Subject: Fix oprofile compilation From: Christoph Hellwig Fix compilation for CONFIG_OPROFILE=y CONFIG_OPROFILE_CELL=n on cell. Signed-off-by: Christoph Hellwig Signed-off-by: Arnd Bergmann --- diffstat: common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== this-is-a-hack-to-get_unmapped_area-to-make-the-spe-64k-code-work.diff ====== Subject: This is a hack to get_unmapped_area to make the SPE 64K code work. From: Benjamin Herrenschmidt (Though it might prove to not have nasty side effects ...) The basic idea is that if the filesystem's get_unmapped_area was used, we skip the hugepage check. That assumes that the only filesytems that provide a g_u_a callback are either hugetlbfs itself, or filesystems that have arch specific code that "knows" already not to collide with hugetlbfs. A proper fix will be done later, basically by removing the hugetlbfs hacks completely from get_unmapped_area and calling down to the mm and/or the filesytem g_u_a implementations for MAX_FIXED as well. (Note that this will still rely on the fact that filesytems that provide a g_u_a "know" how to return areas that don't collide with hugetlbfs, thus the base assumption is the same as this hack) Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann mm/mmap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) --- diffstat: mmap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) ====== powerpc-introduce-address-space-slices.diff ====== Subject: powerpc: Introduce address space "slices" From: Benjamin Herrenschmidt The basic issue is to be able to do what hugetlbfs does but with different page sizes for some other special filesystems, more specifically, my need is: - Huge pages - SPE local store mappings using 64K pages on a 4K base page size kernel on Cell - Some special 4K segments in 64K pages kernels for mapping a dodgy specie of powerpc specific infiniband hardware that requires 4K MMU mappings for various reasons I won't explain here. The main issues are: - To maintain/keep track of the page size per "segments" (as we can only have one page size per segment on powerpc, which are 256MB divisions of the address space). - To make sure special mappings stay within their alloted "segments" (including MAP_FIXED crap) - To make sure everybody else doesn't mmap/brk/grow_stack into a "segment" that is used for a special mapping Some of the necessary mecanisms to handle that were present in the hugetlbfs code, but mostly in ways not suitable for anything else. The patch address these in various ways described quickly below that hijack some of the existing hugetlbfs callbacks. The ideal solution requires some changes to the generic get_unmapped_area(), among others, to get rid of the hugetlbfs hacks in there, and instead, make sure that the fs and mm get_unmapped_area are also called for MAP_FIXED. We might also need to add an mm callback to validate a mapping. I intend to do those changes separately and then adapt this work to use them. So what is a slice ? Well, I re-used the mecanism used formerly by our hugetlbfs implementation which divides the address space in "meta-segments" which I called "slices". The division is done using 256MB slices below 4G, and 1T slices above. Thus the address space is divided currently into 16 "low" slices and 16 "high" slices. (Special case: high slice 0 is the area between 4G and 1T). Doing so simplifies significantly the tracking of segments and avoid having to keep track of all the 256MB segments in the address space. While I used the "concepts" of hugetlbfs, I mostly re-implemented everything in a more generic way and "ported" hugetlbfs to it. slices can have an associated page size, which is encoded in the mmu context and used by the SLB miss handler to set the segment sizes. The hash code currently doesn't care, it has a specific check for hugepages, though I might add a mecanism to provide per-slice hash mapping functions in the future. The slice code provide a pair of "generic" get_unmapped_area() (bottomup and topdown) functions that should work with any slice size. There is some trickyness here so I would appreciate people to have a look at the implementation of these and let me know if I got something wrong. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann arch/powerpc/Kconfig | 5 arch/powerpc/kernel/asm-offsets.c | 16 arch/powerpc/mm/Makefile | 1 arch/powerpc/mm/hash_utils_64.c | 124 +++--- arch/powerpc/mm/hugetlbpage.c | 528 --------------------------- arch/powerpc/mm/mmu_context_64.c | 10 arch/powerpc/mm/slb.c | 11 arch/powerpc/mm/slb_low.S | 54 +- arch/powerpc/mm/slice.c | 630 +++++++++++++++++++++++++++++++++ arch/powerpc/platforms/cell/spu_base.c | 9 include/asm-powerpc/mmu.h | 12 include/asm-powerpc/paca.h | 2 include/asm-powerpc/page_64.h | 87 ++-- 13 files changed, 827 insertions(+), 662 deletions(-) --- diffstat: arch/powerpc/Kconfig | 5 arch/powerpc/kernel/asm-offsets.c | 16 arch/powerpc/mm/Makefile | 1 arch/powerpc/mm/hash_utils_64.c | 124 +- arch/powerpc/mm/hugetlbpage.c | 528 ---------- arch/powerpc/mm/mmu_context_64.c | 10 arch/powerpc/mm/slb.c | 11 arch/powerpc/mm/slb_low.S | 54 - arch/powerpc/mm/slice.c | 630 +++++++++++++ arch/powerpc/platforms/cell/spu_base.c | 9 include/asm-powerpc/mmu.h | 12 include/asm-powerpc/paca.h | 2 include/asm-powerpc/page_64.h | 87 - 13 files changed, 827 insertions(+), 662 deletions(-) ====== powerpc-add-ability-to-4k-kernel-to-hash-in-64k-pages.diff ====== Subject: powerpc: Add ability to 4K kernel to hash in 64K pages From: Benjamin Herrenschmidt This patch adds the ability for a kernel compiled with 4K page size to have special slices containing 64K pages and hash the right type of hash PTEs. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann arch/powerpc/Kconfig | 6 ++++++ arch/powerpc/mm/hash_low_64.S | 5 ++++- arch/powerpc/mm/hash_utils_64.c | 36 +++++++++++++++++++++++------------- arch/powerpc/mm/tlb_64.c | 12 +++++++++--- include/asm-powerpc/pgtable-4k.h | 6 +++++- include/asm-powerpc/pgtable-64k.h | 7 ++++++- 6 files changed, 53 insertions(+), 19 deletions(-) --- diffstat: arch/powerpc/Kconfig | 6 +++ arch/powerpc/mm/hash_low_64.S | 5 ++ arch/powerpc/mm/hash_utils_64.c | 36 +++++++++++------- arch/powerpc/mm/tlb_64.c | 12 ++++-- include/asm-powerpc/pgtable-4k.h | 6 ++- include/asm-powerpc/pgtable-64k.h | 7 +++ 6 files changed, 53 insertions(+), 19 deletions(-) ====== powerpc-spufs-support-for-64k-ls-mappings-on-4k-kernels.diff ====== Subject: powerpc: spufs support for 64K LS mappings on 4K kernels From: Benjamin Herrenschmidt This patch adds an option to spufs when the kernel is configured for 4K page to give it the ability to use 64K pages for SPE local store mappings. Currently, we are optimistic and try order 4 allocations when creting contexts. If that fails, the code will fallback to 4K automatically. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann arch/powerpc/platforms/cell/Kconfig | 15 + arch/powerpc/platforms/cell/spufs/Makefile | 2 arch/powerpc/platforms/cell/spufs/context.c | 4 arch/powerpc/platforms/cell/spufs/file.c | 77 ++++++++-- arch/powerpc/platforms/cell/spufs/lscsa_alloc.c | 181 ++++++++++++++++++++++++ arch/powerpc/platforms/cell/spufs/switch.c | 28 +-- include/asm-powerpc/spu_csa.h | 10 + 7 files changed, 282 insertions(+), 35 deletions(-) --- diffstat: arch/powerpc/platforms/cell/Kconfig | 15 arch/powerpc/platforms/cell/spufs/Makefile | 2 arch/powerpc/platforms/cell/spufs/context.c | 4 arch/powerpc/platforms/cell/spufs/file.c | 79 +++- arch/powerpc/platforms/cell/spufs/lscsa_alloc.c | 181 ++++++++++ arch/powerpc/platforms/cell/spufs/switch.c | 28 - include/asm-powerpc/spu_csa.h | 10 7 files changed, 283 insertions(+), 36 deletions(-) ====== allow-spufs-to-build-as-a-module-with-slices-enabled.diff ====== Subject: Allow spufs to build as a module with slices enabled From: Michael Ellerman The slice code is missing some exports to allow spufs to build as a module. Add them. Signed-off-by: Michael Ellerman Signed-off-by: Arnd Bergmann --- MODPOST 209 modules WARNING: ".get_slice_psize" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined! WARNING: ".slice_get_unmapped_area" [arch/powerpc/platforms/cell/spufs/spufs.ko] undefined! --- arch/powerpc/mm/slice.c | 3 +++ 1 file changed, 3 insertions(+) --- diffstat: slice.c | 3 +++ 1 file changed, 3 insertions(+) ====== 64k-ls-mappings-fix.diff ====== Subject: fix ls store access with 64k mappings From: Benjamin Herrenschmidt This is also part of the latest patch posted to cbe-oss-dev. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- diffstat: hash_utils_64.c | 9 +++++++++ 1 file changed, 9 insertions(+) ====== ipv6-round-robin-stub.diff ====== Subject: Patch ported from LTC bugzilla report 31558 From: sri@us.ibm.com We saw similar stack traces with RHEL5 on zSeries(bug #28338) and iSeries(bug #29263). There definitely seems to be some bugs in the ipv6 fib insertion code. Redhat decided to work around this bug by disabling round-robin routing with ipv6 until the fib management code is fixed. The following patch does this. Acked-by: Linas Vepstas Signed-off-by: Arnd Bergmann ---- net/ipv6/route.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- diffstat: route.c | 10 ++++++++++ 1 file changed, 10 insertions(+) ====== mm-fix-alloc_bootmem-on-nodes-without-mem.diff ====== Subject: mm: enables booting a NUMA system where some nodes have no memory From: Christian Krafft When booting a NUMA system with nodes that have no memory (eg by limiting memory), bootmem_alloc_core tried to find pages in an uninitialized bootmem_map. This caused a null pointer access. This fix adds a check, so that NULL is returned. That will enable the caller (bootmem_alloc_nopanic) to alloc memory on other without a panic. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: bootmem.c | 4 ++++ 1 file changed, 4 insertions(+) ====== mm-fix-alloc_bootmem-call-after-bootmem-freed-2.diff ====== Subject: mm: fix call to alloc_bootmem after bootmem has been freed From: Christian Krafft In some cases it might happen, that alloc_bootmem is beeing called after bootmem pages have been freed. This is, because the condition SYSTEM_BOOTING is still true after bootmem has been freed. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- diffstat: page_alloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== early_pfn_in_nid-workaround-2.diff ====== Subject: early_pfn_in_nid() called when not early From: Arnd Bergmann After a lot of debugging in spufs, I found that a crash that we encountered on Cell actually was caused by a change in the memory management. The patch that caused it is archived in http://lkml.org/lkml/2006/11/1/43, and this one has been discussed back and forth, but I fear that the current version may be broken for all setups that do memory hotplug with sparsemen and NUMA, at least on powerpc. What happens exactly is that the spufs code tries to register the memory area owned by the SPU as hotplug memory in order to get page structs (we probably shouldn't do it that way, but that's a separate discussion). memmap_init_zone now calls early_pfn_valid() and early_pfn_in_nid() in order to determine if the page struct should be initialized. This is wrong for two reasons: - early_pfn_in_nid checks the early_node_map variable to determine to which node the hot plugged memory belongs. However, the new memory never was part of the early_node_map to start with, so it incorrectly returns node zero, and then fails to initialize the page struct if we were trying to add it to a nonzero node. This is probably not a problem for pseries, but it is for cell. - both early_pfn_{in,to}_nid and early_node_map are in the __init section and may already have been freed at the time we are calling memmap_init_zone(). The patch below is not a suggested fix that I want to get into mainline (checking slab_is_available is the wrong here), but it is a quick fix that you should apply if you want to run a recent (post-2.6.18) kernel on the IBM QS20 blade. I'm sorry for not having reported this earlier, but we were always trying to find the problem in my own code... Signed-off-by: Arnd Bergmann --- diffstat: page_alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) ====== systemsim-2.6.20-rc5.diff ====== Subject: cell: add support for the IBM full system simulator From: Eric Van Hensbergen taken from systemsim.git, from lots of authors Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann --- diffstat: Documentation/systemsim/maple.tcl | 1145 +++++++++++ Documentation/systemsim/systemsim.txt | 92 arch/powerpc/Kconfig | 28 arch/powerpc/configs/cbesim_defconfig | 868 ++++++++ arch/powerpc/configs/systemsim_defconfig | 1127 ++++++++++ arch/powerpc/kernel/Makefile | 1 arch/powerpc/kernel/idle_systemsim.c | 35 arch/powerpc/kernel/setup_64.c | 20 arch/powerpc/kernel/udbg.c | 3 arch/powerpc/platforms/cell/setup.c | 3 arch/powerpc/platforms/pseries/setup.c | 10 drivers/block/Kconfig | 7 drivers/block/Makefile | 2 drivers/block/systemsim_bd.c | 319 +++ drivers/char/Kconfig | 32 drivers/char/Makefile | 1 drivers/char/hvc_fss.c | 134 + drivers/net/Kconfig | 8 drivers/net/Makefile | 1 drivers/net/systemsim_net.c | 393 +++ include/asm-powerpc/machdep.h | 1 include/asm-powerpc/systemsim.h | 132 + include/asm-powerpc/udbg.h | 1 23 files changed, 4343 insertions(+), 20 deletions(-) ====== systemsim-defconfig-2.6.20.diff ====== Subject: cell: update defconfig for systemsim From: Jens Osterkamp Patch to enable system support in cell_defconfig. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann --- --- diffstat: cell_defconfig | 7 +++++++ 1 file changed, 7 insertions(+)