10 Jul, 2009
2 commits
-
The timer migration expiry check should prevent the migration of a
timer to another CPU when the timer expires before the next event is
scheduled on the other CPU. Migrating the timer might delay it because
we can not reprogram the clock event device on the other CPU. But the
code implementing that check has two flaws:- for !HIGHRES the check compares the expiry value with the clock
events device expiry value which is wrong for CLOCK_REALTIME based
timers.- the check is racy. It holds the hrtimer base lock of the target CPU,
but the clock event device expiry value can be modified
nevertheless, e.g. by an timer interrupt firing.The !HIGHRES case is easy to fix as we can enqueue the timer on the
cpu which was selected by the load balancer. It runs the idle
balancing code once per jiffy anyway. So the maximum delay for the
timer is the same as when we keep the tick on the current cpu going.In the HIGHRES case we can get the next expiry value from the hrtimer
cpu_base of the target CPU and serialize the update with the cpu_base
lock. This moves the lock section in hrtimer_interrupt() so we can set
next_event to KTIME_MAX while we are handling the expired timers and
set it to the next expiry value after we handled the timers under the
base lock. While the expired timers are processed timer migration is
blocked because the expiry time of the timer is always -
The timer migration code needs to check whether the expiry time of the
timer is before the programmed clock event expiry time when the timer
is enqueued on another CPU because we can not reprogram the timer
device on the other CPU. The current logic checks the expiry time even
if we enqueue on the current CPU when nohz_get_load_balancer() returns
current CPU. This might lead to an endless loop in the expiry check
code when the expiry time of the timer is before the current
programmed next event.Check whether nohz_get_load_balancer() returns current CPU and skip
the expiry check if this is the case.The bug was triggered from the networking code. The patch fixes the
regression http://bugzilla.kernel.org/show_bug.cgi?id=13738
(Soft-Lockup/Race in networking in 2.6.31-rc1+195)Cc: Arun Bharadwaj
Tested-by: Andres Freund
Signed-off-by: Thomas Gleixner
24 Jun, 2009
1 commit
-
When the kernel is configured with CONFIG_TIMER_STATS but timer
stats are runtime disabled we still get calls to
__timer_stats_timer_set_start_info which initializes some
fields in the corresponding struct timer_list.So add some quick checks in the the timer stats setup functions
to avoid function calls to __timer_stats_timer_set_start_info
when timer stats are disabled.In an artificial workload that does nothing but playing ping
pong with a single tcp packet via loopback this decreases cpu
consumption by 1 - 1.5%.This is part of a modified function trace output on SLES11:
perl-2497 [00] 28630647177732388 [+ 125]: sk_reset_timer
Cc: Andrew Morton
Cc: Martin Schwidefsky
Cc: Mustafa Mesanovic
Cc: Arjan van de Ven
LKML-Reference:
Signed-off-by: Ingo Molnar
23 Jun, 2009
37 commits
-
Poornima Nayek reported:
| Timer migration interface /proc/sys/kernel/timer_migration in
| 2.6.30-git9 accepts any numerical value as input.
|
| Steps to reproduce:
| 1. echo -6666666 > /proc/sys/kernel/timer_migration
| 2. cat /proc/sys/kernel/timer_migration
| -6666666
|
| 1. echo 44444444444444444444444444444444444444444444444444444444444 > /proc/sys/kernel/timer_migration
| 2. cat /proc/sys/kernel/timer_migration
| -1357789412
|
| Expected behavior: Should 'echo: write error: Invalid argument' while
| setting any value other then 0 & 1Restrict valid values to 0 and 1.
Reported-by: Poornima Nayak
Tested-by: Poornima Nayak
Signed-off-by: Arun R Bharadwaj
Cc: poornima nayak
Cc: Arun Bharadwaj
LKML-Reference:
Signed-off-by: Ingo Molnar -
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin: (27 commits)
Blackfin: fix dma-mapping build errors
Blackfin: hook up new perf_counter_open syscall
Blackfin: drop BF535-specific text for exception 0x2A (unaligned instruction)
Blackfin: fix early crash when booting on wrong cpu
Blackfin: fix GPTMR0_CLOCKSOURCE dependency on BFIN_GPTIMERS
Blackfin: drop unused ISP1760 port1_disable from board resources
Blackfin: bf526-ezbrd: handle different SDRAM chips
Blackfin: fix typo in TRAS define in mem_init.h header
Blackfin: unify memory map headers
Blackfin: stick the CPU name into boot image name
Blackfin: update defconfigs
Blackfin: decouple unrelated cache settings to get exact behavior
Blackfin: update I-pipe patch level
Blackfin: remove obsolete mcount support from I-pipe code
Blackfin: allow CONFIG_TICKSOURCE_GPTMR0 with interrupt pipeline
Blackfin: convert interrupt pipeline to irqflags
Blackfin: allow people to select BF51x-0.1 silicon rev
Blackfin: bf526-ezbrd: set SPI flash resources to SST device
Blackfin: fix accidental reset in some boot modes
Blackfin: abstract irq14 lowering in do_irq
... -
* git://git.infradead.org/~dwmw2/iommu-2.6.31:
intel-iommu: Fix one last ia64 build problem in Pass Through Support
VT-d: support the device IOTLB
VT-d: cleanup iommu_flush_iotlb_psi and flush_unmaps
VT-d: add device IOTLB invalidation support
VT-d: parse ATSR in DMA Remapping Reporting Structure
PCI: handle Virtual Function ATS enabling
PCI: support the ATS capability
intel-iommu: dmar_set_interrupt return error value
intel-iommu: Tidy up iommu->gcmd handling
intel-iommu: Fix tiny theoretical race in write-buffer flush.
intel-iommu: Clean up handling of "caching mode" vs. IOTLB flushing.
intel-iommu: Clean up handling of "caching mode" vs. context flushing.
VT-d: fix invalid domain id for KVM context flush
Fix !CONFIG_DMAR build failure introduced by Intel IOMMU Pass Through Support
Intel IOMMU Pass Through SupportFix up trivial conflicts in drivers/pci/{intel-iommu.c,intr_remapping.c}
-
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
firewire: new stack is no longer experimental
firewire: net: better FIFO address range check and rcodes
firewire: net: fix card driver reloading
firewire: core: fix iso context shutdown on card removal
firewire: core: fix DMA unmapping in iso buffer removal
firewire: net: adjust net_device ops
firewire: net: remove unused code
firewire: net: allow for unordered unit discovery
firewire: net: style changes
firewire: net: add Kconfig item, rename driver
firewire: add IPv4 support -
Signed-off-by: Trond Myklebust
Signed-off-by: Linus Torvalds -
Signed-off-by: Trond Myklebust
Signed-off-by: Linus Torvalds -
As noted in the previous patch, the NFSv4 client mount code currently
has several limitations. If the mount path contains symlinks, or
referrals, or even if it just contains a '..', then the client code in
nfs4_path_walk() will fail with an error.This patch replaces the nfs4_path_walk()-based lookup with a helper
function that sets up a private namespace to represent the namespace on the
server, then uses the ordinary VFS and NFS path lookup code to walk down the
mount path in that namespace.Signed-off-by: Trond Myklebust
Signed-off-by: Linus Torvalds -
The purpose of this patch is to improve the remote mount path lookup
support for distributed filesystems such as the NFSv4 client.When given a mount command of the form "mount server:/foo/bar /mnt", the
NFSv4 client is required to look up the filehandle for "server:/", and
then look up each component of the remote mount path "foo/bar" in order
to find the directory that is actually going to be mounted on /mnt.
Following that remote mount path may involve following symlinks,
crossing server-side mount points and even following referrals to
filesystem volumes on other servers.Since the standard VFS path lookup code already supports walking paths
that contain all these features (using in-kernel automounts for
following referrals) we would like to be able to reuse that rather than
duplicate the full path traversal functionality in the NFSv4 client code.This patch therefore defines a VFS helper function create_mnt_ns(), that
sets up a temporary filesystem namespace and attaches a root filesystem to
it. It exports the create_mnt_ns() and put_mnt_ns() function for use by
filesystem modules.Signed-off-by: Trond Myklebust
Signed-off-by: Linus Torvalds -
In order to allow modules to use it without having to export vfsmount_lock.
Signed-off-by: Trond Myklebust
Signed-off-by: Linus Torvalds -
SLAB uses get/put_online_cpus() which use a mutex which is itself only
initialized when cpu_hotplug_init() is called. Currently we hang suring
boot in SLAB due to doing that too late.Reported by James Bottomley and Sachin Sant (and possibly others).
Debugged by Benjamin Herrenschmidt.This just removes the dynamic initialization of the data structures, and
replaces it with a static one, avoiding this dependency entirely, and
removing one unnecessary special initcall.Tested-by: Sachin Sant
Tested-by: James Bottomley
Tested-by: Benjamin Herrenschmidt
Signed-off-by: Linus Torvalds -
The recent deprecation of dma_sync_{sg,single} ironically broke Blackfin
systems. This is because we don't define dma_sync_sg_for_cpu at all, so
until the DMA asm-generic conversion/cleanup is done after the next
release, simply stub out the dma_sync_sg_for_{cpu,device} functions.Signed-off-by: FUJITA Tomonori
Signed-off-by: Mike Frysinger -
Signed-off-by: Mike Frysinger
-
We don't support the BF535 at all, and the exception 0x2A text specific to
it is pretty verbose and confusing (since the behavior is simply odd), so
punt it to keep the noise down.Signed-off-by: Yi Li
Signed-off-by: Mike Frysinger -
Make sure we process the kernel command line before poking the hardware,
so that we can process early printk. This helps ensure that if you boot
a kernel configured for a different processor, something will be left in
the log buffer.Signed-off-by: Robin Getz
Signed-off-by: Mike Frysinger -
The GPTMR0_CLOCKSOURCE Kconfig option requires the gptimers framework, so
make sure it is selected when this option is enabled.Reported-by: Peter Meerwald
Signed-off-by: Mike Frysinger -
The port1 disable stuff was dropped from the USB ISP1760, so update the
Blackfin boards accordingly.Signed-off-by: Mike Frysinger
-
The BF526-EZBRD changed SDRAM chips between board revisions, so create a
timing table that can accommodate both.Signed-off-by: Graf Yang
Signed-off-by: Mike Frysinger -
We defined SDRAM_tRAS to TRAS_4, but then wrongly defined SDRAM_tRAS_num
to 3.Signed-off-by: Graf Yang
Signed-off-by: Mike Frysinger -
Many aspects of the Blackfin memory map is exactly the same across all
variants. Rather than copy and paste all of these duplicated values in
each header, unify all of these into the common Blackfin memory map header
file. In the process, push down BF561 SMP specific stuff to the BF561
specific header to keep the noise down.Signed-off-by: Mike Frysinger
-
Rather than use "Linux" in the boot image name (as this is redundant --
the image type is already set to "linux"), use the CPU name. This makes
it fairly obvious when a wrong image is accidentally booted. Otherwise
there is no kernel output and you waste time scratching your head
wondering wtf just happened.Signed-off-by: Robin Getz
Signed-off-by: Mike Frysinger -
Signed-off-by: Mike Frysinger
-
The current cache options don't really represent the hardware features.
They end up setting different aspects of the hardware so that the end
result is to turn on/off the cache. Unfortunately, when we hit cache
problems with the hardware, it's difficult to test different settings to
root cause the problem. The current settings also don't cleanly allow for
different caching behaviors with different regions of memory.So split the configure options such that they properly reflect the settings
that are applied to the hardware.Signed-off-by: Jie Zhang
Signed-off-by: Mike Frysinger -
Signed-off-by: Philippe Gerum
Signed-off-by: Mike Frysinger -
Signed-off-by: Philippe Gerum
Signed-off-by: Mike Frysinger -
Signed-off-by: Philippe Gerum
Signed-off-by: Mike Frysinger -
Signed-off-by: Philippe Gerum
Signed-off-by: Mike Frysinger -
Now that 0.1 of the BF51x is coming out, allow people to build for it.
Signed-off-by: Mike Frysinger
-
The BF526-EZBRD has a SST SPI flash on it, not a ST Micro.
Signed-off-by: Graf Yang
Signed-off-by: Mike Frysinger -
We read the SWRST (Software Reset) register to get at the last reset
state, and then we may configure the DOUBLE_FAULT bit to control behavior
when a double fault occurs. But if the lower bits of the register is
already set (like UART boot mode on a BF54x), we inadvertently make the
system reset by writing to the SYSTEM_RESET field at the same time. So
make sure the lower 4 bits are always cleared.Signed-off-by: Sonic Zhang
Signed-off-by: Mike Frysinger -
Split out the optional IRQ14 lowering code to further simplify the
asm_do_IRQ() function and keep the ifdef nest under control.Signed-off-by: Mike Frysinger
-
Take a page from x86 and abstract the stack checking out of the
asm_do_IRQ() function so that the result is easier to digest.Signed-off-by: Mike Frysinger
-
Signed-off-by: Mike Frysinger
-
With the common IRQ code initializing much more of the irq_desc state, we
can't blindly initialize it ourselves to the local bad_irq state. If we
do, we end up wrongly clobbering many fields. So punt most of the bad irq
code as the common layers will handle the default state, and simply call
handle_bad_irq() directly when the IRQ we are processing is invalid.Signed-off-by: Mike Frysinger
-
Update anomaly headers to match latest released anomaly sheets.
Signed-off-by: Mike Frysinger
-
The BF533-EZKIT has two Flash In-System Programming devices hooked up to
the async memory bus, so add resources for the primary flashes and the
SRAMs on the devices.Signed-off-by: Mike Frysinger
-
The common DSA code changed structure layout, so update the BF518F-EZBRD
resources accordingly.Signed-off-by: Mike Frysinger
-
The kgdb (in multiple places) and traps code developed pretty much
identical checks for how to access different regions of the Blackfin
memory map, but each wasn't 100%, so unify them to avoid duplication,
bitrot, and bugs with edge cases.Signed-off-by: Mike Frysinger