====== cell-ras-4.diff ====== Subject: cell: add RAS support rom: Benjamin Herrenschmidt This is a first version of support for the Cell BE "Reliability, Availability and Serviceability" features. It doesn't yet handle some of the RAS interrupts (the ones described in iic_is/iic_irr), I'm still working on a proper way to expose these. They are essentially a cascaded controller by themselves (sic !) though I may just handle them locally to the iic driver. I need also to sync with David Erb on the way he hooked in the performance monitor interrupt. So that's all for 2.6.17 and I'll do more work on that with my rework of the powerpc interrupt layer that I'm hacking on at the moment. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/configs/cell_defconfig | 1 arch/powerpc/kernel/head_64.S | 29 ++ arch/powerpc/kernel/prom.c | 44 ++++ arch/powerpc/platforms/cell/Kconfig | 4 arch/powerpc/platforms/cell/Makefile | 3 arch/powerpc/platforms/cell/cbe_regs.c | 128 +++++++++++ arch/powerpc/platforms/cell/cbe_regs.h | 129 ++++++++++++ arch/powerpc/platforms/cell/interrupt.c | 37 --- arch/powerpc/platforms/cell/pervasive.c | 104 +-------- arch/powerpc/platforms/cell/pervasive.h | 37 --- arch/powerpc/platforms/cell/ras.c | 112 ++++++++++ arch/powerpc/platforms/cell/ras.h | 9 arch/powerpc/platforms/cell/setup.c | 10 include/asm-powerpc/prom.h | 3 include/asm-powerpc/reg.h | 2 15 files changed, 506 insertions(+), 146 deletions(-) ====== cell-iic-cleanup.diff ====== Subject: cell: fix interrupt priority handling Checking the priority field to test for irq validity is completely bogus and breaks with future external interrupt controllers. Signed-off-by: Arnd Bergmann --- --- diffstat: interrupt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) ====== defconfig-update.diff ====== Subject: cell: update defconfig Enable some of the most requested features in defconfig and refresh with the latest powerpc.git Kconfig files. Signed-off-by: Arnd Bergmann --- --- diffstat: cell_defconfig | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) ====== spufs-register-sysdev.diff ====== Subject: cell: register SPUs as sysdevs From: Jeremy Kerr SPUs are registered as system devices, exposing attributes through sysfs. Since the sysdev includes a kref, we can remove the one in struct spu (it isn't used at the moment anyway). Currently only the interrupt source and numa node attributes are added. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 54 +++++++++++++ include/asm-powerpc/spu.h | 5 - 2 files changed, 57 insertions(+), 2 deletions(-) ====== spu-base-no-module-2.diff ====== Subject: cell: always build spu base into the kernel The spu_base module is rather deeply intermixed with the core kernel, so it makes sense to have that built-in. This will let us extend the base in the future without having to export more core symbols just for it. Signed-off-by: Arnd Bergmann --- diffstat: Makefile | 6 +----- spufs/Makefile | 4 +++- spufs/switch.c | 4 ++++ 3 files changed, 8 insertions(+), 6 deletions(-) ====== mss-map.diff ====== Subject: spufs: restore mapping of mssync register A recent change to the way that the mfc file gets mapped made it impossible to map the SPE Multi-Source Synchronization register into user space, but that may be needed by some applications. This restores the missing functionality. Signed-off-by: Arnd Bergmann --- --- diffstat: file.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) ====== spufs-rmdir-3.diff ====== Subject: Fix deadlock in spu_create error path From: Michael Ellerman spufs_rmdir tries to acquire the spufs root i_mutex, which is already held by spufs_create_thread. This was tracked as Bug #H9512. Signed-off-by: Arnd Bergmann --- --- diffstat: inode.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) ====== spufs-64-k-fix.diff ====== Subject: spufs: set up correct SLB entries for 64k pages spufs currently knows only 4k pages and 16M hugetlb pages. Make it use the regular methods for deciding on the SLB bits. Signed-off-by: Arnd Bergmann --- --- diffstat: spu_base.c | 11 ++++++++--- spufs/switch.c | 14 ++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) ====== spufs-phys-id.diff ====== Subject: spufs: add a phys-id attribute to each SPU context For performance analysis, it is often interesting to know which physical SPE a thread is currently running on, and, more importantly, if it is running at all. This patch adds a simple attribute to each SPU directory with that information. The attribute is read-only and called 'phys-id'. It contains an ascii string with the number of the physical SPU (e.g. "0x5"), or alternatively the string "0xffffffff" (32 bit -1) when it is not running at all at the time that the file is read. Signed-off-by: Arnd Bergmann --- --- diffstat: file.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) ====== spufs-initial-wbox-stat.diff ====== Subject: spufs: fix initial state of wbox file The wbox channel count of an spu is now initialized to four for the saved context. This makes it possible to write to the mailbox right away without waiting for the SPE to become scheduled first. Signed-off-by: Arnd Bergmann --- --- diffstat: switch.c | 1 + 1 file changed, 1 insertion(+) ====== spufs-kzalloc.diff ====== Subject: spufs: use kzalloc in create_spu From: Jeremy Kerr Clean up create_spu() a little by using kzalloc instead of kmalloc + assignments. Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spu_base.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) --- diffstat: spu_base.c | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) ====== spufs-channel-1-count.diff ====== Subject: spufs: don't try to access SPE channel 1 count The save/restore sequence for SPE contexts currently attempts to save and restore the channel count for SPE channel 1 (the SPU_WriteEventMask channel. But the CBE architecture (section 9.11.2) clearly states that this channel does not have an associated count. Hardware simply ignores the attempt to write this count, but the simulator generates a warning message. WARNING: 279721590: SPE7: Attempt to write channel count for CH 1 with no associated count is ignored. Signed-off-by: Arnd Bergmann --- diffstat: switch.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) ====== spufs-fix-remove-stop_code-member-of-struct-spu.diff ====== Subject: spufs: remove stop_code from struct spu From: Masato Noguchi This patch remove 'stop_code' -- discarded member of struct spu. It is written at initialize and interrupt, but never read in current implementation. Signed-off-by: Masato Noguchi Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spu_base.c | 2 -- arch/powerpc/platforms/cell/spufs/switch.c | 1 - include/asm-powerpc/spu.h | 1 - 3 files changed, 4 deletions(-) --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 2 -- arch/powerpc/platforms/cell/spufs/switch.c | 1 - include/asm-powerpc/spu.h | 1 - 3 files changed, 4 deletions(-) ====== spufs-fix-clean-_dump.h.diff ====== Subject: spufs: fix Makefile for "make clean" From: Masato Noguchi added spu_{save,restore}_dump.h to target of 'make clean' Signed-off-by: Masato Noguchi Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spufs/Makefile | 1 + 1 files changed, 1 insertion(+) --- diffstat: Makefile | 1 + 1 file changed, 1 insertion(+) ====== spufs-fix-class2-clear-stat-before-wakeup.diff ====== Subject: spufs: clear class2 interrupt status before wakeup From: Masato Noguchi SPU interrupt status must be cleared before handle it. Otherwise, kernel may drop some interrupt packet. Currently, class2 interrupt treated like: 1) call callback to wake up waiting process 2) mask raised mailbox interrupt 3) clear interrupt status I changed like: 1) mask raised mailbox interrupt 2) clear interrupt status 3) call callback to wake up waiting process Clearing status before masking will make spurious interrupt. Thus, it is necessary to hold by steps I described above, I think. Signed-off-by: Masato Noguchi Signed-off-by: Arnd Bergmann --- diffstat: spu_base.c | 78 +++++++++-------------------------------- 1 file changed, 19 insertions(+), 59 deletions(-) ====== spufs-check-flags.diff ====== Subject: spufs: fail spu_create with invalid flags At this time, all flags are invalid. Since we are planning to actually add valid flags in the future, we better check if any were passed by the user. Signed-off-by: Arnd Bergmann --- diffstat: inode.c | 4 ++++ 1 file changed, 4 insertions(+) ====== spufs-64k-csa.diff ====== Subject: spufs: one more fix for 64k pages The SPU context save/restore code is currently built for a 4k page size and we provide a _shipped version of it since most people don't have the spu toolchain that is needed to rebuild that code. This patch hardcodes the data structures to a 64k page alignment, which also guarantees 4k alignment but unfortunately wastes 60k of memory per SPU context that is created in the running system. We will follow up on this with another patch to reduce that overhead or maybe redo the context save/restore logic to do this part entirely different, but for now it should make experimental systems work with either page size. Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spufs/Makefile | 9 arch/powerpc/platforms/cell/spufs/spu_restore_dump.h_shipped | 1122 +++++++--- arch/powerpc/platforms/cell/spufs/spu_save_dump.h_shipped | 922 ++++++-- include/asm-powerpc/spu_csa.h | 13 4 files changed, 1651 insertions(+), 415 deletions(-) ====== spufs-map-guarded.diff ====== Subject: spufs: map mmio space as guarded into user space From: Benjamin Herrenschmidt This fixes a bug where we don't properly map SPE MMIO space as guarded, causing various test cases to fail, probably due to write combining and other niceties caused by the lack of the G bit. Signed-off-by: Benjamin Herrenschmidt --- diffstat: file.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) ====== spufs-dma-status.diff ====== Subject: spufs: fix MFC command queue purge From: Benjamin Herrenschmidt In the context save/restore code, the SPU MFC command queue purge code has a bug: static inline void wait_purge_complete(struct spu_state *csa, struct spu *spu) { struct spu_priv2 __iomem *priv2 = spu->priv2; /* Save, Step 28: * Poll MFC_CNTL[Ps] until value '11' is * read * (purge complete). */ POLL_WHILE_FALSE(in_be64(&priv2->mfc_control_RW) & MFC_CNTL_PURGE_DMA_COMPLETE); } This will exit as soon as _one_ of the 2 bits that compose MFC_CNTL_PURGE_DMA_COMPLETE is set, and one of them happens to be "purge in progress"... which means that we'll happily continue restoring the MFC while it's being purged at the same time. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Arnd Bergmann --- diffstat: switch.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) ====== spufs-fix-hotplug.diff ====== Subject: spufs: fix memory hotplug dependency From: Geoff Levand spufs_base.c calls __add_pages, which depends on CONFIG_MEMORY_HOTPLUG. Moved the selection of CONFIG_MEMORY_HOTPLUG from CONFIG_SPUFS_MMAP to CONFIG_SPU_FS. Signed-off-by: Geoff Levand --- diffstat: Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== hvc-console-fast.diff ====== Subject: powerpc: Make rtas console _much_ faster From: Michael Ellerman Currently the hvc_rtas driver is painfully slow to use. Our "benchmark" is ls -R /etc, which spits out about 27866 characters. The theoretical maximum speed would be about 2.2 seconds, the current code takes ~50 seconds. The core of the problem is that sometimes when the tty layer asks us to push characters the firmware isn't able to handle some or all of them, and so returns an error. The current code sees this and just returns to the tty code with the buffer half sent. There's the khvcd thread which will eventually wake up and try to push more characters, that will usually work because the firmware's had time to push the characters out. But the thread only wakes up every 10 milliseconds, which isn't fast enough. There's already code in the hvc_console driver to make the khvcd thread do a "quick" loop, where it just calls yield() instead of sleeping. The only code that triggered that behaviour was recently removed though, which I don't quite understand. Still, if we set HVC_POLL_QUICK whenever the push hvc_push() doesn't push all characters (ie. RTAS blocks), we can get good performance out of the hvc_rtas backend. With this patch the "benchmark" takes ~2.8 seconds. I'll test this on P5 LPAR, is there anyone else that uses hvc_console? Thoughts? Cc: Ryan Arnold Signed-off-by: Michael Ellerman Signed-off-by: Arnd Bergmann --- drivers/char/hvc_console.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- diffstat: hvc_console.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== spufs-ctx-kzalloc.diff ====== Subject: cell: use kzalloc in alloc_spu_context() From: Jeremy Kerr Use kzalloc when allocating a new spu context, rather than kmalloc + zeroing. Booted & tested on cell. Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann --- arch/powerpc/platforms/cell/spufs/context.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) --- diffstat: context.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) ====== defconfig-tun.diff ====== Subject: enable TUN in cell_defconfig So we can run systemsim on the blade. Signed-off-by: Arnd Bergmann --- diffstat: cell_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== spidernet-tx-queue-rework.diff ====== Subject: spidernet: rework tx queue handling From: Maxim Shchetynin With this patch TX queue descriptors are not chained per default any more. The pointer to next descriptor is set only when next descriptor is prepaired for transfer. Also the mechanism of checking wether Spider is ready has been changed: it checks not for CARDOWNED flag in status of previous descriptor but for a TXDMAENABLED flag in Spider's register. Signed-off-by: Maxim Shchetynin Signed-off-by: Arnd Bergmann --- diffstat: spider_net.c | 578 +++++++++++++++++---------------------- spider_net.h | 73 +--- 2 files changed, 274 insertions(+), 377 deletions(-) ====== spidernet-rxramfull-fix.diff ====== Subject: spidernet: bug fix for init code From: Jens Osterkamp We want to intitialize addr instead of data register first. Signed-off-by: Jens Osterkamp Signed-off-by: Arnd Bergmann --- diffstat: spider_net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== powerpc-disable-fe.diff ====== Subject: powerpc: disable floating point exceptions for init Floating point exceptions should not be enabled by default, as this setting impacts the performance on some CPUs, in particular the Cell BE. glibc sets this up correctly per thread in its fesetenv function, so user space should not be impacted by this setting. Signed-off-by: Arnd Bergmann --- --- diffstat: processor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ====== spufs-fixme.diff ====== Subject: spufs: add a FIXME SetPageReserved should probably not be called on vmalloc memory. Need to investigate further. Signed-off-by: Arnd Bergmann --- --- diffstat: switch.c | 1 + 1 file changed, 1 insertion(+) ====== spufs-sched-numa-2.diff ====== Subject: [PROTOTYPE] spufs scheduler support for NUMA. From: Mark Nutter This patch adds NUMA support to the the spufs scheduler. The new arch/powerpc/platforms/cell/spufs/sched.c is greatly simplified, in an attempt to reduce complexity while adding support for NUMA scheduler domains. SPUs are allocated starting from the calling thread's node, moving to others as supported by current->cpus_allowed. Preemption is gone as it was buggy, but should be re-enabled in another patch when stable. The new arch/powerpc/platforms/cell/spu_base.c maintains idle lists on a per-node basis, and allows caller to specify which node(s) an SPU should be allocated from, while passing -1 tells spu_alloc() that any node is allowed. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 51 - arch/powerpc/platforms/cell/spufs/sched.c | 438 +++------- include/asm-powerpc/spu.h | 1 3 files changed, 195 insertions(+), 295 deletions(-) ====== spufs-fix-context-switch-during-fault.diff ====== Subject: spufs: fix context switch during page fault From: HyeonSeung Jang For better explanation, I break down the page fault handling into steps: 1) There is a page fault caused by DMA operation initiated by SPU and DMA is suspended. 2) The interrupt handler 'spu_irq_class_1()/__spu_trap_data_map()' is called and it just wakes up the sleeping spe-manager thread. 3) by PPE scheduler, the corresponding bottom half, spu_irq_class_1_bottom() is called in process context and DMA is restarted. There can be a quite large time gap between 2) and 3) and I found the following problem: Between 2) and 3) If the context becomes unbound, 3) is not executed because when the spe-manager thread is awaken, the context is already saved. (This situation can happen, for example, when a high priority spe thread newly started in that time gap) But the actual problem is that the corresponding SPU context does not work even if it is bound again to a SPU. Besides I can see the following warning in mambo simulator when the context becomes unbound(in save_mfc_cmd()), i.e. when unbind() is called for the context after step 2) before 3) : 'WARNING: 61392752237: SPE2: MFC_CMD_QUEUE channel count of 15 is inconsistent with number of available DMA queue entries of 16' After I go through available documents, I found that the problem is because the suspended DMA is not restarted when it is bound again. Signed-off-by: Arnd Bergmann --- diffstat: switch.c | 9 +++++++++ 1 file changed, 9 insertions(+) ====== cell-defconfigs-oprofile.diff ====== Subject: powerpc: enable oprofile for cell From: David Erb change defconfig so we build with oprofile by default. Signed-off-by: Arnd Bergmann --- diffstat: cell_defconfig | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) ====== cell-perfmon.diff ====== Subject: Performance Monitor support for Cell From: David Erb This provides basic performance monitor functions for Cell Signed-off-by: Arnd Bergmann --- diffstat: kernel/head_64.S | 4 platforms/cell/Kconfig | 8 platforms/cell/Makefile | 2 platforms/cell/cbe_regs.c | 25 +- platforms/cell/cbe_regs.h | 259 +++++++++++++++++++--- platforms/cell/interrupt.c | 67 +++++ platforms/cell/interrupt.h | 4 platforms/cell/perfmon.c | 294 +++++++++++++++++++++++++ platforms/cell/perfmon.h | 57 ++++ platforms/cell/pervasive.c | 6 10 files changed, 685 insertions(+), 41 deletions(-) ====== cell-oprofile.diff ====== Subject: oprofile support for Cell From: David Erb This provides oprofile functions for Cell Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/kernel/cputable.c | 3 arch/powerpc/oprofile/op_model_cell.c | 463 ++++++++++++++ include/asm-powerpc/cputable.h | 1 3 files changed, 467 insertions(+) ====== cell-oprofile-2.6.16.diff ====== Subject: oprofile support for Cell From: David Erb This provides oprofile functions for Cell (linux-2.6.16) TODO: fix code to allow Cell and other PowerPC to be built together Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/kernel/pmc.c | 14 ++++++++++++++ arch/powerpc/oprofile/Makefile | 1 + arch/powerpc/oprofile/common.c | 8 ++++++++ include/asm-powerpc/oprofile_impl.h | 1 + 4 files changed, 24 insertions(+) ====== cell-perfmon-fix.diff ====== Subject: cell: Oprofile sample counter fix From: Carl Love There is a stop ship issue with Oprofile not collecting enough samples. I have a fix for this. I have done some limited testing, it works fine on my machine. I am being pressured to get you this fix sooner then I would like. I don't even have time to give you a proper patch file. Fortunately, the fix is a single line. Signed-off-by: Arnd Bergmann --- diffstat: perfmon.c | 2 ++ 1 file changed, 2 insertions(+) ====== cell-perfmon-more-fixes.diff ====== Subject: make oprofile on cell take more samples From: David Erb Oprofile does not take enough samples - dozens instead of thousands Signed-off-by: Arnd Bergmann --- diffstat: perfmon.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) ====== cell-perfmon-cleanup.diff ====== Subject: small cleanup for cell perfmon support From: David Erb The cell perfmon patch was disabling some code when compiling for cell, which was wrong in case of buiding a combined kernel image. This reverts that change. Signed-off-by: Arnd Bergmann --- diffstat: head_64.S | 4 ---- 1 file changed, 4 deletions(-) ====== cell-oprofile-disable.diff ====== Subject: cell: temporarily disable oprofile events From: David Erb When the firmware changed this week, it caused a fatal error that needs to be investigated. Temporarily disable events completely. Signed-off-by: Arnd Bergmann --- This patch looks really fishy. We need to investigate what exactly happens before the release! Arnd <>< --- diffstat: op_model_cell.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) ====== spufs-correct-dma-exceptions.diff ====== Subject: spufs: fix class0 interrupt assignment The class zero interrupt handling for spus was confusing alignment and error interrupts, so swap them. Signed-off-by: Arnd Bergmann --- diffstat: spu_base.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) ====== spufs-dma-events-2.diff ====== Subject: implement error event delivery to user space This tries to fix spufs so we have an interface closer to what is specified in the man page for events returned in the third argument of spu_run. Fortunately, libspe has never been using the returned contents of that register, as they were the same as the return code of spu_run (duh!). Signed-off-by: Arnd Bergmann --- diffstat: run.c | 28 +++++++++++++++------------- syscalls.c | 7 +++++-- 2 files changed, 20 insertions(+), 15 deletions(-) ====== systemsim-base.diff ====== Subject: powerpc: basic systemsim support Add some support and doc files for the IBM Full System Simulator and a configuration option that acts as a control for the patches based on this one. No code is changed in this patch, but it is required for the systemsim network, block, hvc_console and cpu_idle patches that are based on the infrastructure in here. From: Eric Van Hensbergen Signed-off-by: Arnd Bergmann --- --- diffstat: Documentation/systemsim/maple.tcl | 95 ++++++++++ Documentation/systemsim/systemsim.txt | 92 +++++++++ arch/powerpc/Kconfig | 13 + include/asm-powerpc/systemsim.h | 132 ++++++++++++++ 4 files changed, 332 insertions(+) ====== systemsim-block.diff ====== Subject: powerpc: systemsim block device driver The block device driver for systemsim is currently required for running on the Cell systemsim port, which does not simulate any other block devices. From: Eric Van Hensbergen Signed-off-by: Arnd Bergmann --- --- diffstat: Kconfig | 7 Makefile | 2 systemsim_bd.c | 285 +++++++++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+), 1 deletion(-) ====== systemsim-bd-fixup.diff ====== Subject: systemsim: don't load systemsim_bd when running on real HW If we don't do this, we crash during bootup Signed-off-by: Arnd Bergmann --- --- diffstat: systemsim_bd.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) ====== systemsim-net.diff ====== Subject: powerpc: systemsim network driver This adds a simple network driver for virtual networking on the IBM Full System Simulator. From: Eric Van Hensbergen Signed-off-by: Arnd Bergmann --- --- diffstat: Kconfig | 8 Makefile | 1 systemsim_net.c | 390 ++++++++++++++++++++++++++++++++++++ 3 files changed, 399 insertions(+) ====== systemsim-defconfig.diff ====== Subject: powerpc: add systemsim_defconfig This default configuration is supposed to work with both the powerpc970 as well as the cell systemsim. From: Eric Van Hensbergen Signed-off-by: Arnd Bergmann --- --- diffstat: systemsim_defconfig | 1191 ++++++++++++++++++++++++++++++++ 1 file changed, 1191 insertions(+) ====== hvc-console-fss-2.diff ====== Subject: powerpc: Add a hvc backend for systemsim The IBM full system simulator for PowerPC has its own set of calls used for console interaction, when not simulating actual serial port hardware. This is needed to run the simulator for Cell and can also be used for the PowerPC 970 simulator. It also adds the generic asm/systemsim.h header file that is also used by other device drivers for the system simulator, i.e. the block and network drivers. Signed-off-by: "Ryan S. Arnold" Signed-off-by: Arnd Bergmann --- --- diffstat: Kconfig | 8 +++ Makefile | 1 hvc_fss.c | 109 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) ====== cell-hvc-fss-detection.diff ====== Subject: Don't use hvc_fss if hvc_rtas is available The latest version of Systemsim does come with HVC_RTAS support enabled. Use that one instead, since it brings us one step closer to using no special device drivers for systemsim. Signed-off-by: Arnd Bergmann --- diffstat: hvc_fss.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) ====== cell-cross-build-2.diff ====== Subject: cell: allow building with broken cross-compiler From: "David J. Erb" The currently recommended cross tool chain for cell needs an extra argument to be passed in order to build the kernel correctly. Signed-off-by: Arnd Bergmann --- diffstat: Makefile | 1 + 1 file changed, 1 insertion(+) ====== cbesim-defconfig-3.diff ====== Subject: [FYI] cell: systemsim defconfig This is an update to the default configuration from an earlier binary release on http://bsc.es/. Since the other systemsim patches are still under discussion, this is provided on a purely informational basis. Signed-off-by: Arnd Bergmann --- --- diffstat: cbesim_defconfig | 868 +++++++++++++++++++++++++++++++++++ 1 file changed, 868 insertions(+) ====== systemsim-cell-detect.diff ====== Subject: cell: correctly detect systemsim host Systemsim uses a different compatible property in the device tree. Signed-off-by: Christian Krafft Signed-off-by: Arnd Bergmann --- --- diffstat: setup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) ====== 64k-page-exports.diff ====== Subject: powerpc: export symbols for page size selection We need access to some symbols in powerpc memory management from spufs in order to create proper SLB entries. Signed-off-by: Arnd Bergmann --- --- diffstat: hash_utils_64.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) ====== dd2-performance.diff ====== Subject: [FYI] Performance hacks for broken Cell CPU revisions The currently used CPUs of the Cell BE DD2.0 release have a few glitches that may result in bad performance, these workarounds are suggested in the Errata: - When a decrementer or external exception occurs, wake up the other SMT thread from pause(0) state. - When a system reset exception occurs (i.e. the CPU wakes up from pause(0) state), do a quick check if we were meant to wake up, otherwise go back to pause(0) state. - change the default floating point exception mode to zero. It is rather unlikely that we find a way to create a patch that won't be harmful to any other platform, so this is definitely not meant for inclusion in the mainline kernel, but only provided for those people that build a special kernel for Cell BE DD2.0. From: Jens Osterkamp Signed-off-by: Arnd Bergmann --- --- diffstat: kernel/head_64.S | 44 +++++++++++++++++++++++++++++ platforms/cell/Kconfig | 10 ++++++ 2 files changed, 54 insertions(+) ====== dd2-hack-runlatch-hack.diff ====== Subject: cell: fix dd2-performance.diff Change our DD2 hack for the new runlatch handling. Signed-off-by: Arnd Bergmann --- --- diffstat: head_64.S | 1 - 1 file changed, 1 deletion(-) ====== pci-fixup-hack.diff ====== Subject: small hacks for running on BPA hardware, v3 This patch is not meant for inclusion in a generic kernel, but is currently needed to support the available HW. Most of the things done in here are workarounds for deficiencies in the present hardware or firmware that will be solved there in later releases. Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/Makefile | 3 arch/powerpc/platforms/cell/pci.c | 82 +++++++++++++ arch/powerpc/platforms/cell/setup.c | 2 arch/powerpc/platforms/cell/spu_base.c | 4 include/linux/pci_ids.h | 2 5 files changed, 92 insertions(+), 1 deletion(-) ====== parm-fixup.diff ====== Subject: [FYI] cell: hack around broken firmware command line Some firmware versions on cell don't allow setting the kernel command line via nvram and the firmware user interface to set it is not officially supported. If we encounter the broken command line, we change it to the values that we expect to be correct and warn the user that they should upgrade the firmware. This patch is not for inclusion in an official kernel but only provided for information purposes. Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/setup.c | 31 ++++++++++++++++ drivers/ide/pci/aec62xx.c | 8 ++-- 2 files changed, 35 insertions(+), 4 deletions(-) ====== 64-k-page-cell-3.diff ====== Subject: cell: fake mmu_psize array to enable 64k pages Firmware currently does not have the right properties for enabling 64k pages, so just claim we have them anyway. Obviously, this patch must not get merged, instead the firmware will have to fix their device tree. Similarly, the firmware does not set up HID6 correctly and we need some more changes to have that done for secondary CPUs. Signed-off-by: Arnd Bergmann --- --- diffstat: kernel/cpu_setup_power4.S | 25 ++++++++++++++++++--- mm/hash_utils_64.c | 30 ++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) ====== spufs-smm-hid.diff ====== Subject: [FYI/RFC] cell: setting up SMM_HID It turns out that the page sizes for an SPE are not controlled by HID6 but rather by SMM_HID in the hypervisor register space (priv1) of each SPE. Unfortunately, the firmware does not set these up so far (even the one that does set up HID6), so we have to do it ourselves. This is not the real solution, since we cannot simply hardcode this when the firmware might change. Need some discussion with the firmware developers about this. Cc: Hartmut Penner Signed-off-by: Arnd Bergmann --- --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 5 ++++- arch/powerpc/platforms/cell/spu_priv1_mmio.c | 9 +++++++++ include/asm-powerpc/spu_priv1.h | 7 +++++++ 3 files changed, 20 insertions(+), 1 deletion(-) ====== fix-null-pgsz-get-pointer.diff ====== Subject: [ibm-linux-cell] [PATCH] cell: fix null smm_pgsz_get pointer When booting the current cell tree, I get a page fault on 0x0, due to spu_priv1_ops->smm_pgsz_set being NULL. This sets adds the omitted assignment. Booted on cell (DD2). Signed-off-by: Jeremy Kerr Signed-off-by: Arnd Bergmann arch/powerpc/platforms/cell/spu_priv1_mmio.c | 1 + 1 file changed, 1 insertion(+) --- diffstat: spu_priv1_mmio.c | 1 + 1 file changed, 1 insertion(+) ====== ib-max_rbc_rrs.diff ====== Subject: backport an infiniband fix From: Erez Cohen Add control of PCIX max read byte count and PCI Express max read request size parameters. This is due to the fact that some chipsets may not work or may not work optimally with the default parametrs. logic as follows: If the user sets a valid value to a paramter this value wins. Otherwise the value read from the device is compared to the default value defined by the spec. If value read does not equal default it is assumed the BIOS configured it and the BIOS value is retained. Signed-off-by: Arnd Bergmann --- diffstat: mthca_main.c | 67 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) ====== cell-ras-2.diff ====== Subject: Cell: add register access based on SPU device_nodes Signed-off-by: Christian Krafft --- diffstat: cbe_regs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) ====== cell-ras-3.diff ====== Subject: Cell: add MIC register access to RAS Signed-off-by: Christian Krafft --- diffstat: cbe_regs.c | 5 ++++- cbe_regs.h | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) ====== spu-add-attributes.diff ====== Subject: Cell: add additional properties to spu struct In order to add sysfs attributes to all spu's, there is a need for a list of all available spu's. Adding the device_node makes also sense, as it is needed for proper register access. Signed-off-by: Christian Krafft --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 33 +++++++++++++ include/asm-powerpc/spu.h | 3 + 2 files changed, 36 insertions(+) ====== cell-thermal-support.diff ====== Subject: Cell: add temperature to SPU sysfs entries Signed-off-by: Christian Krafft --- diffstat: arch/powerpc/platforms/cell/Kconfig | 5 arch/powerpc/platforms/cell/Makefile | 2 arch/powerpc/platforms/cell/cbe_regs.c | 1 arch/powerpc/platforms/cell/thermal.c | 73 +++++++++++++ include/asm-powerpc/spu.h | 2 5 files changed, 83 insertions(+) ====== thermal-defconfig.diff ====== Subject: Cell: add thermal support to default config Signed-off-by: Christian Krafft --- diffstat: cell_defconfig | 3 +++ 1 file changed, 3 insertions(+) ====== prom-extern-function.diff ====== Subject: externalize a function and a map of cpumasks, both needed by upcomming cpufreq driver Signed-off-by: Christian Krafft --- diffstat: arch/powerpc/kernel/prom.c | 2 +- arch/powerpc/kernel/smp.c | 1 + include/asm-powerpc/prom.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) ====== cell-thermal-ppe.diff ====== Subject: Cell: add support for the two additional temperature sensors The temperature can be read from /sys/devices/system/cpu/cpuX/temperatureX. The file temperature0 is belonging to the sensor near the linear thermal diode on the PPE, temperature1 is the other sensor. Signed-off-by: Christian Krafft --- diffstat: arch/powerpc/kernel/sysfs.c | 31 ++++++ arch/powerpc/platforms/cell/thermal.c | 64 +++++++++++++- include/linux/cpu.h | 4 3 files changed, 96 insertions(+), 3 deletions(-) ====== cpufreq-cell.diff ====== Subject: Cell: add cpufreq driver for Cell BE processor Signed-off-by: Christian Krafft --- diffstat: Kconfig | 9 + Makefile | 1 cbe_cpufreq.c | 263 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 273 insertions(+) ====== cpufreq-defconfig.diff ====== Subject: Cell: add cpufreq driver to the default config file Signed-off-by: Christian Krafft --- diffstat: cell_defconfig | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) ====== powerpc-pcibus_to_node.diff ====== --- diffstat: topology.h | 5 +++++ 1 file changed, 5 insertions(+) ====== powerpc-nodeaware-dma_alloc.diff ====== --- diffstat: arch/powerpc/kernel/iommu.c | 14 ++++++++------ arch/powerpc/kernel/pci_iommu.c | 3 ++- arch/powerpc/kernel/vio.c | 2 +- include/asm-powerpc/iommu.h | 3 ++- 4 files changed, 13 insertions(+), 9 deletions(-) ====== nodeaware-netdev.diff ====== Subject: Node-aware netdevice allocation Adds alloca_netdev_node & friends to allocate a struct netdevice on a given NUMA node. Note: needs benchmarking to prove a gain. Signed-off-by: Christoph Hellwig --- diffstat: include/linux/etherdevice.h | 1 + include/linux/netdevice.h | 3 +++ net/core/dev.c | 14 +++++++++++--- net/ethernet/eth.c | 24 ++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 3 deletions(-) ====== nodeaware-skb_alloc.diff ====== Subject: node-aware skb allocation Note: needs benchmarking to prove a gain. Note2: Needs to API rework before upstream submission Signed-off-by: Christoph Hellwig --- diffstat: include/linux/skbuff.h | 19 ++++++++++++------- net/core/skbuff.c | 9 ++++++--- 2 files changed, 18 insertions(+), 10 deletions(-) ====== nodeaware-spidernet.diff ====== Subject: use node-aware netdev allocation in spidernet Signed-off-by: Christoph Hellwig --- diffstat: spider_net.c | 10 ++++++---- spider_net.h | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) ====== spufs-event-addon.diff ====== --- diffstat: arch/powerpc/platforms/cell/spu_base.c | 6 +- arch/powerpc/platforms/cell/spufs/inode.c | 9 ++- arch/powerpc/platforms/cell/spufs/run.c | 24 +++++++++- arch/powerpc/platforms/cell/spufs/sched.c | 4 - arch/powerpc/platforms/cell/spufs/spufs.h | 4 + include/asm-powerpc/spu.h | 14 +++++ 6 files changed, 50 insertions(+), 11 deletions(-) ====== spufs-gang-2.diff ====== Subject: spufs: Add infrastructure needed for gang scheduling Add the concept of a gang to spufs as a new type of object. So far, this has no impact whatsover on scheduling, but makes it possible to add that later. A new type of object in spufs is now a spu_gang. It is created with the spu_create system call with the flags argument set to SPU_CREATE_GANG (0x80000000). Inside of a spu_gang, it is then possible to create spu_context objects, which until now was only possible at the root of spufs. There is a new member in struct spu_context pointing to the spu_gang it belongs to, if any. The spu_gang maintains a list of spu_context structures that are its children. This information can then be used in the scheduler in the future. There is still a bug that needs to be resolved in this basic infrastructure regarding the order in which objects are removed. When the spu_gang file descriptor is closed before the spu_context descriptors, we leak the dentry and inode for the gang. Any ideas how to cleanly solve this are appreciated. Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/platforms/cell/spufs/Makefile | 2 arch/powerpc/platforms/cell/spufs/context.c | 6 arch/powerpc/platforms/cell/spufs/gang.c | 81 +++ arch/powerpc/platforms/cell/spufs/inode.c | 227 ++++++++-- arch/powerpc/platforms/cell/spufs/spufs.h | 24 - arch/powerpc/platforms/cell/spufs/syscalls.c | 2 include/asm-powerpc/spu.h | 5 7 files changed, 304 insertions(+), 43 deletions(-) ====== spufs-oprofile.diff ====== Subject: spufs: add infrastructure to support spu profiling In order for oprofile to find the location in an spu-elf binary where an event counter triggered, we need a way to identify the binary in the first place. Unfortunately, that binary itself can be embedded in a powerpc ELF binary. Since we can assume it is mapped into the effective address space of the running process, have that one write the pointer value into a new spufs file. When a context switch occurs, pass the user value to the profiler so that can look at the mapped file (with some care). Signed-off-by: Arnd Bergmann --- diffstat: arch/powerpc/platforms/cell/spufs/file.c | 16 +++++++ arch/powerpc/platforms/cell/spufs/sched.c | 22 ++++++++++ arch/powerpc/platforms/cell/spufs/spufs.h | 1 include/asm-powerpc/spu.h | 18 ++++++++ 4 files changed, 57 insertions(+)