Secondary CPU bringup typically calls calibrate_delay() during its
initialization. However, calibrate_delay() modifies a global variable
(loops_per_jiffy) used for udelay() and __delay().
A side effect of 71c696b1 ("calibrate: extract fall-back calculation
into own helper") introduced in the 2.6.39 merge window means that we
end up with a substantial period where loops_per_jiffy is zero. This
causes the spinlock debugging code to malfunction:
u64 loops = loops_per_jiffy * HZ;
for (;;) {
for (i = 0; i < loops; i++) {
if (arch_spin_trylock(&lock->raw_lock))
return;
__delay(1);
}
...
}
by never calling arch_spin_trylock() - resulting in the CPU locking
up in an infinite loop inside __spin_lock_debug().
Work around this by only writing to loops_per_jiffy only once we have
completed all the calibration decisions.
Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: <stable@kernel.org> (2.6.39-stable)
--
Better solutions (such as omitting the calibration for secondary CPUs,
or arranging for calibrate_delay() to return the LPJ value and leave
it to the caller to decide where to store it) are a possibility, but
would be much more invasive into each architecture.
I think this is the best solution for -rc and stable, but it should be
revisited for the next merge window.
init/calibrate.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
The driver went to initialize its waitqueue at the start of the main
processing thread. However, it is possible that this thread is not
scheduled on a CPU before the write function is called which leads to a
following error:
BUG: spinlock bad magic on CPU#1, swapper/1
lock: f5f3ebdc, .magic: 00000000, .owner: <none>/-1, .owner_cpu: 0
Pid: 1, comm: swapper Not tainted 3.0.0-rc2+ #67
Call Trace:
[<c1289663>] spin_bug+0xa3/0xf0
[<c12897ad>] do_raw_spin_lock+0x7d/0x150
[<c14963de>] _raw_spin_lock_irqsave+0x4e/0x60
[<c102f2bb>] __wake_up+0x1b/0x50
[<c12d3715>] serial_m3110_con_write+0x55/0x60
[<c1041575>] __call_console_drivers+0x75/0x90
[<c10415d9>] _call_console_drivers+0x49/0x80
[<c1041baa>] console_unlock+0xca/0x1f0
[<c10420ef>] vprintk+0x18f/0x4f0
[<c14928a3>] printk+0x18/0x1a
[<c1042730>] register_console+0x2e0/0x350
[<c12d098e>] uart_add_one_port+0x33e/0x3d0
[<c1485ba6>] serial_m3110_probe+0x1c2/0x1df
[<c1303db7>] spi_drv_probe+0x17/0x20
...
Fix this by initializing the waitqueue before the main thread is
created.
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Change print message to notice instead of error to clean up non critical
messages showing on startup. The MAX3111 not being present is a normal
path for end user systems.
Signed-off-by: William Douglas <william.douglas@intel.com>
[rebased on 3.0, switched to dev_dbg()]
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
I realized the new descriptions of ADDED and REMOVED could also be
misleading: they can also be triggered after using a userland util
(ubi{mk,rm}vol).
Artem: amend the commentaries
Signed-off-by David Wagner <david.wagner@free-electrons.com>
Signed-off-by: Artem Bityutskiy <dedekind1@gmail.com>
"status" should be an int here for the error handling to work.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
These sk_buff structs were allocated with nlmsg_new() so they should
be freed with nlmsg_free().
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
The SMP TWD on the ux500 will change frequency at the same time as
the CPU. Loop back the frequency presented from the CPU into a
clock that is looked up by the SMP TWD driver with the new cpufreq
notifier hook.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
The U300 just defined the fill level limits for the FIFOs to
1 item out of habit. It can easily handle four.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Use the new clockevents_config_and_register() function to register
the U300 clockevent, since that code requires ->cpumask to be set
we set this even on this UP system to please the framework.
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This adds the necessary Kconfig entry for a Snowball board.
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Robert Marklund <robert.marklund@stericsson.com>
This sets up a few GPIO pins and some pinmuxing on platform boot
for the Snowball board. Based on work from Mathieu J. Poirier
<mathieu.poirier@linaro.org>.
Signed-off-by: Robert Marklund <robert.marklund@stericsson.com>
With SDI support for the Snowball we can boot from the
SD card.
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Robert Marklund <robert.marklund@stericsson.com>
The UART setting in uncompress.h changes on the Snowball board.
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Robert Marklund <robert.marklund@stericsson.com>
Based on work from Mathieu J. Poirier <mathieu.poirier@linaro.org>
For more information on snowball please visit
http://www.igloocommunity.org
Signed-off-by: Robert Marklund <robert.marklund@stericsson.com>
This adds support for a configuring the minimum number of links that
must be active before asserting carrier. It is similar to the Cisco
EtherChannel min-links feature. This allows setting the minimum number
of member ports that must be up (link-up state) before marking the
bond device as up (carrier on). This is useful for situations where
higher level services such as clustering want to ensure a minimum
number of low bandwidth links are active before switchover.
See:
http://bugzilla.vyatta.com/show_bug.cgi?id=7196
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: Flavio Leitner <fbl@redhat.com>
Signed-off-by: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
BIOS lists the internal speaker as an internal line-out. Change to
internal speaker + model=auto for better auto-mute capabilities.
BugLink: http://bugs.launchpad.net/bugs/754964
Reported-by: Marc Legris <marc.legris@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
* 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6: (58 commits)
drm/nouveau: fix off-by-one
drm/nouveau/temp: Add default calibration values for nv67
drm/nouveau/temp: Fix signed/unsigned int logic
drm/nvc0: push prunk140 irq messages to debug loglevel
drm/nouveau: un-blacklist nvce accel
drm/nouveau: fix null pointer deref on pre-nv50 chipsets
drm/nouveau: rework vram init/fini ordering a little
drm/nouveau: shut lockdep up if last vm ref needs to destroy pgd
drm/nouveau: fix display takedown order to match reverse init order
drm/nvc0: enable per-client address spaces
drm/nouveau: add some debug output if nouveau_mm busy at destroy time
drm/nv50: enable use of per-client gpu address space
drm/nouveau: remove implicit mapping of every bo into chan_vm
drm/nouveau: remove 'chan' argument from nouveau_bo_new
drm/nouveau: fixup gem_info ioctl to return client-specific bo virtual
drm/nvc0: explicitly map PDISP semaphore buffer into each channel's vm
drm/nv50-nvc0: lookup pushbuf virtual address on dma_push
drm/nv84-nvc0: explicitly map semaphore buffer into channel vm
drm/nv50-nvc0: explicitly map pushbuf bo into channel vm
drm/nv50-nvc0: explicitly map notifier bo into channel vm
...
Many (all?) of the coefficients related to calculating the
correct temperature are signed integers
This patch correcly parses and stores those values
It also ensures that the default offset is 0 (previously 1)
Affected cards - the original nv50 and the nv40 family
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Commit "drm/nouveau: add some debug output if nouveau_mm busy at destroy time"
revealed an issue where vram mm takedown would actually fail due to there
still being nodes present, causing nouveau to leak a small amount of memory
on module unload.
This splits TTM/nouveau_mm a bit more cleanly and ensures nouveau_mm fini
isn't done until all gpuobjs are also destroyed.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
GPU virtual addresses are constant now so this should never be getting hit
anyway and userspace shouldn't break from them being ignored.
This is being done in preference to teaching the code how to deal with BOs
that exist at different virtual addresses within separate VMs.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Greatly simplifies a number of things, particularly once per-client GPU
address spaces are involved.
May add this back later once I know what things'll look like.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Was previously assuming a page size of 4KiB unless a VMA was present to
override it. Eventually, a buffer won't necessarily have a VMA at all at
some stages of its life, so we need to store this info elsewhere.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Abuses existing gpuobj_new() chan argument for this, which in turn forces
all NVOBJ_FLAG_VM allocations to be done from the global heap, not
suballocated from the channel's private heap. Not a problem though in
practise.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>