* Re: [PATCH v2] powerpc: move include files to arch/powerpc/include/asm
From: Stephen Rothwell @ 2008-08-03 15:00 UTC (permalink / raw)
To: paulus; +Cc: ppc-dev, Roland Dreier, LKML, general
In-Reply-To: <20080801152030.ff10b6b2.sfr@canb.auug.org.au>
[-- Attachment #1: Type: text/plain, Size: 361 bytes --]
On Fri, 1 Aug 2008 15:20:30 +1000 Stephen Rothwell <sfr@canb.auug.org.au> wrote:
>
> This patch can be applied with "git am" - the full patch is way to bug
^^^
Freudian slip :-)
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply
* Re: [PATCH v2] powerpc: move include files to arch/powerpc/include/asm
From: Stephen Rothwell @ 2008-08-03 15:02 UTC (permalink / raw)
To: Kumar Gala; +Cc: ppc-dev, Roland Dreier, Paul Mackerras, LKML, general
In-Reply-To: <A5259752-468C-4CBA-BEF3-4E088ED1A5B9@kernel.crashing.org>
[-- Attachment #1: Type: text/plain, Size: 570 bytes --]
On Sun, 3 Aug 2008 09:58:14 -0500 Kumar Gala <galak@kernel.crashing.org> wrote:
>
> Paul, what's the plan for this change? If this is something that will
> go in so can we get a tree with it so we can base other patches on it
> (like the PPC_MERGE cleanup)?
It looks like Linus is happy to take these patches, so if Paul is game he
could just shove it in powerpc-{next,master,merge} and ask Linus to pull
it. The sooner the better in that case.
--
Cheers,
Stephen Rothwell sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply
* to schedule() or not to schedule() ?
From: Kevin Diggs @ 2008-08-03 18:33 UTC (permalink / raw)
To: linuxppc-dev
Hi,
I have the following near the top of my cpufreq driver target routine:
while(test_and_set_bit(cf750gxmCfgChangeBit,&cf750gxvStateBits)) {
/*
* Someone mucking with our cfg? (I hope it is ok to call
* schedule() here! - truth is I have no idea what I am doing
* ... my reasoning is I want to yeild the cpu so whoever is
* mucking around can finish)
*/
schedule();
}
This is to prevent bad things from happening if someone is trying to
change a parameter for the driver via sysfs while the target routine is
running. Fortunately, because I had a bug where this bit was not getting
cleared on one of the paths through the target routine ... I now know it
is not safe to call schedule (it got stuck in there - knocked out my adb
keyboard! - (I think target is called from a timer that the governor
sets up ... interrupt context?)).
How does one very briefly yield the cpu in this context?
kevin
^ permalink raw reply
* Re: nfsd, v4: oops in find_acceptable_alias, ppc32 Linux, post-2.6.27-rc1
From: Neil Brown @ 2008-08-04 4:08 UTC (permalink / raw)
To: Paul Collins; +Cc: J. Bruce Fields, linuxppc-dev, nfsv4, linux-kernel
In-Reply-To: <87r696l1yo.fsf@burly.wgtn.ondioline.org>
On Monday August 4, paul@burly.ondioline.org wrote:
> Neil Brown <neilb@suse.de> writes:
> >
> > What filesystem is being exported here?
>
> Boring old ext3 (on LVM, on dm-crypt).
Good. That makes it easier.
>
> > Can you get an assembly version of exportfs_decode_fh, so we can check
> > what is happening at 0xa8 (and 0x4c).
>
Thanks.
bctrl appears to be the indirect-function-call opcode. There are
three of them one each for
->fh_to_dentry
acceptable
->fh_to_parent
0xa8 is 'acceptable'.
In the first traceback, the crash was a call from very early in
find_acceptable_alias, The first significant thing it does is call
the 'acceptable' function.
So it seems clear that 'acceptable' is NULL.
It is equally clear that we never ever set it to NULL in the code.
The logical conclusion is "compiler error".
We can confirm (hopefully) by looking at a disassembly of fh_verify.
Maybe because nfsd_acceptable is 'static' and never explicitly called,
gcc gets confused and optimises it away. Maybe a disassembly of
nfsd_acceptable would be informative ... particularly if it turns out
to be empty.
Could you try removing the 'static' declaration for nfsd_acceptable
and recompile?
Or maybe try a different compiler?
Thanks,
NeilBrown
^ permalink raw reply
* [git pull] Please pull powerpc.git merge branch
From: Paul Mackerras @ 2008-08-04 4:49 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linuxppc-dev, akpm, linux-kernel
Linus,
Please pull from the 'merge' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc.git merge
The main thing there is that we have moved the powerpc include files
from include/asm-powerpc to arch/powerpc/include/asm. There is also a
commit from Kumar Gala that removes code that was only referenced when
compiling with ARCH=ppc, and is now dead since arch/ppc is gone, plus
a couple of warning fixes from Tony Breeds.
(Note that the stuff in arch/powerpc/include/asm/irq.h all came from
include/asm-powerpc/irq.h; there was enough stuff removed by Kumar's
patch that the git rename detection logic didn't see it as a rename.)
Thanks,
Paul.
Documentation/powerpc/booting-without-of.txt | 4 +-
Documentation/powerpc/eeh-pci-error-recovery.txt | 2 +-
arch/powerpc/Kconfig.debug | 2 +-
arch/powerpc/boot/io.h | 2 +-
.../powerpc/include/asm}/8253pit.h | 0
.../powerpc/include/asm}/8xx_immap.h | 0
.../powerpc/include/asm}/Kbuild | 0
.../powerpc/include/asm}/a.out.h | 0
.../powerpc/include/asm}/abs_addr.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/agp.h | 0
.../powerpc/include/asm}/asm-compat.h | 0
.../powerpc/include/asm}/atomic.h | 0
.../powerpc/include/asm}/auxvec.h | 0
.../powerpc/include/asm}/backlight.h | 0
.../powerpc/include/asm}/bitops.h | 0
.../powerpc/include/asm}/bootx.h | 0
.../powerpc/include/asm}/btext.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/bug.h | 0
.../powerpc/include/asm}/bugs.h | 0
.../powerpc/include/asm}/byteorder.h | 0
.../powerpc/include/asm}/cache.h | 0
.../powerpc/include/asm}/cacheflush.h | 0
.../powerpc/include/asm}/cell-pmu.h | 0
.../powerpc/include/asm}/cell-regs.h | 0
.../powerpc/include/asm}/checksum.h | 0
.../powerpc/include/asm}/clk_interface.h | 0
.../powerpc/include/asm}/code-patching.h | 0
.../powerpc/include/asm}/compat.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/cpm.h | 0
.../powerpc/include/asm}/cpm1.h | 0
.../powerpc/include/asm}/cpm2.h | 0
.../powerpc/include/asm}/cputable.h | 0
.../powerpc/include/asm}/cputhreads.h | 0
.../powerpc/include/asm}/cputime.h | 0
.../powerpc/include/asm}/current.h | 0
.../powerpc/include/asm}/dbdma.h | 0
.../powerpc/include/asm}/dcr-generic.h | 0
.../powerpc/include/asm}/dcr-mmio.h | 0
.../powerpc/include/asm}/dcr-native.h | 0
.../powerpc/include/asm}/dcr-regs.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/dcr.h | 6 +-
.../powerpc/include/asm}/delay.h | 0
.../powerpc/include/asm}/device.h | 0
.../powerpc/include/asm}/div64.h | 0
.../powerpc/include/asm}/dma-mapping.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/dma.h | 0
.../powerpc/include/asm}/edac.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/eeh.h | 0
.../powerpc/include/asm}/eeh_event.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/elf.h | 0
.../powerpc/include/asm}/emergency-restart.h | 0
.../powerpc/include/asm}/errno.h | 0
.../powerpc/include/asm}/exception.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/fb.h | 0
.../powerpc/include/asm}/fcntl.h | 0
.../powerpc/include/asm}/feature-fixups.h | 0
.../powerpc/include/asm}/firmware.h | 0
.../powerpc/include/asm}/fixmap.h | 0
.../powerpc/include/asm}/floppy.h | 0
.../powerpc/include/asm}/fs_pd.h | 0
.../powerpc/include/asm}/fsl_gtm.h | 0
.../powerpc/include/asm}/fsl_lbc.h | 0
.../powerpc/include/asm}/ftrace.h | 0
.../powerpc/include/asm}/futex.h | 0
.../powerpc/include/asm}/gpio.h | 0
.../powerpc/include/asm}/grackle.h | 0
.../powerpc/include/asm}/hardirq.h | 0
.../powerpc/include/asm}/heathrow.h | 0
.../powerpc/include/asm}/highmem.h | 0
.../powerpc/include/asm}/hugetlb.h | 0
.../powerpc/include/asm}/hvcall.h | 0
.../powerpc/include/asm}/hvconsole.h | 0
.../powerpc/include/asm}/hvcserver.h | 0
.../powerpc/include/asm}/hw_irq.h | 0
.../powerpc/include/asm}/hydra.h | 0
.../powerpc/include/asm}/i8259.h | 5 -
.../powerpc/include/asm}/ibmebus.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/ide.h | 0
.../powerpc/include/asm}/immap_86xx.h | 0
.../powerpc/include/asm}/immap_cpm2.h | 0
.../powerpc/include/asm}/immap_qe.h | 2 -
.../powerpc/include/asm}/io-defs.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/io.h | 0
.../powerpc/include/asm}/ioctl.h | 0
.../powerpc/include/asm}/ioctls.h | 0
.../powerpc/include/asm}/iommu.h | 0
.../powerpc/include/asm}/ipcbuf.h | 0
.../powerpc/include/asm}/ipic.h | 9 -
arch/powerpc/include/asm/irq.h | 366 +++++++++++
.../powerpc/include/asm}/irq_regs.h | 0
.../powerpc/include/asm}/irqflags.h | 4 +-
.../powerpc/include/asm}/iseries/alpaca.h | 0
.../powerpc/include/asm}/iseries/hv_call.h | 0
.../powerpc/include/asm}/iseries/hv_call_event.h | 0
.../powerpc/include/asm}/iseries/hv_call_sc.h | 0
.../powerpc/include/asm}/iseries/hv_call_xm.h | 0
.../powerpc/include/asm}/iseries/hv_lp_config.h | 0
.../powerpc/include/asm}/iseries/hv_lp_event.h | 0
.../powerpc/include/asm}/iseries/hv_types.h | 0
.../powerpc/include/asm}/iseries/iommu.h | 0
.../powerpc/include/asm}/iseries/it_lp_queue.h | 0
.../powerpc/include/asm}/iseries/lpar_map.h | 0
.../powerpc/include/asm}/iseries/mf.h | 0
.../powerpc/include/asm}/iseries/vio.h | 0
.../powerpc/include/asm}/kdebug.h | 0
.../powerpc/include/asm}/kdump.h | 0
.../powerpc/include/asm}/kexec.h | 0
.../powerpc/include/asm}/keylargo.h | 0
.../powerpc/include/asm}/kgdb.h | 2 -
.../powerpc/include/asm}/kmap_types.h | 0
.../powerpc/include/asm}/kprobes.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/kvm.h | 0
.../powerpc/include/asm}/kvm_asm.h | 0
.../powerpc/include/asm}/kvm_host.h | 0
.../powerpc/include/asm}/kvm_para.h | 0
.../powerpc/include/asm}/kvm_ppc.h | 0
.../powerpc/include/asm}/libata-portmap.h | 0
.../powerpc/include/asm}/linkage.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/lmb.h | 0
.../powerpc/include/asm}/local.h | 0
.../powerpc/include/asm}/lppaca.h | 0
.../powerpc/include/asm}/lv1call.h | 0
.../powerpc/include/asm}/machdep.h | 0
.../powerpc/include/asm}/macio.h | 0
.../powerpc/include/asm}/mc146818rtc.h | 0
.../powerpc/include/asm}/mediabay.h | 0
.../powerpc/include/asm}/mman.h | 0
.../powerpc/include/asm}/mmu-40x.h | 0
.../powerpc/include/asm}/mmu-44x.h | 0
.../powerpc/include/asm}/mmu-8xx.h | 0
.../powerpc/include/asm}/mmu-fsl-booke.h | 0
.../powerpc/include/asm}/mmu-hash32.h | 0
.../powerpc/include/asm}/mmu-hash64.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/mmu.h | 0
.../powerpc/include/asm}/mmu_context.h | 0
.../powerpc/include/asm}/mmzone.h | 0
.../powerpc/include/asm}/module.h | 0
.../powerpc/include/asm}/mpc512x.h | 0
.../powerpc/include/asm}/mpc52xx.h | 0
.../powerpc/include/asm}/mpc52xx_psc.h | 0
.../powerpc/include/asm}/mpc6xx.h | 0
.../powerpc/include/asm}/mpc8260.h | 0
.../powerpc/include/asm}/mpc86xx.h | 0
.../powerpc/include/asm}/mpc8xx.h | 0
.../powerpc/include/asm}/mpic.h | 0
.../powerpc/include/asm}/msgbuf.h | 0
.../powerpc/include/asm}/mutex.h | 0
.../powerpc/include/asm}/nvram.h | 0
.../powerpc/include/asm}/of_device.h | 0
.../powerpc/include/asm}/of_platform.h | 0
.../powerpc/include/asm}/ohare.h | 0
.../powerpc/include/asm}/oprofile_impl.h | 0
.../powerpc/include/asm}/pSeries_reconfig.h | 0
.../powerpc/include/asm}/paca.h | 2 -
.../powerpc/include/asm}/page.h | 0
.../powerpc/include/asm}/page_32.h | 0
.../powerpc/include/asm}/page_64.h | 0
.../powerpc/include/asm}/param.h | 0
.../powerpc/include/asm}/parport.h | 0
.../powerpc/include/asm}/pasemi_dma.h | 0
.../powerpc/include/asm}/pci-bridge.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/pci.h | 0
.../powerpc/include/asm}/percpu.h | 0
.../powerpc/include/asm}/pgalloc-32.h | 0
.../powerpc/include/asm}/pgalloc-64.h | 0
.../powerpc/include/asm}/pgalloc.h | 0
.../powerpc/include/asm}/pgtable-4k.h | 0
.../powerpc/include/asm}/pgtable-64k.h | 0
.../powerpc/include/asm}/pgtable-ppc32.h | 0
.../powerpc/include/asm}/pgtable-ppc64.h | 2 +-
.../powerpc/include/asm}/pgtable.h | 0
.../powerpc/include/asm}/phyp_dump.h | 0
.../powerpc/include/asm}/pmac_feature.h | 0
.../powerpc/include/asm}/pmac_low_i2c.h | 0
.../powerpc/include/asm}/pmac_pfunc.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/pmc.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/pmi.h | 0
.../powerpc/include/asm}/poll.h | 0
.../powerpc/include/asm}/posix_types.h | 0
.../powerpc/include/asm}/ppc-pci.h | 0
.../powerpc/include/asm}/ppc4xx.h | 0
.../powerpc/include/asm}/ppc_asm.h | 0
.../powerpc/include/asm}/processor.h | 0
.../powerpc/include/asm}/prom.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/ps3.h | 0
.../powerpc/include/asm}/ps3av.h | 0
.../powerpc/include/asm}/ps3fb.h | 0
.../powerpc/include/asm}/ps3stor.h | 0
.../powerpc/include/asm}/ptrace.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/qe.h | 0
.../powerpc/include/asm}/qe_ic.h | 2 -
.../asm-powerpc => arch/powerpc/include/asm}/reg.h | 0
.../powerpc/include/asm}/reg_8xx.h | 0
.../powerpc/include/asm}/reg_booke.h | 0
.../powerpc/include/asm}/reg_fsl_emb.h | 0
.../powerpc/include/asm}/resource.h | 0
.../powerpc/include/asm}/rheap.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/rio.h | 0
.../powerpc/include/asm}/rtas.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/rtc.h | 0
.../powerpc/include/asm}/rwsem.h | 4 +-
.../powerpc/include/asm}/scatterlist.h | 0
.../powerpc/include/asm}/seccomp.h | 0
.../powerpc/include/asm}/sections.h | 0
.../powerpc/include/asm}/sembuf.h | 0
.../powerpc/include/asm}/serial.h | 0
.../powerpc/include/asm}/setjmp.h | 0
.../powerpc/include/asm}/setup.h | 0
.../powerpc/include/asm}/shmbuf.h | 0
.../powerpc/include/asm}/shmparam.h | 0
.../powerpc/include/asm}/sigcontext.h | 0
.../powerpc/include/asm}/siginfo.h | 0
.../powerpc/include/asm}/signal.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/smp.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/smu.h | 0
.../powerpc/include/asm}/socket.h | 0
.../powerpc/include/asm}/sockios.h | 0
.../powerpc/include/asm}/sparsemem.h | 0
.../powerpc/include/asm}/spinlock.h | 0
.../powerpc/include/asm}/spinlock_types.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/spu.h | 0
.../powerpc/include/asm}/spu_csa.h | 0
.../powerpc/include/asm}/spu_info.h | 0
.../powerpc/include/asm}/spu_priv1.h | 0
.../powerpc/include/asm}/sstep.h | 0
.../powerpc/include/asm}/stat.h | 0
.../powerpc/include/asm}/statfs.h | 0
.../powerpc/include/asm}/string.h | 0
.../powerpc/include/asm}/suspend.h | 0
.../powerpc/include/asm}/synch.h | 0
.../powerpc/include/asm}/syscall.h | 0
.../powerpc/include/asm}/syscalls.h | 0
.../powerpc/include/asm}/systbl.h | 0
.../powerpc/include/asm}/system.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/tce.h | 0
.../powerpc/include/asm}/termbits.h | 0
.../powerpc/include/asm}/termios.h | 0
.../powerpc/include/asm}/thread_info.h | 0
.../powerpc/include/asm}/time.h | 0
.../powerpc/include/asm}/timex.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/tlb.h | 0
.../powerpc/include/asm}/tlbflush.h | 0
.../powerpc/include/asm}/topology.h | 0
.../powerpc/include/asm}/tsi108.h | 0
.../powerpc/include/asm}/tsi108_irq.h | 0
.../powerpc/include/asm}/tsi108_pci.h | 0
.../powerpc/include/asm}/types.h | 0
.../powerpc/include/asm}/uaccess.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/ucc.h | 0
.../powerpc/include/asm}/ucc_fast.h | 2 -
.../powerpc/include/asm}/ucc_slow.h | 0
.../powerpc/include/asm}/ucontext.h | 0
.../powerpc/include/asm}/udbg.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/uic.h | 2 -
.../powerpc/include/asm}/unaligned.h | 0
.../powerpc/include/asm}/uninorth.h | 0
.../powerpc/include/asm}/unistd.h | 0
.../powerpc/include/asm}/user.h | 0
.../powerpc/include/asm}/vdso.h | 0
.../powerpc/include/asm}/vdso_datapage.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/vga.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/vio.h | 0
.../powerpc/include/asm}/xilinx_intc.h | 0
.../powerpc/include/asm}/xmon.h | 0
.../asm-powerpc => arch/powerpc/include/asm}/xor.h | 0
arch/powerpc/kernel/Makefile | 14 -
arch/powerpc/kernel/cpu_setup_44x.S | 6 -
arch/powerpc/kernel/irq.c | 25 +-
arch/powerpc/kernel/process.c | 2 -
arch/powerpc/kernel/vdso.c | 2 -
arch/powerpc/lib/Makefile | 2 -
arch/powerpc/mm/mem.c | 2 +-
arch/powerpc/mm/ppc_mmu_32.c | 4 +-
arch/powerpc/mm/tlb_64.c | 2 +-
arch/powerpc/platforms/52xx/Makefile | 4 +-
arch/powerpc/platforms/86xx/mpc86xx_smp.c | 2 +-
arch/powerpc/platforms/Makefile | 6 -
arch/powerpc/platforms/powermac/Makefile | 3 +-
arch/powerpc/sysdev/Makefile | 2 -
drivers/char/hvc_console.h | 2 +-
drivers/char/hvcs.c | 2 +-
drivers/infiniband/hw/ehca/ehca_reqs.c | 2 +-
include/asm-powerpc/irq.h | 654 --------------------
283 files changed, 388 insertions(+), 766 deletions(-)
rename {include/asm-powerpc => arch/powerpc/include/asm}/8253pit.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/8xx_immap.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/Kbuild (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/a.out.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/abs_addr.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/agp.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/asm-compat.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/atomic.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/auxvec.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/backlight.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/bitops.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/bootx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/btext.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/bug.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/bugs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/byteorder.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cache.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cacheflush.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cell-pmu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cell-regs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/checksum.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/clk_interface.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/code-patching.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/compat.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cpm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cpm1.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cpm2.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cputable.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cputhreads.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/cputime.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/current.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dbdma.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dcr-generic.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dcr-mmio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dcr-native.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dcr-regs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dcr.h (94%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/delay.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/device.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/div64.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dma-mapping.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/dma.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/edac.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/eeh.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/eeh_event.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/elf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/emergency-restart.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/errno.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/exception.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fcntl.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/feature-fixups.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/firmware.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fixmap.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/floppy.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fs_pd.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fsl_gtm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/fsl_lbc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ftrace.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/futex.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/gpio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/grackle.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hardirq.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/heathrow.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/highmem.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hugetlb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hvcall.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hvconsole.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hvcserver.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hw_irq.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/hydra.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/i8259.h (71%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ibmebus.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ide.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/immap_86xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/immap_cpm2.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/immap_qe.h (99%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/io-defs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/io.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ioctl.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ioctls.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iommu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ipcbuf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ipic.h (93%)
create mode 100644 arch/powerpc/include/asm/irq.h
rename {include/asm-powerpc => arch/powerpc/include/asm}/irq_regs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/irqflags.h (93%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/alpaca.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_call.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_call_event.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_call_sc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_call_xm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_lp_config.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_lp_event.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/hv_types.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/iommu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/it_lp_queue.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/lpar_map.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/mf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/iseries/vio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kdebug.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kdump.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kexec.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/keylargo.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kgdb.h (98%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kmap_types.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kprobes.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kvm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kvm_asm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kvm_host.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kvm_para.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/kvm_ppc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/libata-portmap.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/linkage.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/lmb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/local.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/lppaca.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/lv1call.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/machdep.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/macio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mc146818rtc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mediabay.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mman.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-40x.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-44x.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-8xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-fsl-booke.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-hash32.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu-hash64.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmu_context.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mmzone.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/module.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc512x.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc52xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc52xx_psc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc6xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc8260.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc86xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpc8xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mpic.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/msgbuf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/mutex.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/nvram.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/of_device.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/of_platform.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ohare.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/oprofile_impl.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pSeries_reconfig.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/paca.h (99%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/page.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/page_32.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/page_64.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/param.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/parport.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pasemi_dma.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pci-bridge.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pci.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/percpu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgalloc-32.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgalloc-64.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgalloc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgtable-4k.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgtable-64k.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgtable-ppc32.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgtable-ppc64.h (99%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pgtable.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/phyp_dump.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pmac_feature.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pmac_low_i2c.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pmac_pfunc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pmc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/pmi.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/poll.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/posix_types.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ppc-pci.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ppc4xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ppc_asm.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/processor.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/prom.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ps3.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ps3av.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ps3fb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ps3stor.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ptrace.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/qe.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/qe_ic.h (99%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/reg.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/reg_8xx.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/reg_booke.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/reg_fsl_emb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/resource.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/rheap.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/rio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/rtas.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/rtc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/rwsem.h (96%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/scatterlist.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/seccomp.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sections.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sembuf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/serial.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/setjmp.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/setup.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/shmbuf.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/shmparam.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sigcontext.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/siginfo.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/signal.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/smp.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/smu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/socket.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sockios.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sparsemem.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spinlock.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spinlock_types.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spu.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spu_csa.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spu_info.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/spu_priv1.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/sstep.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/stat.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/statfs.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/string.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/suspend.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/synch.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/syscall.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/syscalls.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/systbl.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/system.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tce.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/termbits.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/termios.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/thread_info.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/time.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/timex.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tlb.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tlbflush.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/topology.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tsi108.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tsi108_irq.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/tsi108_pci.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/types.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/uaccess.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ucc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ucc_fast.h (99%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ucc_slow.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/ucontext.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/udbg.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/uic.h (95%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/unaligned.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/uninorth.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/unistd.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/user.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/vdso.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/vdso_datapage.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/vga.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/vio.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/xilinx_intc.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/xmon.h (100%)
rename {include/asm-powerpc => arch/powerpc/include/asm}/xor.h (100%)
delete mode 100644 include/asm-powerpc/irq.h
Kumar Gala (1):
powerpc: Remove use of CONFIG_PPC_MERGE
Stephen Rothwell (1):
powerpc: Move include files to arch/powerpc/include/asm
Tony Breeds (2):
powerpc: Fix compiler warning in arch/powerpc/mm/mem.c
powerpc: Force printing of 'total_memory' to unsigned long long
^ permalink raw reply
* Re: nfsd, v4: oops in find_acceptable_alias, ppc32 Linux, post-2.6.27-rc1
From: Paul Collins @ 2008-08-04 5:11 UTC (permalink / raw)
To: Neil Brown; +Cc: J. Bruce Fields, linuxppc-dev, nfsv4, linux-kernel
In-Reply-To: <18582.32935.501672.689845@notabene.brown>
Neil Brown <neilb@suse.de> writes:
> bctrl appears to be the indirect-function-call opcode. There are
> three of them one each for
> ->fh_to_dentry
> acceptable
> ->fh_to_parent
>
> 0xa8 is 'acceptable'.
>
> In the first traceback, the crash was a call from very early in
> find_acceptable_alias, The first significant thing it does is call
> the 'acceptable' function.
>
> So it seems clear that 'acceptable' is NULL.
> It is equally clear that we never ever set it to NULL in the code.
> The logical conclusion is "compiler error".
> We can confirm (hopefully) by looking at a disassembly of fh_verify.
>
> Maybe because nfsd_acceptable is 'static' and never explicitly called,
> gcc gets confused and optimises it away. Maybe a disassembly of
> nfsd_acceptable would be informative ... particularly if it turns out
> to be empty.
Here's the disassembly.
Dump of assembler code for function nfsd_acceptable:
0xc015f450 <nfsd_acceptable+0>: mflr r0
0xc015f454 <nfsd_acceptable+4>: stw r0,4(r1)
0xc015f458 <nfsd_acceptable+8>: bl 0xc0013154 <_mcount>
0xc015f45c <nfsd_acceptable+12>: stwu r1,-32(r1)
0xc015f460 <nfsd_acceptable+16>: mflr r0
0xc015f464 <nfsd_acceptable+20>: stmw r28,16(r1)
0xc015f468 <nfsd_acceptable+24>: mr r28,r3
0xc015f46c <nfsd_acceptable+28>: mr r31,r1
0xc015f470 <nfsd_acceptable+32>: stw r0,36(r1)
0xc015f474 <nfsd_acceptable+36>: li r30,1
0xc015f478 <nfsd_acceptable+40>: lwz r0,24(r3)
0xc015f47c <nfsd_acceptable+44>: mr r3,r4
0xc015f480 <nfsd_acceptable+48>: andi. r9,r0,1024
0xc015f484 <nfsd_acceptable+52>: bne- 0xc015f56c <nfsd_acceptable+284>
0xc015f488 <nfsd_acceptable+56>: cmpwi cr7,r4,0
0xc015f48c <nfsd_acceptable+60>: beq- cr7,0xc015f4b0 <nfsd_acceptable+96>
0xc015f490 <nfsd_acceptable+64>: lwz r0,0(r4)
0xc015f494 <nfsd_acceptable+68>: cntlzw r0,r0
0xc015f498 <nfsd_acceptable+72>: rlwinm r0,r0,27,5,31
0xc015f49c <nfsd_acceptable+76>: twnei r0,0
0xc015f4a0 <nfsd_acceptable+80>: lwarx r0,0,r4
0xc015f4a4 <nfsd_acceptable+84>: addic r0,r0,1
0xc015f4a8 <nfsd_acceptable+88>: stwcx. r0,0,r4
0xc015f4ac <nfsd_acceptable+92>: bne- 0xc015f4a0 <nfsd_acceptable+80>
0xc015f4b0 <nfsd_acceptable+96>: mr r29,r3
0xc015f4b4 <nfsd_acceptable+100>: b 0xc015f508 <nfsd_acceptable+184>
0xc015f4b8 <nfsd_acceptable+104>: beq- cr6,0xc015f4dc <nfsd_acceptable+140>
0xc015f4bc <nfsd_acceptable+108>: lwz r0,0(r30)
0xc015f4c0 <nfsd_acceptable+112>: cntlzw r0,r0
0xc015f4c4 <nfsd_acceptable+116>: rlwinm r0,r0,27,5,31
0xc015f4c8 <nfsd_acceptable+120>: twnei r0,0
0xc015f4cc <nfsd_acceptable+124>: lwarx r0,0,r30
0xc015f4d0 <nfsd_acceptable+128>: addic r0,r0,1
0xc015f4d4 <nfsd_acceptable+132>: stwcx. r0,0,r30
0xc015f4d8 <nfsd_acceptable+136>: bne- 0xc015f4cc <nfsd_acceptable+124>
0xc015f4dc <nfsd_acceptable+140>: lwz r3,8(r30)
0xc015f4e0 <nfsd_acceptable+144>: li r4,1
0xc015f4e4 <nfsd_acceptable+148>: bl 0xc00b2f50 <inode_permission>
0xc015f4e8 <nfsd_acceptable+152>: cmpwi cr7,r3,0
0xc015f4ec <nfsd_acceptable+156>: mr r3,r29
0xc015f4f0 <nfsd_acceptable+160>: bge+ cr7,0xc015f500 <nfsd_acceptable+176>
0xc015f4f4 <nfsd_acceptable+164>: mr r3,r30
0xc015f4f8 <nfsd_acceptable+168>: bl 0xc00befb0 <dput>
0xc015f4fc <nfsd_acceptable+172>: b 0xc015f524 <nfsd_acceptable+212>
0xc015f500 <nfsd_acceptable+176>: bl 0xc00befb0 <dput>
0xc015f504 <nfsd_acceptable+180>: mr r29,r30
0xc015f508 <nfsd_acceptable+184>: lwz r0,32(r28)
0xc015f50c <nfsd_acceptable+188>: cmpw cr7,r29,r0
0xc015f510 <nfsd_acceptable+192>: beq- cr7,0xc015f524 <nfsd_acceptable+212>
0xc015f514 <nfsd_acceptable+196>: lwz r30,20(r29)
0xc015f518 <nfsd_acceptable+200>: cmpw cr7,r29,r30
0xc015f51c <nfsd_acceptable+204>: cmpwi cr6,r30,0
0xc015f520 <nfsd_acceptable+208>: bne+ cr7,0xc015f4b8 <nfsd_acceptable+104>
0xc015f524 <nfsd_acceptable+212>: lwz r0,32(r28)
0xc015f528 <nfsd_acceptable+216>: cmpw cr7,r29,r0
0xc015f52c <nfsd_acceptable+220>: beq- cr7,0xc015f554 <nfsd_acceptable+260>
0xc015f530 <nfsd_acceptable+224>: lis r9,-16296
0xc015f534 <nfsd_acceptable+228>: lwz r0,17792(r9)
0xc015f538 <nfsd_acceptable+232>: andi. r9,r0,2
0xc015f53c <nfsd_acceptable+236>: beq+ 0xc015f554 <nfsd_acceptable+260>
0xc015f540 <nfsd_acceptable+240>: lis r3,-16309
0xc015f544 <nfsd_acceptable+244>: lwz r5,32(r29)
0xc015f548 <nfsd_acceptable+248>: mr r4,r29
0xc015f54c <nfsd_acceptable+252>: addi r3,r3,7972
0xc015f550 <nfsd_acceptable+256>: bl 0xc00330d4 <printk>
0xc015f554 <nfsd_acceptable+260>: lwz r0,32(r28)
0xc015f558 <nfsd_acceptable+264>: mr r3,r29
0xc015f55c <nfsd_acceptable+268>: xor r30,r29,r0
0xc015f560 <nfsd_acceptable+272>: cntlzw r30,r30
0xc015f564 <nfsd_acceptable+276>: rlwinm r30,r30,27,5,31
0xc015f568 <nfsd_acceptable+280>: bl 0xc00befb0 <dput>
0xc015f56c <nfsd_acceptable+284>: lwz r11,0(r1)
0xc015f570 <nfsd_acceptable+288>: mr r3,r30
0xc015f574 <nfsd_acceptable+292>: lwz r0,4(r11)
0xc015f578 <nfsd_acceptable+296>: lmw r28,-16(r11)
0xc015f57c <nfsd_acceptable+300>: mr r1,r11
0xc015f580 <nfsd_acceptable+304>: mtlr r0
0xc015f584 <nfsd_acceptable+308>: blr
End of assembler dump.
> Could you try removing the 'static' declaration for nfsd_acceptable
> and recompile?
> Or maybe try a different compiler?
I will give these a try this evening.
--
Paul Collins
Wellington, New Zealand
Dag vijandelijk luchtschip de huismeester is dood
^ permalink raw reply
* Re: floating point support in the driver.
From: Misbah khan @ 2008-08-04 5:23 UTC (permalink / raw)
To: linuxppc-embedded
In-Reply-To: <20080801.095429.-1827411968.imp@bsdimp.com>
Thank you Warner.
Actually the complete algorithm should take not more than 1 sec to execute
but its taking around 1.8 sec .The algorithm would rum between every few
secs. I am trying to fine tune the code ,i just want to know that will it a
good idea to alter the task priority and what could be the best way ?
-- Misbah <><
M. Warner Losh wrote:
>
> In message: <18772952.post@talk.nabble.com>
> Misbah khan <misbah_khan@engineer.com> writes:
> : I am not very clear Why floating point support in the Kernel should be
> : avoided ?
>
> Because saving the FPU state is expensive. The kernel multiplexes the
> FPU hardware among all the userland processes that use it. For parts
> of the kernel to effectively use the FPU, it would have to save the
> state on traps into the kernel, and restore the state when returning
> to userland. This is a big drag on performance of the system. There
> are ways around this optimization where you save the fpu state
> explicitly, but the expense si still there.
>
> : We want our DSP algorithm to run at the boot time and since kernel
> thread
> : having higher priority , i assume that it would be faster than user
> : application.
>
> Bad assumption. User threads can get boots in priority in certain
> cases.
>
> If it really is just at boot time, before any other threads are
> started, you likely can get away with it.
>
> : If i really have to speed up my application execution what mechanism
> will
> : you suggest me to try ?
> :
> : After using Hardware VFP support also i am still laging the timing
> : requirement by 800 ms in my case
>
> This sounds like a classic case of putting 20 pounds in a 10 pound bag
> and complaining that the bag rips out. You need a bigger bag.
>
> If you are doing FPU intensive operations in userland, moving them to
> the kernel isn't going to help anything but maybe latency. And if you
> are almost a full second short, your quest to move things into the
> kernel is almost certainly not going to help enough. Moving things
> into the kernel only helps latency, and only when there's lots of
> context switches (since doing stuff in the kernel avoids the domain
> crossing that forces the save of the CPU state).
>
> I don't know if the 800ms timing is relative to a task that must run
> once a second, or once an hour. If the former, you're totally
> screwed and need to either be more clever about your algorithm
> (consider integer math, profiling the hot spots, etc), or you need
> more powerful silicon. If you are trying to shave 800ms off a task
> that runs for an hour, then you just might be able to do that with
> tiny code tweaks.
>
> Sorry to be so harsh, but really, there's no such thing as a free lunch.
>
> Warner
>
>
>
> : ---- Misbah <><
> :
> :
> : Laurent Pinchart-4 wrote:
> : >
> : > On Friday 01 August 2008, Misbah khan wrote:
> : >>
> : >> Hi all,
> : >>
> : >> I have a DSP algorithm which i am running in the application even
> after
> : >> enabling the VFP support it is taking a lot of time to get executed
> hence
> : >>
> : >> I want to transform the same into the driver insted of an user
> : >> application.
> : >> Can anybody suggest whether doing the same could be a better solution
> and
> : >> what could be the chalenges that i have to face by implimenting such
> : >> floating point support in the driver.
> : >>
> : >> Is there a way in the application itself to make it execute faster.
> : >
> : > Floating-point in the kernel should be avoided. FPU state save/restore
> : > operations are costly and are not performed by the kernel when
> switching
> : > from userspace to kernelspace context. You will have to protect
> : > floating-point sections with kernel_fpu_begin/kernel_fpu_end which, if
> I'm
> : > not mistaken, disables preemption. That's probably not something you
> want
> : > to do. Why would the same code run faster in kernelspace then
> userspace ?
> : >
> : > --
> : > Laurent Pinchart
> : > CSE Semaphore Belgium
> : >
> : > Chaussee de Bruxelles, 732A
> : > B-1410 Waterloo
> : > Belgium
> : >
> : > T +32 (2) 387 42 59
> : > F +32 (2) 387 42 75
> : >
> : >
> : > _______________________________________________
> : > Linuxppc-embedded mailing list
> : > Linuxppc-embedded@ozlabs.org
> : > https://ozlabs.org/mailman/listinfo/linuxppc-embedded
> : >
> :
> : --
> : View this message in context:
> http://www.nabble.com/floating-point-support-in-the-driver.-tp18772109p18772952.html
> : Sent from the linuxppc-embedded mailing list archive at Nabble.com.
> :
> : _______________________________________________
> : Linuxppc-embedded mailing list
> : Linuxppc-embedded@ozlabs.org
> : https://ozlabs.org/mailman/listinfo/linuxppc-embedded
> :
> :
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
>
>
--
View this message in context: http://www.nabble.com/floating-point-support-in-the-driver.-tp18772109p18805820.html
Sent from the linuxppc-embedded mailing list archive at Nabble.com.
^ permalink raw reply
* dtc: Make many functions 'static'
From: David Gibson @ 2008-08-04 5:30 UTC (permalink / raw)
To: Jon Loeliger; +Cc: linuxppc-dev, devicetree-discuss
This patch marks various functions not shared between c files
'static', as they should be. There are a couple of functions in dtc,
and many in the testsuite.
This is *almost* enough to enable the -Wmissing-prototypes warning.
It's not quite enough, because there's a mess of junk in the flex
generated code which triggers that warning which I'm not yet sure how
to deal with.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Index: dtc/data.c
===================================================================
--- dtc.orig/data.c 2008-08-04 15:12:33.000000000 +1000
+++ dtc/data.c 2008-08-04 15:12:46.000000000 +1000
@@ -217,7 +217,7 @@ struct data data_insert_at_marker(struct
return d;
}
-struct data data_append_markers(struct data d, struct marker *m)
+static struct data data_append_markers(struct data d, struct marker *m)
{
struct marker **mp = &d.markers;
Index: dtc/tests/get_name.c
===================================================================
--- dtc.orig/tests/get_name.c 2008-08-04 15:14:38.000000000 +1000
+++ dtc/tests/get_name.c 2008-08-04 15:14:40.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_name(void *fdt, const char *path)
+static void check_name(void *fdt, const char *path)
{
int offset;
const char *getname, *getname2, *checkname;
Index: dtc/tests/get_path.c
===================================================================
--- dtc.orig/tests/get_path.c 2008-08-04 15:17:19.000000000 +1000
+++ dtc/tests/get_path.c 2008-08-04 15:17:41.000000000 +1000
@@ -30,7 +30,7 @@
#define POISON ('\xff')
-void check_path_buf(void *fdt, const char *path, int pathlen, int buflen)
+static void check_path_buf(void *fdt, const char *path, int pathlen, int buflen)
{
int offset;
char buf[buflen+1];
@@ -63,7 +63,7 @@ void check_path_buf(void *fdt, const cha
FAIL("fdt_get_path([%d bytes]) overran buffer", buflen);
}
-void check_path(void *fdt, const char *path)
+static void check_path(void *fdt, const char *path)
{
int pathlen = strlen(path);
Index: dtc/tests/get_phandle.c
===================================================================
--- dtc.orig/tests/get_phandle.c 2008-08-04 15:14:50.000000000 +1000
+++ dtc/tests/get_phandle.c 2008-08-04 15:14:53.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_phandle(void *fdt, const char *path, uint32_t checkhandle)
+static void check_phandle(void *fdt, const char *path, uint32_t checkhandle)
{
int offset;
uint32_t phandle;
Index: dtc/tests/node_offset_by_prop_value.c
===================================================================
--- dtc.orig/tests/node_offset_by_prop_value.c 2008-08-04 15:15:40.000000000 +1000
+++ dtc/tests/node_offset_by_prop_value.c 2008-08-04 15:16:17.000000000 +1000
@@ -29,7 +29,7 @@
#include "tests.h"
#include "testdata.h"
-void vcheck_search(void *fdt, const char *propname, const void *propval,
+static void vcheck_search(void *fdt, const char *propname, const void *propval,
int proplen, va_list ap)
{
int offset = -1, target;
@@ -48,7 +48,7 @@ void vcheck_search(void *fdt, const char
} while (target >= 0);
}
-void check_search(void *fdt, const char *propname, const void *propval,
+static void check_search(void *fdt, const char *propname, const void *propval,
int proplen, ...)
{
va_list ap;
@@ -58,7 +58,8 @@ void check_search(void *fdt, const char
va_end(ap);
}
-void check_search_str(void *fdt, const char *propname, const char *propval, ...)
+static void check_search_str(void *fdt, const char *propname,
+ const char *propval, ...)
{
va_list ap;
Index: dtc/tests/parent_offset.c
===================================================================
--- dtc.orig/tests/parent_offset.c 2008-08-04 15:15:19.000000000 +1000
+++ dtc/tests/parent_offset.c 2008-08-04 15:15:29.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-int path_parent_len(const char *path)
+static int path_parent_len(const char *path)
{
const char *p = strrchr(path, '/');
@@ -40,7 +40,7 @@ int path_parent_len(const char *path)
return p - path;
}
-void check_path(struct fdt_header *fdt, const char *path)
+static void check_path(struct fdt_header *fdt, const char *path)
{
char *parentpath;
int nodeoffset, parentoffset, parentpathoffset, pathparentlen;
Index: dtc/tests/path_offset.c
===================================================================
--- dtc.orig/tests/path_offset.c 2008-08-04 15:14:18.000000000 +1000
+++ dtc/tests/path_offset.c 2008-08-04 15:14:20.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-int check_subnode(void *fdt, int parent, const char *name)
+static int check_subnode(void *fdt, int parent, const char *name)
{
int offset;
const struct fdt_node_header *nh;
Index: dtc/tests/subnode_offset.c
===================================================================
--- dtc.orig/tests/subnode_offset.c 2008-08-04 15:13:27.000000000 +1000
+++ dtc/tests/subnode_offset.c 2008-08-04 15:13:43.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-int check_subnode(struct fdt_header *fdt, int parent, const char *name)
+static int check_subnode(struct fdt_header *fdt, int parent, const char *name)
{
int offset;
const struct fdt_node_header *nh;
Index: dtc/tests/supernode_atdepth_offset.c
===================================================================
--- dtc.orig/tests/supernode_atdepth_offset.c 2008-08-04 15:16:38.000000000 +1000
+++ dtc/tests/supernode_atdepth_offset.c 2008-08-04 15:17:06.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-int path_depth(const char *path)
+static int path_depth(const char *path)
{
const char *p;
int depth = 0;
@@ -49,7 +49,7 @@ int path_depth(const char *path)
return depth;
}
-int path_prefix(const char *path, int depth)
+static int path_prefix(const char *path, int depth)
{
const char *p;
int i;
@@ -67,7 +67,7 @@ int path_prefix(const char *path, int de
return p - path;
}
-void check_supernode_atdepth(struct fdt_header *fdt, const char *path,
+static void check_supernode_atdepth(struct fdt_header *fdt, const char *path,
int depth)
{
int pdepth = path_depth(path);
@@ -106,7 +106,7 @@ void check_supernode_atdepth(struct fdt_
"instead of %d", nodedepth, pdepth);
}
-void check_supernode_overdepth(struct fdt_header *fdt, const char *path)
+static void check_supernode_overdepth(struct fdt_header *fdt, const char *path)
{
int pdepth = path_depth(path);
int nodeoffset, err;
@@ -121,7 +121,7 @@ void check_supernode_overdepth(struct fd
"of FDT_ERR_NOTFOUND", path, pdepth+1, err);
}
-void check_path(struct fdt_header *fdt, const char *path)
+static void check_path(struct fdt_header *fdt, const char *path)
{
int i;
Index: dtc/treesource.c
===================================================================
--- dtc.orig/treesource.c 2008-08-04 15:12:55.000000000 +1000
+++ dtc/treesource.c 2008-08-04 15:13:09.000000000 +1000
@@ -52,7 +52,7 @@ static void write_prefix(FILE *f, int le
fputc('\t', f);
}
-int isstring(char c)
+static int isstring(char c)
{
return (isprint(c)
|| (c == '\0')
Index: dtc/tests/dtbs_equal_ordered.c
===================================================================
--- dtc.orig/tests/dtbs_equal_ordered.c 2008-08-04 15:25:06.000000000 +1000
+++ dtc/tests/dtbs_equal_ordered.c 2008-08-04 15:25:24.000000000 +1000
@@ -29,7 +29,7 @@
#include "tests.h"
#include "testdata.h"
-void compare_mem_rsv(const void *fdt1, const void *fdt2)
+static void compare_mem_rsv(const void *fdt1, const void *fdt2)
{
int i;
uint64_t addr1, size1, addr2, size2;
@@ -56,7 +56,7 @@ void compare_mem_rsv(const void *fdt1, c
}
}
-void compare_structure(const void *fdt1, const void *fdt2)
+static void compare_structure(const void *fdt1, const void *fdt2)
{
int nextoffset1 = 0, nextoffset2 = 0;
int offset1, offset2;
Index: dtc/tests/incbin.c
===================================================================
--- dtc.orig/tests/incbin.c 2008-08-04 15:20:53.000000000 +1000
+++ dtc/tests/incbin.c 2008-08-04 15:21:08.000000000 +1000
@@ -31,7 +31,7 @@
#define CHUNKSIZE 1024
-char *load_file(const char *name, int *len)
+static char *load_file(const char *name, int *len)
{
FILE *f;
char *buf = NULL;
Index: dtc/tests/mangle-layout.c
===================================================================
--- dtc.orig/tests/mangle-layout.c 2008-08-04 15:19:19.000000000 +1000
+++ dtc/tests/mangle-layout.c 2008-08-04 15:19:30.000000000 +1000
@@ -35,7 +35,7 @@ struct bufstate {
int size;
};
-void expand_buf(struct bufstate *buf, int newsize)
+static void expand_buf(struct bufstate *buf, int newsize)
{
buf->buf = realloc(buf->buf, newsize);
if (!buf->buf)
@@ -43,7 +43,7 @@ void expand_buf(struct bufstate *buf, in
buf->size = newsize;
}
-void new_header(struct bufstate *buf, int version, const void *fdt)
+static void new_header(struct bufstate *buf, int version, const void *fdt)
{
int hdrsize;
@@ -63,7 +63,7 @@ void new_header(struct bufstate *buf, in
fdt_set_boot_cpuid_phys(buf->buf, fdt_boot_cpuid_phys(fdt));
}
-void add_block(struct bufstate *buf, int version, char block, const void *fdt)
+static void add_block(struct bufstate *buf, int version, char block, const void *fdt)
{
int align, size;
const void *src;
Index: dtc/tests/node_check_compatible.c
===================================================================
--- dtc.orig/tests/node_check_compatible.c 2008-08-04 15:18:13.000000000 +1000
+++ dtc/tests/node_check_compatible.c 2008-08-04 15:18:30.000000000 +1000
@@ -29,7 +29,8 @@
#include "tests.h"
#include "testdata.h"
-void check_compatible(const void *fdt, const char *path, const char *compat)
+static void check_compatible(const void *fdt, const char *path,
+ const char *compat)
{
int offset, err;
Index: dtc/tests/node_offset_by_compatible.c
===================================================================
--- dtc.orig/tests/node_offset_by_compatible.c 2008-08-04 15:18:35.000000000 +1000
+++ dtc/tests/node_offset_by_compatible.c 2008-08-04 15:18:47.000000000 +1000
@@ -29,7 +29,7 @@
#include "tests.h"
#include "testdata.h"
-void check_search(void *fdt, const char *compat, ...)
+static void check_search(void *fdt, const char *compat, ...)
{
va_list ap;
int offset = -1, target;
Index: dtc/tests/node_offset_by_phandle.c
===================================================================
--- dtc.orig/tests/node_offset_by_phandle.c 2008-08-04 15:17:58.000000000 +1000
+++ dtc/tests/node_offset_by_phandle.c 2008-08-04 15:18:06.000000000 +1000
@@ -29,7 +29,7 @@
#include "tests.h"
#include "testdata.h"
-void check_search(void *fdt, uint32_t phandle, int target)
+static void check_search(void *fdt, uint32_t phandle, int target)
{
int offset;
Index: dtc/tests/nopulate.c
===================================================================
--- dtc.orig/tests/nopulate.c 2008-08-04 15:19:44.000000000 +1000
+++ dtc/tests/nopulate.c 2008-08-04 15:19:56.000000000 +1000
@@ -30,7 +30,7 @@
#include "tests.h"
#include "testdata.h"
-int nopulate_struct(char *buf, const char *fdt)
+static int nopulate_struct(char *buf, const char *fdt)
{
int offset, nextoffset = 0;
uint32_t tag;
Index: dtc/tests/notfound.c
===================================================================
--- dtc.orig/tests/notfound.c 2008-08-04 15:19:00.000000000 +1000
+++ dtc/tests/notfound.c 2008-08-04 15:19:10.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_error(const char *s, int err)
+static void check_error(const char *s, int err)
{
if (err != -FDT_ERR_NOTFOUND)
FAIL("%s return error %s instead of -FDT_ERR_NOTFOUND", s,
Index: dtc/tests/path-references.c
===================================================================
--- dtc.orig/tests/path-references.c 2008-08-04 15:24:35.000000000 +1000
+++ dtc/tests/path-references.c 2008-08-04 15:24:52.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_ref(const void *fdt, int node, const char *checkpath)
+static void check_ref(const void *fdt, int node, const char *checkpath)
{
const char *p;
int len;
Index: dtc/tests/references.c
===================================================================
--- dtc.orig/tests/references.c 2008-08-04 15:20:26.000000000 +1000
+++ dtc/tests/references.c 2008-08-04 15:20:39.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_ref(const void *fdt, int node, uint32_t checkref)
+static void check_ref(const void *fdt, int node, uint32_t checkref)
{
const uint32_t *p;
uint32_t ref;
Index: dtc/tests/set_name.c
===================================================================
--- dtc.orig/tests/set_name.c 2008-08-04 15:20:00.000000000 +1000
+++ dtc/tests/set_name.c 2008-08-04 15:20:13.000000000 +1000
@@ -28,7 +28,7 @@
#include "tests.h"
#include "testdata.h"
-void check_set_name(void *fdt, const char *path, const char *newname)
+static void check_set_name(void *fdt, const char *path, const char *newname)
{
int offset;
const char *getname, *oldname;
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ permalink raw reply
* Re: floating point support in the driver.
From: M. Warner Losh @ 2008-08-04 5:33 UTC (permalink / raw)
To: misbah_khan; +Cc: linuxppc-embedded
In-Reply-To: <18805820.post@talk.nabble.com>
In message: <18805820.post@talk.nabble.com>
Misbah khan <misbah_khan@engineer.com> writes:
: Actually the complete algorithm should take not more than 1 sec to execute
: but its taking around 1.8 sec .The algorithm would rum between every few
: secs. I am trying to fine tune the code ,i just want to know that will it a
: good idea to alter the task priority and what could be the best way ?
You could try a very high priority task, but I'd suggest that
profiling the code to see where the hot spots are might yield better
results... Have you identified what other process is running for the
those two seconds that's causing your <1s algorithm to take about 2x
as long? What's the real vs cpu time say for this algorithm? If they
are about the same, then you have to make it faster.
Given that you are looking for a factor of 2x, my experience suggests
that moving this into the kernel is unlikely to be successful and will
be a lot of pain. It would be rare indeed to find a system that
context switches really account for that much of the time.
To make progress, you need to identify the real root cause for this
slowdown. Either your thread really is taking the extra time, in
which case profiling and algorithm improvement is your only
alternative. Or someone else is eating all the CPU, and you must
either hold them off, or get a beefier CPU.
Boosting the priority might be a good diagnostic aide, but may have
unintended side effects if you really are competing with something
else. Wouldn't that starve the other process? What is it doing?
Warner
: -- Misbah <><
:
: M. Warner Losh wrote:
: >
: > In message: <18772952.post@talk.nabble.com>
: > Misbah khan <misbah_khan@engineer.com> writes:
: > : I am not very clear Why floating point support in the Kernel should be
: > : avoided ?
: >
: > Because saving the FPU state is expensive. The kernel multiplexes the
: > FPU hardware among all the userland processes that use it. For parts
: > of the kernel to effectively use the FPU, it would have to save the
: > state on traps into the kernel, and restore the state when returning
: > to userland. This is a big drag on performance of the system. There
: > are ways around this optimization where you save the fpu state
: > explicitly, but the expense si still there.
: >
: > : We want our DSP algorithm to run at the boot time and since kernel
: > thread
: > : having higher priority , i assume that it would be faster than user
: > : application.
: >
: > Bad assumption. User threads can get boots in priority in certain
: > cases.
: >
: > If it really is just at boot time, before any other threads are
: > started, you likely can get away with it.
: >
: > : If i really have to speed up my application execution what mechanism
: > will
: > : you suggest me to try ?
: > :
: > : After using Hardware VFP support also i am still laging the timing
: > : requirement by 800 ms in my case
: >
: > This sounds like a classic case of putting 20 pounds in a 10 pound bag
: > and complaining that the bag rips out. You need a bigger bag.
: >
: > If you are doing FPU intensive operations in userland, moving them to
: > the kernel isn't going to help anything but maybe latency. And if you
: > are almost a full second short, your quest to move things into the
: > kernel is almost certainly not going to help enough. Moving things
: > into the kernel only helps latency, and only when there's lots of
: > context switches (since doing stuff in the kernel avoids the domain
: > crossing that forces the save of the CPU state).
: >
: > I don't know if the 800ms timing is relative to a task that must run
: > once a second, or once an hour. If the former, you're totally
: > screwed and need to either be more clever about your algorithm
: > (consider integer math, profiling the hot spots, etc), or you need
: > more powerful silicon. If you are trying to shave 800ms off a task
: > that runs for an hour, then you just might be able to do that with
: > tiny code tweaks.
: >
: > Sorry to be so harsh, but really, there's no such thing as a free lunch.
: >
: > Warner
: >
: >
: >
: > : ---- Misbah <><
: > :
: > :
: > : Laurent Pinchart-4 wrote:
: > : >
: > : > On Friday 01 August 2008, Misbah khan wrote:
: > : >>
: > : >> Hi all,
: > : >>
: > : >> I have a DSP algorithm which i am running in the application even
: > after
: > : >> enabling the VFP support it is taking a lot of time to get executed
: > hence
: > : >>
: > : >> I want to transform the same into the driver insted of an user
: > : >> application.
: > : >> Can anybody suggest whether doing the same could be a better solution
: > and
: > : >> what could be the chalenges that i have to face by implimenting such
: > : >> floating point support in the driver.
: > : >>
: > : >> Is there a way in the application itself to make it execute faster.
: > : >
: > : > Floating-point in the kernel should be avoided. FPU state save/restore
: > : > operations are costly and are not performed by the kernel when
: > switching
: > : > from userspace to kernelspace context. You will have to protect
: > : > floating-point sections with kernel_fpu_begin/kernel_fpu_end which, if
: > I'm
: > : > not mistaken, disables preemption. That's probably not something you
: > want
: > : > to do. Why would the same code run faster in kernelspace then
: > userspace ?
: > : >
: > : > --
: > : > Laurent Pinchart
: > : > CSE Semaphore Belgium
: > : >
: > : > Chaussee de Bruxelles, 732A
: > : > B-1410 Waterloo
: > : > Belgium
: > : >
: > : > T +32 (2) 387 42 59
: > : > F +32 (2) 387 42 75
: > : >
: > : >
: > : > _______________________________________________
: > : > Linuxppc-embedded mailing list
: > : > Linuxppc-embedded@ozlabs.org
: > : > https://ozlabs.org/mailman/listinfo/linuxppc-embedded
: > : >
: > :
: > : --
: > : View this message in context:
: > http://www.nabble.com/floating-point-support-in-the-driver.-tp18772109p18772952.html
: > : Sent from the linuxppc-embedded mailing list archive at Nabble.com.
: > :
: > : _______________________________________________
: > : Linuxppc-embedded mailing list
: > : Linuxppc-embedded@ozlabs.org
: > : https://ozlabs.org/mailman/listinfo/linuxppc-embedded
: > :
: > :
: > _______________________________________________
: > Linuxppc-embedded mailing list
: > Linuxppc-embedded@ozlabs.org
: > https://ozlabs.org/mailman/listinfo/linuxppc-embedded
: >
: >
:
: --
: View this message in context: http://www.nabble.com/floating-point-support-in-the-driver.-tp18772109p18805820.html
: Sent from the linuxppc-embedded mailing list archive at Nabble.com.
:
: _______________________________________________
: Linuxppc-embedded mailing list
: Linuxppc-embedded@ozlabs.org
: https://ozlabs.org/mailman/listinfo/linuxppc-embedded
:
:
^ permalink raw reply
* Re: floating point support in the driver.
From: David Hawkins @ 2008-08-04 5:47 UTC (permalink / raw)
To: M. Warner Losh; +Cc: misbah_khan, linuxppc-embedded
In-Reply-To: <20080803.233352.915266361.imp@bsdimp.com>
Hi Misbah,
I would recommend you look at your floating-point code again
and benchmark each section. You should be able to estimate
the number of clock cycles required to complete an operation
and then check that against your measurements.
Depending on whether your algorithm is processing intensive
or data movement intensive, you may find that the big time
waster is moving data on or off chip, or perhaps its a large
vector operation that is blowing out the cache. If you
do find that, then on some processors you can lock the
cache, so your algorithm would require a custom driver
that steals part of the cache from the OS, but the floating point
code would not run in the kernel, it would run on data
stored in the stolen cache area. You can lock both instructions
and data in the cache; eg. an FFT routine can be locked in
the instruction cache, while FFT data is in the data cache.
I'm not sure how easy this is to do under Linux though.
Here's an example of the level of detail you can get
downto when benchmarking code:
http://www.ovro.caltech.edu/~dwh/correlator/pdf/dsp_programming.pdf
The FFT routine used on this processor made use of both
the instruction and data cache (on-chip SRAM) on the
DSP.
This code is being re-developed to run on a MPC8349EA PowerPC
with FPU. I did some initial testing to confirm that the
FPU operates as per the data sheet, and will eventually get
around to more complete testing.
Which processor were you running your code on, and what
frequency were you operating the processor at? How does
the algorithm timing compare when run on other processors,
eg. your desktop or laptop machine?
Cheers,
Dave
^ permalink raw reply
* [2.6 patch] sata_fsl.c: fix 8315DS workaround
From: Adrian Bunk @ 2008-08-04 8:46 UTC (permalink / raw)
To: ashish kalra, Li Yang, Jeff Garzik, galak
Cc: linuxppc-dev, Robert P. J. Day, linux-ide
Commit e7eac96e8f0e57a6e9f94943557bc2b23be31471 (ata/sata_fsl: Move
MPC8315DS link speed limit workaround to specific ifdef) aimed at
limiting the workaround only to the affected hardware, but since the
#ifdef used a nonexisting kconfig variable it actually killed
the workaround.
Reported-by: Robert P. J. Day <rpjday@crashcourse.ca>
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
cd54dd8b6a8bca44ead212d12fe116702cc31ed7
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
index 3924e72..45878ef 100644
--- a/drivers/ata/sata_fsl.c
+++ b/drivers/ata/sata_fsl.c
@@ -640,7 +640,7 @@ static int sata_fsl_port_start(struct ata_port *ap)
VPRINTK("HControl = 0x%x\n", ioread32(hcr_base + HCONTROL));
VPRINTK("CHBA = 0x%x\n", ioread32(hcr_base + CHBA));
-#ifdef CONFIG_MPC8315_DS
+#ifdef CONFIG_MPC831x_RDB
/*
* Workaround for 8315DS board 3gbps link-up issue,
* currently limit SATA port to GEN1 speed
^ permalink raw reply related
* RE: [2.6 patch] sata_fsl.c: fix 8315DS workaround
From: Li Yang @ 2008-08-04 8:55 UTC (permalink / raw)
To: Adrian Bunk, Kalra Ashish, Jeff Garzik, galak
Cc: linuxppc-dev, Robert P. J. Day, linux-ide
In-Reply-To: <20080804084611.GA6088@cs181140183.pp.htv.fi>
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBZHJpYW4gQnVuayBbbWFpbHRv
OmJ1bmtAa2VybmVsLm9yZ10gDQo+IFNlbnQ6IE1vbmRheSwgQXVndXN0IDA0LCAyMDA4IDQ6NDYg
UE0NCj4gVG86IEthbHJhIEFzaGlzaDsgTGkgWWFuZzsgSmVmZiBHYXJ6aWs7IGdhbGFrQGtlcm5l
bC5jcmFzaGluZy5vcmcNCj4gQ2M6IGxpbnV4cHBjLWRldkBvemxhYnMub3JnOyBsaW51eC1pZGVA
dmdlci5rZXJuZWwub3JnOyANCj4gUm9iZXJ0IFAuIEouIERheQ0KPiBTdWJqZWN0OiBbMi42IHBh
dGNoXSBzYXRhX2ZzbC5jOiBmaXggODMxNURTIHdvcmthcm91bmQNCj4gDQo+IENvbW1pdCBlN2Vh
Yzk2ZThmMGU1N2E2ZTlmOTQ5NDM1NTdiYzJiMjNiZTMxNDcxIA0KPiAoYXRhL3NhdGFfZnNsOiBN
b3ZlIE1QQzgzMTVEUyBsaW5rIHNwZWVkIGxpbWl0IHdvcmthcm91bmQgdG8gDQo+IHNwZWNpZmlj
IGlmZGVmKSBhaW1lZCBhdCBsaW1pdGluZyB0aGUgd29ya2Fyb3VuZCBvbmx5IHRvIHRoZSANCj4g
YWZmZWN0ZWQgaGFyZHdhcmUsIGJ1dCBzaW5jZSB0aGUgI2lmZGVmIHVzZWQgYSBub25leGlzdGlu
ZyANCj4ga2NvbmZpZyB2YXJpYWJsZSBpdCBhY3R1YWxseSBraWxsZWQgdGhlIHdvcmthcm91bmQu
DQoNClRoaXMgd29ya2Fyb3VuZCBpcyBvbmx5IGZvciBNUEM4MzE1X0RTIGJvYXJkIHdoaWNoIGlz
IG5vdCBzdXBwb3J0ZWQgaW4gdGhlIG1haW4gbGluZSB5ZXQuICBXZSBjYW4gcmVtb3ZlIHRoZSB3
b3JrYXJvdW5kIGlmIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIGhlcmUuDQoNCi0gTGVvDQoNCj4g
DQo+IFJlcG9ydGVkLWJ5OiBSb2JlcnQgUC4gSi4gRGF5IDxycGpkYXlAY3Jhc2hjb3Vyc2UuY2E+
DQo+IFNpZ25lZC1vZmYtYnk6IEFkcmlhbiBCdW5rIDxidW5rQGtlcm5lbC5vcmc+DQo+IA0KPiAt
LS0NCj4gY2Q1NGRkOGI2YThiY2E0NGVhZDIxMmQxMmZlMTE2NzAyY2MzMWVkNw0KPiBkaWZmIC0t
Z2l0IGEvZHJpdmVycy9hdGEvc2F0YV9mc2wuYyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgDQo+
IGluZGV4IDM5MjRlNzIuLjQ1ODc4ZWYgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvYXRhL3NhdGFf
ZnNsLmMNCj4gKysrIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYw0KPiBAQCAtNjQwLDcgKzY0MCw3
IEBAIHN0YXRpYyBpbnQgc2F0YV9mc2xfcG9ydF9zdGFydChzdHJ1Y3QgDQo+IGF0YV9wb3J0ICph
cCkNCj4gIAlWUFJJTlRLKCJIQ29udHJvbCA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsg
SENPTlRST0wpKTsNCj4gIAlWUFJJTlRLKCJDSEJBICA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9i
YXNlICsgQ0hCQSkpOw0KPiAgDQo+IC0jaWZkZWYgQ09ORklHX01QQzgzMTVfRFMNCj4gKyNpZmRl
ZiBDT05GSUdfTVBDODMxeF9SREINCj4gIAkvKg0KPiAgCSAqIFdvcmthcm91bmQgZm9yIDgzMTVE
UyBib2FyZCAzZ2JwcyBsaW5rLXVwIGlzc3VlLA0KPiAgCSAqIGN1cnJlbnRseSBsaW1pdCBTQVRB
IHBvcnQgdG8gR0VOMSBzcGVlZA0KPiANCj4gDQo=
^ permalink raw reply
* Re: [2.6 patch] sata_fsl.c: fix 8315DS workaround
From: Adrian Bunk @ 2008-08-04 9:22 UTC (permalink / raw)
To: Li Yang
Cc: Jeff Garzik, linuxppc-dev, Kalra Ashish, linux-ide,
Robert P. J. Day
In-Reply-To: <A94B04433DF4F44C9C2AB5DEFBF29A4E05E1E7@zch01exm26.fsl.freescale.net>
On Mon, Aug 04, 2008 at 04:55:37PM +0800, Li Yang wrote:
> > -----Original Message-----
> > From: Adrian Bunk [mailto:bunk@kernel.org]
> > Sent: Monday, August 04, 2008 4:46 PM
> > To: Kalra Ashish; Li Yang; Jeff Garzik; galak@kernel.crashing.org
> > Cc: linuxppc-dev@ozlabs.org; linux-ide@vger.kernel.org;
> > Robert P. J. Day
> > Subject: [2.6 patch] sata_fsl.c: fix 8315DS workaround
> >
> > Commit e7eac96e8f0e57a6e9f94943557bc2b23be31471
> > (ata/sata_fsl: Move MPC8315DS link speed limit workaround to
> > specific ifdef) aimed at limiting the workaround only to the
> > affected hardware, but since the #ifdef used a nonexisting
> > kconfig variable it actually killed the workaround.
>
> This workaround is only for MPC8315_DS board which is not supported in the main line yet. We can remove the workaround if we need to do something here.
Thanks, in this case my patch is complete crap.
There's no need for any action.
> - Leo
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: nfsd, v4: oops in find_acceptable_alias, ppc32 Linux, post-2.6.27-rc1
From: Paul Collins @ 2008-08-04 10:00 UTC (permalink / raw)
To: Neil Brown; +Cc: J. Bruce Fields, linuxppc-dev, nfsv4, linux-kernel
In-Reply-To: <87fxpll5zq.fsf@burly.wgtn.ondioline.org>
Paul Collins <paul@burly.ondioline.org> writes:
> Neil Brown <neilb@suse.de> writes:
>> Could you try removing the 'static' declaration for nfsd_acceptable
>> and recompile?
>> Or maybe try a different compiler?
>
> I will give these a try this evening.
I built myself a nice new cross compiler:
powerpc-linux-gnu-gcc-4.1 (GCC) 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)
and rebuilt 94ad374a0751f40d25e22e036c37f7263569d24c. Running that on
the server and 2.6.26 on the client, I got yet another Oops. This one
locked the machine up pretty good, so all I have is a picture:
http://ondioline.org/~paul/DSCN1608.JPG
--
Paul Collins
Wellington, New Zealand
Dag vijandelijk luchtschip de huismeester is dood
^ permalink raw reply
* How to Access SDRAM ?
From: Misbah khan @ 2008-08-04 12:31 UTC (permalink / raw)
To: linuxppc-embedded
I have an external SDRAM How could i access the last 4MB location of SDRAM
through my driver.
I have used ioremap() and it works during the initial testing i suspect that
since it is the real memory and not io memory hence we should not use it .
Can any one brief me on this .
Thank you
--Misbah <><
--
View this message in context: http://www.nabble.com/How-to-Access-SDRAM---tp18810390p18810390.html
Sent from the linuxppc-embedded mailing list archive at Nabble.com.
^ permalink raw reply
* suffisant space for U-Boot, Linux and an initrd image ? (4MB SDRAM)
From: Fabien Oriede @ 2008-08-04 12:54 UTC (permalink / raw)
To: linuxppc-embedded
[-- Attachment #1: Type: text/plain, Size: 573 bytes --]
Hi all,
I would like to know if this is possible to port U-Boot, Linux and an initrd image on a board with 4MB of SDRAM ?
When Linux try to boot, there is this line on the terminal :
"Memory : 2036k available (1036k kernel code, 256k data, 80k init, 0k highmem)"
So I have 2036k memory available for my initrd image but I don't know if this is suffisant.
Thanks in advance.
Regards,
Fabien.
_____________________________________________________________________________
Envoyez avec Yahoo! Mail. Une boite mail plus intelligente http://mail.yahoo.fr
[-- Attachment #2: Type: text/html, Size: 1025 bytes --]
^ permalink raw reply
* Re: mISDN still breaking the allmodconfig build...
From: Karsten Keil @ 2008-08-04 12:56 UTC (permalink / raw)
To: Sinan Akman
Cc: sfr, Marcel Holtmann, linux-kernel, linuxppc-dev, akpm, torvalds,
David Miller
In-Reply-To: <488DC046.7060802@writeme.com>
On Mon, Jul 28, 2008 at 08:49:10AM -0400, Sinan Akman wrote:
> Karsten Keil wrote:
> >[...]
> >virt_to_bus() I never got a complain before and yes I already have some
> >patches
> >to solve the endian issues in the HFC driver, but it was not finaly
>
> Karsten, do you have those patches available somewhere ?
> I could give it a try on 4xx with a 4s card in the near future.
>
Already fixed in
git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/ISDN-2.6.git
--
Karsten Keil
SuSE Labs
ISDN and VOIP development
SUSE LINUX Products GmbH, Maxfeldstr.5 90409 Nuernberg, GF: Markus Rex, HRB 16746 (AG Nuernberg)
^ permalink raw reply
* mv643xx_eth changes for 2.6.27
From: Lennert Buytenhek @ 2008-08-04 12:42 UTC (permalink / raw)
To: linuxppc-dev
The mv643xx_eth ethernet driver has had some very heavy hacking done
to it during the 2.6.27 merge window:
$ wc -l linux-2.6.26/drivers/net/mv643xx_eth.c linux-2.6.27-rc1-git4/drivers/net/mv643xx_eth.c
3365 linux-2.6.26/drivers/net/mv643xx_eth.c
2653 linux-2.6.27-rc1-git4/drivers/net/mv643xx_eth.c
$ diff -u linux-2.6.26/drivers/net/mv643xx_eth.c linux-2.6.27-rc1-git4/drivers/net/mv643xx_eth.c
mv643xx_eth.c | 4774 ++++++++++++++++++++++++----------------------------------
1 file changed, 2031 insertions(+), 2743 deletions(-)
$
If you have any Linux-running device that has an mv643xx_eth in it (i.e.
if it has a Marvell Discovery controller or a Marvell ARM SoC in it),
please test 2.6.27-rc2 extensively (once it is released) and report
whether it works for you or not. IOW, please send me success reports
as well as failure reports.
Thanks.
^ permalink raw reply
* Re: suffisant space for U-Boot, Linux and an initrd image ? (4MB SDRAM)
From: Marco Stornelli @ 2008-08-04 13:43 UTC (permalink / raw)
To: Fabien Oriede; +Cc: linuxppc-embedded
In-Reply-To: <789365.58211.qm@web27401.mail.ukl.yahoo.com>
Fabien Oriede ha scritto:
> Hi all,
> I would like to know if this is possible to port U-Boot, Linux and an initrd image on a board with 4MB of SDRAM ?
> When Linux try to boot, there is this line on the terminal :
> "Memory : 2036k available (1036k kernel code, 256k data, 80k init, 0k highmem)"
> So I have 2036k memory available for my initrd image but I don't know if this is suffisant.
> Thanks in advance.
> Regards,
> Fabien.
>
>
> _____________________________________________________________________________
> Envoyez avec Yahoo! Mail. Une boite mail plus intelligente http://mail.yahoo.fr
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Linuxppc-embedded mailing list
> Linuxppc-embedded@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded
Only 4MB of sdram? As far as I know the smallest device with Linux is
picotux with 8MB of ram and 2MB of flash.
--
Marco Stornelli
Embedded Software Engineer
CoRiTeL - Consorzio di Ricerca sulle Telecomunicazioni
http://www.coritel.it
marco.stornelli@coritel.it
+39 06 72582838
^ permalink raw reply
* [PATCH 0/3 V2] powerpc - Make the irq reverse mapping tree lockless
From: Sebastien Dugue @ 2008-08-04 11:08 UTC (permalink / raw)
To: linuxppc-dev
Cc: tinytim, linux-rt-users, linux-kernel, rostedt, jean-pierre.dion,
paulus, gilles.carry, tglx
Hi ,
here is V2 of the patchset posted on July 31st updated from the comments
made by Michael Ellerman.
V1 -> V2:
- Initialize the XICS radix tree in xics code and only for that irq_host
rather than doing it for all the hosts in the powerpc irq generic code
(although the hosts list only contain one entry at the moment).
- Add a comment in irq_radix_revmap_lookup() stating why it is safe to
perform a lookup even if the radix tree has not been initialized yet.
The goal of this patchset is to simplify the locking constraints on the radix
tree used for IRQ reverse mapping on the pSeries machines and provide lockless
access to this tree.
This also solves the following BUG under preempt-rt:
BUG: sleeping function called from invalid context swapper(1) at kernel/rtmutex.c:739
in_atomic():1 [00000002], irqs_disabled():1
Call Trace:
[c0000001e20f3340] [c000000000010370] .show_stack+0x70/0x1bc (unreliable)
[c0000001e20f33f0] [c000000000049380] .__might_sleep+0x11c/0x138
[c0000001e20f3470] [c0000000002a2f64] .__rt_spin_lock+0x3c/0x98
[c0000001e20f34f0] [c0000000000c3f20] .kmem_cache_alloc+0x68/0x184
[c0000001e20f3590] [c000000000193f3c] .radix_tree_node_alloc+0xf0/0x144
[c0000001e20f3630] [c000000000195190] .radix_tree_insert+0x18c/0x2fc
[c0000001e20f36f0] [c00000000000c710] .irq_radix_revmap+0x1a4/0x1e4
[c0000001e20f37b0] [c00000000003b3f0] .xics_startup+0x30/0x54
[c0000001e20f3840] [c00000000008b864] .setup_irq+0x26c/0x370
[c0000001e20f38f0] [c00000000008ba68] .request_irq+0x100/0x158
[c0000001e20f39a0] [c0000000001ee9c0] .hvc_open+0xb4/0x148
[c0000001e20f3a40] [c0000000001d72ec] .tty_open+0x200/0x368
[c0000001e20f3af0] [c0000000000ce928] .chrdev_open+0x1f4/0x25c
[c0000001e20f3ba0] [c0000000000c8bf0] .__dentry_open+0x188/0x2c8
[c0000001e20f3c50] [c0000000000c8dec] .do_filp_open+0x50/0x70
[c0000001e20f3d70] [c0000000000c8e8c] .do_sys_open+0x80/0x148
[c0000001e20f3e20] [c00000000000928c] .init_post+0x4c/0x100
[c0000001e20f3ea0] [c0000000003c0e0c] .kernel_init+0x428/0x478
[c0000001e20f3f90] [c000000000027448] .kernel_thread+0x4c/0x68
The root cause of this bug lies in the fact that the XICS interrupt
controller uses a radix tree for its reverse irq mapping and that we cannot
allocate the tree nodes (even GFP_ATOMIC) with preemption disabled.
In fact, we have 2 nested preemption disabling when we want to allocate
a new node:
- setup_irq() does a spin_lock_irqsave() before calling xics_startup() which
then calls irq_radix_revmap() to insert a new node in the tree
- irq_radix_revmap() also does a spin_lock_irqsave() (in irq_radix_wrlock())
before the radix_tree_insert()
Also, if an IRQ gets registered before the tree is initialized (namely the
IPI), it will be inserted into the tree in interrupt context once the tree
have been initialized, hence the need for a spin_lock_irqsave() in the
insertion path.
This serie is split into 3 patches:
- The first patch moves the initialization of the radix tree earlier in the
boot process before any IRQ gets registered, but after the mm is up.
- The second patch splits irq_radix_revmap() into its 2 components: one
for lookup and one for insertion into the radix tree.
- And finally, the third patch makes the radix tree fully lockless on the
lookup side.
Here is the diffstat for the whole patchset:
arch/powerpc/include/asm/irq.h | 19 ++++-
arch/powerpc/kernel/irq.c | 130 +++++++--------------------------
arch/powerpc/platforms/pseries/smp.c | 1 +
arch/powerpc/platforms/pseries/xics.c | 17 +++--
arch/powerpc/platforms/pseries/xics.h | 1 +
5 files changed, 56 insertions(+), 112 deletions(-)
Thanks,
Sebastien.
^ permalink raw reply
* [PATCH 1/3] powerpc - Initialize the irq radix tree earlier
From: Sebastien Dugue @ 2008-08-04 11:08 UTC (permalink / raw)
To: linuxppc-dev
Cc: tinytim, linux-rt-users, linux-kernel, rostedt, jean-pierre.dion,
Sebastien Dugue, paulus, gilles.carry, tglx
In-Reply-To: <1217848124-3719-1-git-send-email-sebastien.dugue@bull.net>
The radix tree used for fast irq reverse mapping by the XICS is initialized
late in the boot process, after the first interrupt (IPI) gets registered
and after the first IPI is received.
This patch moves the initialization of the XICS radix tree earlier into
the boot process in smp_xics_probe() (the mm is already up but no interrupts
have been registered at that point) to avoid having to insert a mapping into
the tree in interrupt context. This will help in simplifying the locking
constraints and move to a lockless radix tree in subsequent patches.
Signed-off-by: Sebastien Dugue <sebastien.dugue@bull.net>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/kernel/irq.c | 17 -----------------
arch/powerpc/platforms/pseries/smp.c | 1 +
arch/powerpc/platforms/pseries/xics.c | 5 +++++
arch/powerpc/platforms/pseries/xics.h | 1 +
4 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index d972dec..9bef9f3 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -1016,23 +1016,6 @@ void irq_early_init(void)
get_irq_desc(i)->status |= IRQ_NOREQUEST;
}
-/* We need to create the radix trees late */
-static int irq_late_init(void)
-{
- struct irq_host *h;
- unsigned long flags;
-
- irq_radix_wrlock(&flags);
- list_for_each_entry(h, &irq_hosts, link) {
- if (h->revmap_type == IRQ_HOST_MAP_TREE)
- INIT_RADIX_TREE(&h->revmap_data.tree, GFP_ATOMIC);
- }
- irq_radix_wrunlock(flags);
-
- return 0;
-}
-arch_initcall(irq_late_init);
-
#ifdef CONFIG_VIRQ_DEBUG
static int virq_debug_show(struct seq_file *m, void *private)
{
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index 9d8f8c8..3d4429a 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -130,6 +130,7 @@ static void smp_xics_message_pass(int target, int msg)
static int __init smp_xics_probe(void)
{
+ xics_radix_revmap_init();
xics_request_IPIs();
return cpus_weight(cpu_possible_map);
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 0fc830f..d6e28f9 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -556,6 +556,11 @@ static struct irq_host_ops xics_host_ops = {
.xlate = xics_host_xlate,
};
+void __init xics_radix_revmap_init(void)
+{
+ INIT_RADIX_TREE(&xics_host->revmap_data.tree, GFP_ATOMIC);
+}
+
static void __init xics_init_host(void)
{
if (firmware_has_feature(FW_FEATURE_LPAR))
diff --git a/arch/powerpc/platforms/pseries/xics.h b/arch/powerpc/platforms/pseries/xics.h
index 1c5321a..11490be 100644
--- a/arch/powerpc/platforms/pseries/xics.h
+++ b/arch/powerpc/platforms/pseries/xics.h
@@ -19,6 +19,7 @@ extern void xics_setup_cpu(void);
extern void xics_teardown_cpu(void);
extern void xics_kexec_teardown_cpu(int secondary);
extern void xics_cause_IPI(int cpu);
+extern void xics_radix_revmap_init(void);
extern void xics_request_IPIs(void);
extern void xics_migrate_irqs_away(void);
--
1.5.5.1
^ permalink raw reply related
* [PATCH 2/3] powerpc - Separate the irq radix tree insertion and lookup
From: Sebastien Dugue @ 2008-08-04 11:08 UTC (permalink / raw)
To: linuxppc-dev
Cc: tinytim, linux-rt-users, linux-kernel, rostedt, jean-pierre.dion,
Sebastien Dugue, paulus, gilles.carry, tglx
In-Reply-To: <1217848124-3719-1-git-send-email-sebastien.dugue@bull.net>
irq_radix_revmap() currently serves 2 purposes, irq mapping lookup
and insertion which happen in interrupt and process context respectively.
Separate the function into its 2 components, one for lookup only and one
for insertion only.
Signed-off-by: Sebastien Dugue <sebastien.dugue@bull.net>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/include/asm/irq.h | 18 ++++++++++--
arch/powerpc/kernel/irq.c | 46 +++++++++++++++-----------------
arch/powerpc/platforms/pseries/xics.c | 11 +++-----
3 files changed, 41 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h
index a372f76..0a51376 100644
--- a/arch/powerpc/include/asm/irq.h
+++ b/arch/powerpc/include/asm/irq.h
@@ -236,15 +236,27 @@ extern unsigned int irq_find_mapping(struct irq_host *host,
extern unsigned int irq_create_direct_mapping(struct irq_host *host);
/**
- * irq_radix_revmap - Find a linux virq from a hw irq number.
+ * irq_radix_revmap_insert - Insert a hw irq to linux virq number mapping.
+ * @host: host owning this hardware interrupt
+ * @virq: linux irq number
+ * @hwirq: hardware irq number in that host space
+ *
+ * This is for use by irq controllers that use a radix tree reverse
+ * mapping for fast lookup.
+ */
+extern void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
+ irq_hw_number_t hwirq);
+
+/**
+ * irq_radix_revmap_lookup - Find a linux virq from a hw irq number.
* @host: host owning this hardware interrupt
* @hwirq: hardware irq number in that host space
*
* This is a fast path, for use by irq controller code that uses radix tree
* revmaps
*/
-extern unsigned int irq_radix_revmap(struct irq_host *host,
- irq_hw_number_t hwirq);
+extern unsigned int irq_radix_revmap_lookup(struct irq_host *host,
+ irq_hw_number_t hwirq);
/**
* irq_linear_revmap - Find a linux virq from a hw irq number.
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 9bef9f3..ba24efd 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -821,9 +821,6 @@ void irq_dispose_mapping(unsigned int virq)
host->revmap_data.linear.revmap[hwirq] = NO_IRQ;
break;
case IRQ_HOST_MAP_TREE:
- /* Check if radix tree allocated yet */
- if (host->revmap_data.tree.gfp_mask == 0)
- break;
irq_radix_wrlock(&flags);
radix_tree_delete(&host->revmap_data.tree, hwirq);
irq_radix_wrunlock(flags);
@@ -875,43 +872,44 @@ unsigned int irq_find_mapping(struct irq_host *host,
EXPORT_SYMBOL_GPL(irq_find_mapping);
-unsigned int irq_radix_revmap(struct irq_host *host,
- irq_hw_number_t hwirq)
+unsigned int irq_radix_revmap_lookup(struct irq_host *host,
+ irq_hw_number_t hwirq)
{
- struct radix_tree_root *tree;
struct irq_map_entry *ptr;
- unsigned int virq;
+ unsigned int virq = NO_IRQ;
unsigned long flags;
WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
- /* Check if the radix tree exist yet. We test the value of
- * the gfp_mask for that. Sneaky but saves another int in the
- * structure. If not, we fallback to slow mode
+ /* Note: It is safe to call radix_tree_lookup() here, even before the
+ * tree gets initialized because the struct irq_host is zallocated
+ * and radix_tree_lookup() returns NULL when root->rnode is found
+ * to be NULL.
+ * IOW, for any interrupt taken before the tree is initialized, we
+ * return NO_IRQ.
*/
- tree = &host->revmap_data.tree;
- if (tree->gfp_mask == 0)
- return irq_find_mapping(host, hwirq);
-
- /* Now try to resolve */
irq_radix_rdlock(&flags);
- ptr = radix_tree_lookup(tree, hwirq);
+ ptr = radix_tree_lookup(&host->revmap_data.tree, hwirq);
irq_radix_rdunlock(flags);
- /* Found it, return */
- if (ptr) {
+ if (ptr)
virq = ptr - irq_map;
- return virq;
- }
- /* If not there, try to insert it */
- virq = irq_find_mapping(host, hwirq);
+ return virq;
+}
+
+void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
+ irq_hw_number_t hwirq)
+{
+ unsigned long flags;
+
+ WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
+
if (virq != NO_IRQ) {
irq_radix_wrlock(&flags);
- radix_tree_insert(tree, hwirq, &irq_map[virq]);
+ radix_tree_insert(&host->revmap_data.tree, hwirq, &irq_map[virq]);
irq_radix_wrunlock(flags);
}
- return virq;
}
unsigned int irq_linear_revmap(struct irq_host *host,
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index d6e28f9..8c7f058 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -310,12 +310,6 @@ static void xics_mask_irq(unsigned int virq)
static unsigned int xics_startup(unsigned int virq)
{
- unsigned int irq;
-
- /* force a reverse mapping of the interrupt so it gets in the cache */
- irq = (unsigned int)irq_map[virq].hwirq;
- irq_radix_revmap(xics_host, irq);
-
/* unmask it */
xics_unmask_irq(virq);
return 0;
@@ -346,7 +340,7 @@ static inline unsigned int xics_remap_irq(unsigned int vec)
if (vec == XICS_IRQ_SPURIOUS)
return NO_IRQ;
- irq = irq_radix_revmap(xics_host, vec);
+ irq = irq_radix_revmap_lookup(xics_host, vec);
if (likely(irq != NO_IRQ))
return irq;
@@ -530,6 +524,9 @@ static int xics_host_map(struct irq_host *h, unsigned int virq,
{
pr_debug("xics: map virq %d, hwirq 0x%lx\n", virq, hw);
+ /* Insert the interrupt mapping into the radix tree for fast lookup */
+ irq_radix_revmap_insert(xics_host, virq, hw);
+
get_irq_desc(virq)->status |= IRQ_LEVEL;
set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq);
return 0;
--
1.5.5.1
^ permalink raw reply related
* [PATCH 3/3] powerpc - Make the irq reverse mapping radix tree lockless
From: Sebastien Dugue @ 2008-08-04 11:08 UTC (permalink / raw)
To: linuxppc-dev
Cc: tinytim, linux-rt-users, linux-kernel, rostedt, jean-pierre.dion,
Sebastien Dugue, paulus, gilles.carry, tglx
In-Reply-To: <1217848124-3719-1-git-send-email-sebastien.dugue@bull.net>
The radix trees used by interrupt controllers for their irq reverse mapping
(currently only the XICS found on pSeries) have a complex locking scheme
dating back to before the advent of the lockless radix tree.
Take advantage of this and of the fact that the items of the tree are
pointers to a static array (irq_map) elements which can never go under us
to simplify the locking.
Concurrency between readers and writers is handled by the intrinsic
properties of the lockless radix tree. Concurrency between writers is handled
with a spinlock added to the irq_host structure.
Signed-off-by: Sebastien Dugue <sebastien.dugue@bull.net>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/include/asm/irq.h | 1 +
arch/powerpc/kernel/irq.c | 71 ++++-----------------------------
arch/powerpc/platforms/pseries/xics.c | 1 +
3 files changed, 10 insertions(+), 63 deletions(-)
diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h
index 0a51376..43b6062 100644
--- a/arch/powerpc/include/asm/irq.h
+++ b/arch/powerpc/include/asm/irq.h
@@ -119,6 +119,7 @@ struct irq_host {
} linear;
struct radix_tree_root tree;
} revmap_data;
+ spinlock_t tree_lock;
struct irq_host_ops *ops;
void *host_data;
irq_hw_number_t inval_irq;
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index ba24efd..5d63255 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -439,8 +439,6 @@ void do_softirq(void)
static LIST_HEAD(irq_hosts);
static DEFINE_SPINLOCK(irq_big_lock);
-static DEFINE_PER_CPU(unsigned int, irq_radix_reader);
-static unsigned int irq_radix_writer;
struct irq_map_entry irq_map[NR_IRQS];
static unsigned int irq_virq_count = NR_IRQS;
static struct irq_host *irq_default_host;
@@ -583,57 +581,6 @@ void irq_set_virq_count(unsigned int count)
irq_virq_count = count;
}
-/* radix tree not lockless safe ! we use a brlock-type mecanism
- * for now, until we can use a lockless radix tree
- */
-static void irq_radix_wrlock(unsigned long *flags)
-{
- unsigned int cpu, ok;
-
- spin_lock_irqsave(&irq_big_lock, *flags);
- irq_radix_writer = 1;
- smp_mb();
- do {
- barrier();
- ok = 1;
- for_each_possible_cpu(cpu) {
- if (per_cpu(irq_radix_reader, cpu)) {
- ok = 0;
- break;
- }
- }
- if (!ok)
- cpu_relax();
- } while(!ok);
-}
-
-static void irq_radix_wrunlock(unsigned long flags)
-{
- smp_wmb();
- irq_radix_writer = 0;
- spin_unlock_irqrestore(&irq_big_lock, flags);
-}
-
-static void irq_radix_rdlock(unsigned long *flags)
-{
- local_irq_save(*flags);
- __get_cpu_var(irq_radix_reader) = 1;
- smp_mb();
- if (likely(irq_radix_writer == 0))
- return;
- __get_cpu_var(irq_radix_reader) = 0;
- smp_wmb();
- spin_lock(&irq_big_lock);
- __get_cpu_var(irq_radix_reader) = 1;
- spin_unlock(&irq_big_lock);
-}
-
-static void irq_radix_rdunlock(unsigned long flags)
-{
- __get_cpu_var(irq_radix_reader) = 0;
- local_irq_restore(flags);
-}
-
static int irq_setup_virq(struct irq_host *host, unsigned int virq,
irq_hw_number_t hwirq)
{
@@ -788,7 +735,6 @@ void irq_dispose_mapping(unsigned int virq)
{
struct irq_host *host;
irq_hw_number_t hwirq;
- unsigned long flags;
if (virq == NO_IRQ)
return;
@@ -821,9 +767,9 @@ void irq_dispose_mapping(unsigned int virq)
host->revmap_data.linear.revmap[hwirq] = NO_IRQ;
break;
case IRQ_HOST_MAP_TREE:
- irq_radix_wrlock(&flags);
+ spin_lock(&host->tree_lock);
radix_tree_delete(&host->revmap_data.tree, hwirq);
- irq_radix_wrunlock(flags);
+ spin_unlock(&host->tree_lock);
break;
}
@@ -877,7 +823,6 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
{
struct irq_map_entry *ptr;
unsigned int virq = NO_IRQ;
- unsigned long flags;
WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
@@ -888,9 +833,11 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
* IOW, for any interrupt taken before the tree is initialized, we
* return NO_IRQ.
*/
- irq_radix_rdlock(&flags);
+ /*
+ * No rcu_read_lock(ing) needed, the ptr returned can't go under us
+ * as it's referencing an entry in the static irq_map table.
+ */
ptr = radix_tree_lookup(&host->revmap_data.tree, hwirq);
- irq_radix_rdunlock(flags);
if (ptr)
virq = ptr - irq_map;
@@ -901,14 +848,12 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
irq_hw_number_t hwirq)
{
- unsigned long flags;
-
WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
if (virq != NO_IRQ) {
- irq_radix_wrlock(&flags);
+ spin_lock(&host->tree_lock);
radix_tree_insert(&host->revmap_data.tree, hwirq, &irq_map[virq]);
- irq_radix_wrunlock(flags);
+ spin_unlock(&host->tree_lock);
}
}
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 8c7f058..014439f 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -556,6 +556,7 @@ static struct irq_host_ops xics_host_ops = {
void __init xics_radix_revmap_init(void)
{
INIT_RADIX_TREE(&xics_host->revmap_data.tree, GFP_ATOMIC);
+ spin_lock_init(&xics_host->tree_lock);
}
static void __init xics_init_host(void)
--
1.5.5.1
^ permalink raw reply related
* Re: nfsd, v4: oops in find_acceptable_alias, ppc32 Linux, post-2.6.27-rc1
From: Michael Ellerman @ 2008-08-04 14:36 UTC (permalink / raw)
To: Paul Collins
Cc: Neil Brown, J. Bruce Fields, nfsv4, linux-kernel, linuxppc-dev
In-Reply-To: <87y73dcd60.fsf@burly.wgtn.ondioline.org>
[-- Attachment #1: Type: text/plain, Size: 1077 bytes --]
On Mon, 2008-08-04 at 22:00 +1200, Paul Collins wrote:
> Paul Collins <paul@burly.ondioline.org> writes:
>
> > Neil Brown <neilb@suse.de> writes:
> >> Could you try removing the 'static' declaration for nfsd_acceptable
> >> and recompile?
> >> Or maybe try a different compiler?
> >
> > I will give these a try this evening.
>
> I built myself a nice new cross compiler:
>
> powerpc-linux-gnu-gcc-4.1 (GCC) 4.1.3 20080623 (prerelease) (Debian 4.1.2-23)
>
> and rebuilt 94ad374a0751f40d25e22e036c37f7263569d24c. Running that on
> the server and 2.6.26 on the client, I got yet another Oops. This one
> locked the machine up pretty good, so all I have is a picture:
>
> http://ondioline.org/~paul/DSCN1608.JPG
Wow.
Can you try building a kernel on the server? ie. not over NFS.
cheers
--
Michael Ellerman
OzLabs, IBM Australia Development Lab
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)
We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* PS3 early lock-up
From: Geert Uytterhoeven @ 2008-08-04 15:48 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Linux/PPC Development
[-- Attachment #1: Type: TEXT/PLAIN, Size: 2591 bytes --]
On PS3, recent kernels lock up in the very early stage (i.e. before mere
mortals get to see a working console). The kernel crashes with
| kernel BUG at linux/arch/powerpc/platforms/ps3/htab.c:141!
Bisecting shows this happens since:
| commit a1f242ff460e4b50a045fa237c3c56cce9eabf83
| Author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| Date: Wed Jul 23 21:27:08 2008 -0700
|
| powerpc ioremap_prot
|
| This adds ioremap_prot and pte_pgprot() so that one can extract protection
| bits from a PTE and use them to ioremap_prot() (in order to support ptrace
| of VM_IO | VM_PFNMAP as per Rik's patch).
|
| This moves a couple of flag checks around in the ioremap implementations
| of arch/powerpc. There's a side effect of allowing non-cacheable and
| non-guarded mappings on ppc32 which before would always have _PAGE_GUARDED
| set whenever _PAGE_NO_CACHE is.
|
| (standard ioremap will still set _PAGE_GUARDED, but ioremap_prot will be
| capable of setting such a non guarded mapping).
Inside ps3_hpte_insert(), lv1_write_htab_entry() fails with error code 5
(LV1_ACCESS_VIOLATION) when adding the PS3 hotplug memory.
debug_dump_hpte() prints for the offending hpte:
| pa = 500001000000h
| lpar = 500001000000h
| va = adc7d4c2d0000000h
| group = 6168h
| bitmap = 0h
| hpte.v = adc7d4c2d011h
| hpte.r = 500001000115h
^
| psize = 0h
| slot = 6168h
After manually reverting the offending commit, the system boots again. The only
change is:
| pa = 500001000000h
| lpar = 500001000000h
| va = adc7d4c2d0000000h
| group = 6168h
| bitmap = 0h
| hpte.v = adc7d4c2d011h
| hpte.r = 500001000117h
^
| psize = 0h
| slot = 6168h
Note that when adding the initial (non-hotplug) memory, hpte.r always ends in
`194', both before and after reverting the offending commit.
ps3_hpte_insert() seems to be called during system initialization with the
following values of rflags:
- first call: 0x190
- initial memory: 0x194 (455 times)
- hotplug memory:
o crash: 0x115
o OK: 0x117
Do you have an idea of what's really going on?
Thanks!
With kind regards,
Geert Uytterhoeven
Software Architect
Sony Techsoft Centre Europe
The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium
Phone: +32 (0)2 700 8453
Fax: +32 (0)2 700 8622
E-mail: Geert.Uytterhoeven@sonycom.com
Internet: http://www.sony-europe.com/
A division of Sony Europe (Belgium) N.V.
VAT BE 0413.825.160 · RPR Brussels
Fortis 293-0376800-10 GEBA-BE-BB
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox