From: Greg Kroah-Hartman Date: Mon, 29 Jun 2009 23:04:57 +0000 (-0700) Subject: .30 patches X-Git-Tag: v2.6.27.26~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f4ef60657717aea6947f7f35a6ed49c4341cab2b;p=thirdparty%2Fkernel%2Fstable-queue.git .30 patches --- diff --git a/queue-2.6.30/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch b/queue-2.6.30/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch new file mode 100644 index 00000000000..c1b04ceba60 --- /dev/null +++ b/queue-2.6.30/alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch @@ -0,0 +1,42 @@ +From 601e1cc5df940b59e71c947726640811897d30df Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Tue, 2 Jun 2009 11:37:01 +0200 +Subject: ALSA: ca0106 - Add missing registrations of vmaster controls + +From: Takashi Iwai + +commit 601e1cc5df940b59e71c947726640811897d30df upstream. + +Although the vmaster controls are created, they aren't registered thus +they don't appear in the real world. Added the missing snd_ctl_add() +calls. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/ca0106/ca0106_mixer.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/sound/pci/ca0106/ca0106_mixer.c ++++ b/sound/pci/ca0106/ca0106_mixer.c +@@ -841,6 +841,9 @@ int __devinit snd_ca0106_mixer(struct sn + snd_ca0106_master_db_scale); + if (!vmaster) + return -ENOMEM; ++ err = snd_ctl_add(card, vmaster); ++ if (err < 0) ++ return err; + add_slaves(card, vmaster, slave_vols); + + if (emu->details->spi_dac == 1) { +@@ -848,6 +851,9 @@ int __devinit snd_ca0106_mixer(struct sn + NULL); + if (!vmaster) + return -ENOMEM; ++ err = snd_ctl_add(card, vmaster); ++ if (err < 0) ++ return err; + add_slaves(card, vmaster, slave_sws); + } + return 0; diff --git a/queue-2.6.30/alsa-cmi8330-fix-mpu-401-pnp-init-copy-paste-bug.patch b/queue-2.6.30/alsa-cmi8330-fix-mpu-401-pnp-init-copy-paste-bug.patch new file mode 100644 index 00000000000..6802f13cdb6 --- /dev/null +++ b/queue-2.6.30/alsa-cmi8330-fix-mpu-401-pnp-init-copy-paste-bug.patch @@ -0,0 +1,30 @@ +From c2a30d711852e4f39c8a79135b3caa701f7a8e02 Mon Sep 17 00:00:00 2001 +From: Ondrej Zary +Date: Sat, 27 Jun 2009 16:17:08 +0200 +Subject: ALSA: cmi8330: fix MPU-401 PnP init copy&paste bug + +From: Ondrej Zary + +commit c2a30d711852e4f39c8a79135b3caa701f7a8e02 upstream. + +Fix copy&paste bug in PnP MPU-401 initialization. + +Signed-off-by: Ondrej Zary +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/isa/cmi8330.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/isa/cmi8330.c ++++ b/sound/isa/cmi8330.c +@@ -338,7 +338,7 @@ static int __devinit snd_cmi8330_pnp(int + return -EBUSY; + + acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL); +- if (acard->play == NULL) ++ if (acard->mpu == NULL) + return -EBUSY; + + pdev = acard->cap; diff --git a/queue-2.6.30/alsa-hda-add-quirk-for-sony-vaio-z21mn.patch b/queue-2.6.30/alsa-hda-add-quirk-for-sony-vaio-z21mn.patch new file mode 100644 index 00000000000..6d375d9010b --- /dev/null +++ b/queue-2.6.30/alsa-hda-add-quirk-for-sony-vaio-z21mn.patch @@ -0,0 +1,28 @@ +From 376b508ffde3b17e105265f89b83bdb044b1c1ae Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 22 Jun 2009 11:03:13 +0200 +Subject: ALSA: hda - Add quirk for Sony VAIO Z21MN + +From: Takashi Iwai + +commit 376b508ffde3b17e105265f89b83bdb044b1c1ae upstream. + +It needs model=toshiba-s06 to work with the digital-mic. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -10915,6 +10915,7 @@ static struct snd_pci_quirk alc262_cfg_t + SND_PCI_QUIRK(0x104d, 0x8203, "Sony UX-90", ALC262_HIPPO), + SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD", ALC262_SONY_ASSAMD), + SND_PCI_QUIRK(0x104d, 0x9016, "Sony VAIO", ALC262_AUTO), /* dig-only */ ++ SND_PCI_QUIRK(0x104d, 0x9025, "Sony VAIO Z21MN", ALC262_TOSHIBA_S06), + SND_PCI_QUIRK_MASK(0x104d, 0xff00, 0x9000, "Sony VAIO", + ALC262_SONY_ASSAMD), + SND_PCI_QUIRK(0x1179, 0x0001, "Toshiba dynabook SS RX1", diff --git a/queue-2.6.30/alsa-hda-get-back-input-source-for-alc262-toshiba-s06-model.patch b/queue-2.6.30/alsa-hda-get-back-input-source-for-alc262-toshiba-s06-model.patch new file mode 100644 index 00000000000..bc0733566a9 --- /dev/null +++ b/queue-2.6.30/alsa-hda-get-back-input-source-for-alc262-toshiba-s06-model.patch @@ -0,0 +1,33 @@ +From ae14ef68e8e67ca5b8b29f0eb640f7c106617f4e Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 22 Jun 2009 08:16:56 +0200 +Subject: ALSA: hda - Get back Input Source for ALC262 toshiba-s06 model + +From: Takashi Iwai + +commit ae14ef68e8e67ca5b8b29f0eb640f7c106617f4e upstream. + +The commit f9e336f65b666b8f1764d17e9b7c21c90748a37e + ALSA: hda - Unify capture mixer creation in realtek codes +removed the "Input Source" mixer element creation for toshiba-s06 model +because it contains a digital-mic input. + +This patch take the control back. + +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_realtek.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -11122,6 +11122,7 @@ static struct alc_config_preset alc262_p + .capsrc_nids = alc262_dmic_capsrc_nids, + .dac_nids = alc262_dac_nids, + .adc_nids = alc262_dmic_adc_nids, /* ADC0 */ ++ .num_adc_nids = 1, /* single ADC */ + .dig_out_nid = ALC262_DIGOUT_NID, + .num_channel_mode = ARRAY_SIZE(alc262_modes), + .channel_mode = alc262_modes, diff --git a/queue-2.6.30/alsa-intel8x0-fix-pcm-position-craziness.patch b/queue-2.6.30/alsa-intel8x0-fix-pcm-position-craziness.patch new file mode 100644 index 00000000000..16514e20703 --- /dev/null +++ b/queue-2.6.30/alsa-intel8x0-fix-pcm-position-craziness.patch @@ -0,0 +1,89 @@ +From f708eb1d71dc8ffb184da9f0bc53461c6dc10653 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 15 Jun 2009 12:31:38 +0200 +Subject: ALSA: intel8x0 - Fix PCM position craziness + +From: Takashi Iwai + +commit f708eb1d71dc8ffb184da9f0bc53461c6dc10653 upstream. + +The PCM pointer callback sometimes returns invalid positions and this +screws up the hw_ptr updater in PCM core. Especially since now the +jiffies check is optional with xrun_debug, the invalid position is +handled as is, and causes serious sound skips, etc. + +This patch simplifies the position-fix strategy in intel8x0 to be more +robust: +- just falls back to the last position if bogus position is detected +- another sanity check for the backward move of the position due to + a race of register update and the base-index update + +This patch is applicable also for 2.6.30. + +Tested-by: David Miller +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/intel8x0.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +--- a/sound/pci/intel8x0.c ++++ b/sound/pci/intel8x0.c +@@ -356,8 +356,6 @@ struct ichdev { + unsigned int position; + unsigned int pos_shift; + unsigned int last_pos; +- unsigned long last_pos_jiffies; +- unsigned int jiffy_to_bytes; + int frags; + int lvi; + int lvi_frag; +@@ -844,7 +842,6 @@ static int snd_intel8x0_pcm_trigger(stru + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + val = ICH_IOCE | ICH_STARTBM; + ichdev->last_pos = ichdev->position; +- ichdev->last_pos_jiffies = jiffies; + break; + case SNDRV_PCM_TRIGGER_SUSPEND: + ichdev->suspended = 1; +@@ -1048,7 +1045,6 @@ static int snd_intel8x0_pcm_prepare(stru + ichdev->pos_shift = (runtime->sample_bits > 16) ? 2 : 1; + } + snd_intel8x0_setup_periods(chip, ichdev); +- ichdev->jiffy_to_bytes = (runtime->rate * 4 * ichdev->pos_shift) / HZ; + return 0; + } + +@@ -1073,19 +1069,23 @@ static snd_pcm_uframes_t snd_intel8x0_pc + ptr1 == igetword(chip, ichdev->reg_offset + ichdev->roff_picb)) + break; + } while (timeout--); ++ ptr = ichdev->last_pos; + if (ptr1 != 0) { + ptr1 <<= ichdev->pos_shift; + ptr = ichdev->fragsize1 - ptr1; + ptr += position; +- ichdev->last_pos = ptr; +- ichdev->last_pos_jiffies = jiffies; +- } else { +- ptr1 = jiffies - ichdev->last_pos_jiffies; +- if (ptr1) +- ptr1 -= 1; +- ptr = ichdev->last_pos + ptr1 * ichdev->jiffy_to_bytes; +- ptr %= ichdev->size; ++ if (ptr < ichdev->last_pos) { ++ unsigned int pos_base, last_base; ++ pos_base = position / ichdev->fragsize1; ++ last_base = ichdev->last_pos / ichdev->fragsize1; ++ /* another sanity check; ptr1 can go back to full ++ * before the base position is updated ++ */ ++ if (pos_base == last_base) ++ ptr = ichdev->last_pos; ++ } + } ++ ichdev->last_pos = ptr; + spin_unlock(&chip->reg_lock); + if (ptr >= ichdev->size) + return 0; diff --git a/queue-2.6.30/arm-5545-2-add-flush_kernel_dcache_page-for-arm.patch b/queue-2.6.30/arm-5545-2-add-flush_kernel_dcache_page-for-arm.patch new file mode 100644 index 00000000000..05671a254f0 --- /dev/null +++ b/queue-2.6.30/arm-5545-2-add-flush_kernel_dcache_page-for-arm.patch @@ -0,0 +1,40 @@ +From 73be1591579084a8103a7005dd3172f3e9dd7362 Mon Sep 17 00:00:00 2001 +From: Nicolas Pitre +Date: Fri, 12 Jun 2009 03:09:29 +0100 +Subject: ARM: 5545/2: add flush_kernel_dcache_page() for ARM + +From: Nicolas Pitre + +commit 73be1591579084a8103a7005dd3172f3e9dd7362 upstream. + +Without this, the default implementation is a no op which is completely +wrong with a VIVT cache, and usage of sg_copy_buffer() produces +unpredictable results. + +Tested-by: Sebastian Andrzej Siewior + +Signed-off-by: Nicolas Pitre +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/include/asm/cacheflush.h | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/arch/arm/include/asm/cacheflush.h ++++ b/arch/arm/include/asm/cacheflush.h +@@ -429,6 +429,14 @@ static inline void flush_anon_page(struc + __flush_anon_page(vma, page, vmaddr); + } + ++#define ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE ++static inline void flush_kernel_dcache_page(struct page *page) ++{ ++ /* highmem pages are always flushed upon kunmap already */ ++ if ((cache_is_vivt() || cache_is_vipt_aliasing()) && !PageHighMem(page)) ++ __cpuc_flush_dcache_page(page_address(page)); ++} ++ + #define flush_dcache_mmap_lock(mapping) \ + spin_lock_irq(&(mapping)->tree_lock) + #define flush_dcache_mmap_unlock(mapping) \ diff --git a/queue-2.6.30/epoll-fix-nested-calls-support.patch b/queue-2.6.30/epoll-fix-nested-calls-support.patch new file mode 100644 index 00000000000..20d91857906 --- /dev/null +++ b/queue-2.6.30/epoll-fix-nested-calls-support.patch @@ -0,0 +1,118 @@ +From 3fe4a975d662f11037cb710f8b4b158a3e38f9c0 Mon Sep 17 00:00:00 2001 +From: Davide Libenzi +Date: Wed, 17 Jun 2009 16:25:58 -0700 +Subject: epoll: fix nested calls support + +From: Davide Libenzi + +commit 3fe4a975d662f11037cb710f8b4b158a3e38f9c0 upstream. + +This fixes a regression in 2.6.30. + +I unfortunately accepted a patch time ago, to drop the "current" usage +from possible IRQ context, w/out proper thought over it. The patch +switched to using the CPU id by bounding the nested call callback with a +get_cpu()/put_cpu(). + +Unfortunately the ep_call_nested() function can be called with a callback +that grabs sleepy locks (from own f_op->poll()), that results in epic +fails. The following patch uses the proper "context" depending on the +path where it is called, and on the kind of callback. + +This has been reported by Stefan Richter, that has also verified the patch +is his previously failing environment. + +Signed-off-by: Davide Libenzi +Reported-by: Stefan Richter +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/eventpoll.c | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +--- a/fs/eventpoll.c ++++ b/fs/eventpoll.c +@@ -98,7 +98,7 @@ struct epoll_filefd { + struct nested_call_node { + struct list_head llink; + void *cookie; +- int cpu; ++ void *ctx; + }; + + /* +@@ -317,17 +317,17 @@ static void ep_nested_calls_init(struct + * @nproc: Nested call core function pointer. + * @priv: Opaque data to be passed to the @nproc callback. + * @cookie: Cookie to be used to identify this nested call. ++ * @ctx: This instance context. + * + * Returns: Returns the code returned by the @nproc callback, or -1 if + * the maximum recursion limit has been exceeded. + */ + static int ep_call_nested(struct nested_calls *ncalls, int max_nests, + int (*nproc)(void *, void *, int), void *priv, +- void *cookie) ++ void *cookie, void *ctx) + { + int error, call_nests = 0; + unsigned long flags; +- int this_cpu = get_cpu(); + struct list_head *lsthead = &ncalls->tasks_call_list; + struct nested_call_node *tncur; + struct nested_call_node tnode; +@@ -340,7 +340,7 @@ static int ep_call_nested(struct nested_ + * very much limited. + */ + list_for_each_entry(tncur, lsthead, llink) { +- if (tncur->cpu == this_cpu && ++ if (tncur->ctx == ctx && + (tncur->cookie == cookie || ++call_nests > max_nests)) { + /* + * Ops ... loop detected or maximum nest level reached. +@@ -352,7 +352,7 @@ static int ep_call_nested(struct nested_ + } + + /* Add the current task and cookie to the list */ +- tnode.cpu = this_cpu; ++ tnode.ctx = ctx; + tnode.cookie = cookie; + list_add(&tnode.llink, lsthead); + +@@ -364,10 +364,9 @@ static int ep_call_nested(struct nested_ + /* Remove the current task from the list */ + spin_lock_irqsave(&ncalls->lock, flags); + list_del(&tnode.llink); +- out_unlock: ++out_unlock: + spin_unlock_irqrestore(&ncalls->lock, flags); + +- put_cpu(); + return error; + } + +@@ -408,8 +407,12 @@ static int ep_poll_wakeup_proc(void *pri + */ + static void ep_poll_safewake(wait_queue_head_t *wq) + { ++ int this_cpu = get_cpu(); ++ + ep_call_nested(&poll_safewake_ncalls, EP_MAX_NESTS, +- ep_poll_wakeup_proc, NULL, wq); ++ ep_poll_wakeup_proc, NULL, wq, (void *) (long) this_cpu); ++ ++ put_cpu(); + } + + /* +@@ -663,7 +666,7 @@ static unsigned int ep_eventpoll_poll(st + * could re-enter here. + */ + pollflags = ep_call_nested(&poll_readywalk_ncalls, EP_MAX_NESTS, +- ep_poll_readyevents_proc, ep, ep); ++ ep_poll_readyevents_proc, ep, ep, current); + + return pollflags != -1 ? pollflags : 0; + } diff --git a/queue-2.6.30/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch b/queue-2.6.30/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch new file mode 100644 index 00000000000..3304190f820 --- /dev/null +++ b/queue-2.6.30/ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch @@ -0,0 +1,58 @@ +From 2ac6bf4ddc87c3b6b609f8fa82f6ebbffeac12f4 Mon Sep 17 00:00:00 2001 +From: Jack Morgenstein +Date: Fri, 5 Jun 2009 10:36:24 -0700 +Subject: IB/mlx4: Add strong ordering to local inval and fast reg work requests + +From: Jack Morgenstein + +commit 2ac6bf4ddc87c3b6b609f8fa82f6ebbffeac12f4 upstream. + +The ConnectX Programmer's Reference Manual states that the "SO" bit +must be set when posting Fast Register and Local Invalidate send work +requests. When this bit is set, the work request will be executed +only after all previous work requests on the send queue have been +executed. (If the bit is not set, Fast Register and Local Invalidate +WQEs may begin execution too early, which violates the defined +semantics for these operations) + +This fixes the issue with NFS/RDMA reported in + + +Signed-off-by: Jack Morgenstein +Signed-off-by: Roland Dreier +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/infiniband/hw/mlx4/qp.c | 4 ++++ + include/linux/mlx4/qp.h | 1 + + 2 files changed, 5 insertions(+) + +--- a/drivers/infiniband/hw/mlx4/qp.c ++++ b/drivers/infiniband/hw/mlx4/qp.c +@@ -1585,12 +1585,16 @@ int mlx4_ib_post_send(struct ib_qp *ibqp + break; + + case IB_WR_LOCAL_INV: ++ ctrl->srcrb_flags |= ++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER); + set_local_inv_seg(wqe, wr->ex.invalidate_rkey); + wqe += sizeof (struct mlx4_wqe_local_inval_seg); + size += sizeof (struct mlx4_wqe_local_inval_seg) / 16; + break; + + case IB_WR_FAST_REG_MR: ++ ctrl->srcrb_flags |= ++ cpu_to_be32(MLX4_WQE_CTRL_STRONG_ORDER); + set_fmr_seg(wqe, wr); + wqe += sizeof (struct mlx4_wqe_fmr_seg); + size += sizeof (struct mlx4_wqe_fmr_seg) / 16; +--- a/include/linux/mlx4/qp.h ++++ b/include/linux/mlx4/qp.h +@@ -165,6 +165,7 @@ enum { + MLX4_WQE_CTRL_IP_CSUM = 1 << 4, + MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5, + MLX4_WQE_CTRL_INS_VLAN = 1 << 6, ++ MLX4_WQE_CTRL_STRONG_ORDER = 1 << 7, + }; + + struct mlx4_wqe_ctrl_seg { diff --git a/queue-2.6.30/series b/queue-2.6.30/series index 6f71d03f92a..b665942b846 100644 --- a/queue-2.6.30/series +++ b/queue-2.6.30/series @@ -44,3 +44,13 @@ x86-enable-gart-iommu-only-after-setting-up-protection-methods.patch x86-move-rdtsc_barrier-into-the-tsc-vread-method.patch x86-fix-uv-bau-sending-buffer-initialization.patch x86-add-quirk-for-reboot-stalls-on-a-dell-optiplex-360.patch +x86-handle-initrd-that-extends-into-unusable-memory.patch +alsa-ca0106-add-missing-registrations-of-vmaster-controls.patch +alsa-intel8x0-fix-pcm-position-craziness.patch +alsa-hda-get-back-input-source-for-alc262-toshiba-s06-model.patch +alsa-hda-add-quirk-for-sony-vaio-z21mn.patch +alsa-cmi8330-fix-mpu-401-pnp-init-copy-paste-bug.patch +x86-hpet-mark-per-cpu-interrupts-irqf_timer-to-prevent-resume-failure.patch +arm-5545-2-add-flush_kernel_dcache_page-for-arm.patch +ib-mlx4-add-strong-ordering-to-local-inval-and-fast-reg-work-requests.patch +epoll-fix-nested-calls-support.patch diff --git a/queue-2.6.30/x86-handle-initrd-that-extends-into-unusable-memory.patch b/queue-2.6.30/x86-handle-initrd-that-extends-into-unusable-memory.patch new file mode 100644 index 00000000000..a67bf100043 --- /dev/null +++ b/queue-2.6.30/x86-handle-initrd-that-extends-into-unusable-memory.patch @@ -0,0 +1,76 @@ +From 8c5dd8f43367f4f266dd616f11658005bc2d20ef Mon Sep 17 00:00:00 2001 +From: Yinghai Lu +Date: Thu, 4 Jun 2009 19:14:22 -0700 +Subject: x86: handle initrd that extends into unusable memory + +From: Yinghai Lu + +commit 8c5dd8f43367f4f266dd616f11658005bc2d20ef upstream. + +On a system where system memory (according e820) is not covered by +mtrr, mtrr_trim_memory converts a portion of memory to reserved, but +bootloader has already put the initrd in that range. + +Thus, we need to have 64bit to use relocate_initrd too. + +[ Impact: fix using initrd when mtrr_trim_memory happen ] + +Signed-off-by: Yinghai Lu +Signed-off-by: H. Peter Anvin +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/setup.c | 15 +++------------ + 1 file changed, 3 insertions(+), 12 deletions(-) + +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -293,15 +293,13 @@ static void __init reserve_brk(void) + + #ifdef CONFIG_BLK_DEV_INITRD + +-#ifdef CONFIG_X86_32 +- + #define MAX_MAP_CHUNK (NR_FIX_BTMAPS << PAGE_SHIFT) + static void __init relocate_initrd(void) + { + + u64 ramdisk_image = boot_params.hdr.ramdisk_image; + u64 ramdisk_size = boot_params.hdr.ramdisk_size; +- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT; ++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT; + u64 ramdisk_here; + unsigned long slop, clen, mapaddr; + char *p, *q; +@@ -357,14 +355,13 @@ static void __init relocate_initrd(void) + ramdisk_image, ramdisk_image + ramdisk_size - 1, + ramdisk_here, ramdisk_here + ramdisk_size - 1); + } +-#endif + + static void __init reserve_initrd(void) + { + u64 ramdisk_image = boot_params.hdr.ramdisk_image; + u64 ramdisk_size = boot_params.hdr.ramdisk_size; + u64 ramdisk_end = ramdisk_image + ramdisk_size; +- u64 end_of_lowmem = max_low_pfn << PAGE_SHIFT; ++ u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT; + + if (!boot_params.hdr.type_of_loader || + !ramdisk_image || !ramdisk_size) +@@ -394,14 +391,8 @@ static void __init reserve_initrd(void) + return; + } + +-#ifdef CONFIG_X86_32 + relocate_initrd(); +-#else +- printk(KERN_ERR "initrd extends beyond end of memory " +- "(0x%08llx > 0x%08llx)\ndisabling initrd\n", +- ramdisk_end, end_of_lowmem); +- initrd_start = 0; +-#endif ++ + free_early(ramdisk_image, ramdisk_end); + } + #else diff --git a/queue-2.6.30/x86-hpet-mark-per-cpu-interrupts-irqf_timer-to-prevent-resume-failure.patch b/queue-2.6.30/x86-hpet-mark-per-cpu-interrupts-irqf_timer-to-prevent-resume-failure.patch new file mode 100644 index 00000000000..f987861810d --- /dev/null +++ b/queue-2.6.30/x86-hpet-mark-per-cpu-interrupts-irqf_timer-to-prevent-resume-failure.patch @@ -0,0 +1,42 @@ +From 507fa3a3d80365c595113a5ac3232309e3dbf5d8 Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner +Date: Sun, 14 Jun 2009 17:46:01 +0200 +Subject: x86: hpet: Mark per cpu interrupts IRQF_TIMER to prevent resume failure + +From: Thomas Gleixner + +commit 507fa3a3d80365c595113a5ac3232309e3dbf5d8 upstream. + +timer interrupts are excluded from being disabled during suspend. The +clock events code manages the disabling of clock events on its own +because the timer interrupt needs to be functional before the resume +code reenables the device interrupts. + +The hpet per cpu timers request their interrupt without setting the +IRQF_TIMER flag so suspend_device_irqs() disables them as well which +results in a fatal resume failure on the boot CPU. + +Adding IRQF_TIMER to the interupt flags when requesting the hpet per +cpu timer interrupts solves the problem. + +Reported-by: Benjamin S. +Signed-off-by: Thomas Gleixner +Tested-by: Benjamin S. +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/hpet.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/arch/x86/kernel/hpet.c ++++ b/arch/x86/kernel/hpet.c +@@ -510,7 +510,8 @@ static int hpet_setup_irq(struct hpet_de + { + + if (request_irq(dev->irq, hpet_interrupt_handler, +- IRQF_DISABLED|IRQF_NOBALANCING, dev->name, dev)) ++ IRQF_TIMER | IRQF_DISABLED | IRQF_NOBALANCING, ++ dev->name, dev)) + return -1; + + disable_irq(dev->irq);