* [gentoo-commits] linux-patches r1656 - genpatches-2.6/trunk/2.6.32
@ 2010-01-23 2:08 Mike Pagano (mpagano)
0 siblings, 0 replies; only message in thread
From: Mike Pagano (mpagano) @ 2010-01-23 2:08 UTC (permalink / raw
To: gentoo-commits
Author: mpagano
Date: 2010-01-23 02:08:44 +0000 (Sat, 23 Jan 2010)
New Revision: 1656
Added:
genpatches-2.6/trunk/2.6.32/1004_linux-2.6.32.5.patch
Modified:
genpatches-2.6/trunk/2.6.32/0000_README
Log:
Linux patch 2.6.32.5
Modified: genpatches-2.6/trunk/2.6.32/0000_README
===================================================================
--- genpatches-2.6/trunk/2.6.32/0000_README 2010-01-19 02:19:09 UTC (rev 1655)
+++ genpatches-2.6/trunk/2.6.32/0000_README 2010-01-23 02:08:44 UTC (rev 1656)
@@ -55,6 +55,10 @@
From: http://www.kernel.org
Desc: Linux 2.6.32.4
+Patch: 1004_linux-2.6.32.5.patch
+From: http://www.kernel.org
+Desc: Linux 2.6.32.5
+
Patch: 1900_EFI-GPT-header-read-fix.patch
From: http://bugs.gentoo.org/show_bug.cgi?id=296915
Desc: Read whole sector with EFI GPT header
Added: genpatches-2.6/trunk/2.6.32/1004_linux-2.6.32.5.patch
===================================================================
--- genpatches-2.6/trunk/2.6.32/1004_linux-2.6.32.5.patch (rev 0)
+++ genpatches-2.6/trunk/2.6.32/1004_linux-2.6.32.5.patch 2010-01-23 02:08:44 UTC (rev 1656)
@@ -0,0 +1,1019 @@
+diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
+index e8dfdbd..cadbed6 100644
+--- a/arch/powerpc/kernel/pci-common.c
++++ b/arch/powerpc/kernel/pci-common.c
+@@ -1107,6 +1107,12 @@ void __devinit pcibios_setup_bus_devices(struct pci_bus *bus)
+ list_for_each_entry(dev, &bus->devices, bus_list) {
+ struct dev_archdata *sd = &dev->dev.archdata;
+
++ /* Cardbus can call us to add new devices to a bus, so ignore
++ * those who are already fully discovered
++ */
++ if (dev->is_added)
++ continue;
++
+ /* Setup OF node pointer in archdata */
+ sd->of_node = pci_device_to_OF_node(dev);
+
+@@ -1147,6 +1153,13 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
+ }
+ EXPORT_SYMBOL(pcibios_fixup_bus);
+
++void __devinit pci_fixup_cardbus(struct pci_bus *bus)
++{
++ /* Now fixup devices on that bus */
++ pcibios_setup_bus_devices(bus);
++}
++
++
+ static int skip_isa_ioresource_align(struct pci_dev *dev)
+ {
+ if ((ppc_pci_flags & PPC_PCI_CAN_SKIP_ISA_ALIGN) &&
+diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c
+index b129611..4771274 100644
+--- a/arch/sparc/kernel/nmi.c
++++ b/arch/sparc/kernel/nmi.c
+@@ -96,7 +96,6 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)
+ int cpu = smp_processor_id();
+
+ clear_softint(1 << irq);
+- pcr_ops->write(PCR_PIC_PRIV);
+
+ local_cpu_data().__nmi_count++;
+
+@@ -105,6 +104,8 @@ notrace __kprobes void perfctr_irq(int irq, struct pt_regs *regs)
+ if (notify_die(DIE_NMI, "nmi", regs, 0,
+ pt_regs_trap_type(regs), SIGINT) == NOTIFY_STOP)
+ touched = 1;
++ else
++ pcr_ops->write(PCR_PIC_PRIV);
+
+ sum = kstat_irqs_cpu(0, cpu);
+ if (__get_cpu_var(nmi_touch)) {
+diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
+index fa5936e..198fb4e 100644
+--- a/arch/sparc/kernel/perf_event.c
++++ b/arch/sparc/kernel/perf_event.c
+@@ -986,6 +986,17 @@ static int __kprobes perf_event_nmi_handler(struct notifier_block *self,
+ data.addr = 0;
+
+ cpuc = &__get_cpu_var(cpu_hw_events);
++
++ /* If the PMU has the TOE IRQ enable bits, we need to do a
++ * dummy write to the %pcr to clear the overflow bits and thus
++ * the interrupt.
++ *
++ * Do this before we peek at the counters to determine
++ * overflow so we don't lose any events.
++ */
++ if (sparc_pmu->irq_bit)
++ pcr_ops->write(cpuc->pcr);
++
+ for (idx = 0; idx < MAX_HWEVENTS; idx++) {
+ struct perf_event *event = cpuc->events[idx];
+ struct hw_perf_event *hwc;
+diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
+index d0c99ab..873f81f 100644
+--- a/arch/x86/kernel/apic/apic_flat_64.c
++++ b/arch/x86/kernel/apic/apic_flat_64.c
+@@ -240,6 +240,11 @@ static int physflat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
+ printk(KERN_DEBUG "system APIC only can use physical flat");
+ return 1;
+ }
++
++ if (!strncmp(oem_id, "IBM", 3) && !strncmp(oem_table_id, "EXA", 3)) {
++ printk(KERN_DEBUG "IBM Summit detected, will use apic physical");
++ return 1;
++ }
+ #endif
+
+ return 0;
+diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
+index 2ab3535..9ee87cf 100644
+--- a/arch/x86/kernel/apic/x2apic_uv_x.c
++++ b/arch/x86/kernel/apic/x2apic_uv_x.c
+@@ -364,13 +364,13 @@ static __init void get_lowmem_redirect(unsigned long *base, unsigned long *size)
+
+ enum map_type {map_wb, map_uc};
+
+-static __init void map_high(char *id, unsigned long base, int shift,
+- int max_pnode, enum map_type map_type)
++static __init void map_high(char *id, unsigned long base, int pshift,
++ int bshift, int max_pnode, enum map_type map_type)
+ {
+ unsigned long bytes, paddr;
+
+- paddr = base << shift;
+- bytes = (1UL << shift) * (max_pnode + 1);
++ paddr = base << pshift;
++ bytes = (1UL << bshift) * (max_pnode + 1);
+ printk(KERN_INFO "UV: Map %s_HI 0x%lx - 0x%lx\n", id, paddr,
+ paddr + bytes);
+ if (map_type == map_uc)
+@@ -386,7 +386,7 @@ static __init void map_gru_high(int max_pnode)
+
+ gru.v = uv_read_local_mmr(UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR);
+ if (gru.s.enable)
+- map_high("GRU", gru.s.base, shift, max_pnode, map_wb);
++ map_high("GRU", gru.s.base, shift, shift, max_pnode, map_wb);
+ }
+
+ static __init void map_mmr_high(int max_pnode)
+@@ -396,7 +396,7 @@ static __init void map_mmr_high(int max_pnode)
+
+ mmr.v = uv_read_local_mmr(UVH_RH_GAM_MMR_OVERLAY_CONFIG_MMR);
+ if (mmr.s.enable)
+- map_high("MMR", mmr.s.base, shift, max_pnode, map_uc);
++ map_high("MMR", mmr.s.base, shift, shift, max_pnode, map_uc);
+ }
+
+ static __init void map_mmioh_high(int max_pnode)
+@@ -406,7 +406,8 @@ static __init void map_mmioh_high(int max_pnode)
+
+ mmioh.v = uv_read_local_mmr(UVH_RH_GAM_MMIOH_OVERLAY_CONFIG_MMR);
+ if (mmioh.s.enable)
+- map_high("MMIOH", mmioh.s.base, shift, max_pnode, map_uc);
++ map_high("MMIOH", mmioh.s.base, shift, mmioh.s.m_io,
++ max_pnode, map_uc);
+ }
+
+ static __init void uv_rtc_init(void)
+diff --git a/arch/x86/kernel/cpu/mcheck/therm_throt.c b/arch/x86/kernel/cpu/mcheck/therm_throt.c
+index 4fef985..687638e 100644
+--- a/arch/x86/kernel/cpu/mcheck/therm_throt.c
++++ b/arch/x86/kernel/cpu/mcheck/therm_throt.c
+@@ -274,8 +274,9 @@ void intel_init_thermal(struct cpuinfo_x86 *c)
+ int tm2 = 0;
+ u32 l, h;
+
+- /* Thermal monitoring depends on ACPI and clock modulation*/
+- if (!cpu_has(c, X86_FEATURE_ACPI) || !cpu_has(c, X86_FEATURE_ACC))
++ /* Thermal monitoring depends on APIC, ACPI and clock modulation */
++ if (!cpu_has_apic || !cpu_has(c, X86_FEATURE_ACPI) ||
++ !cpu_has(c, X86_FEATURE_ACC))
+ return;
+
+ /*
+diff --git a/drivers/edac/i5000_edac.c b/drivers/edac/i5000_edac.c
+index 77a9579..adc10a2 100644
+--- a/drivers/edac/i5000_edac.c
++++ b/drivers/edac/i5000_edac.c
+@@ -577,7 +577,13 @@ static void i5000_process_nonfatal_error_info(struct mem_ctl_info *mci,
+ debugf0("\tUncorrected bits= 0x%x\n", ue_errors);
+
+ branch = EXTRACT_FBDCHAN_INDX(info->ferr_nf_fbd);
+- channel = branch;
++
++ /*
++ * According with i5000 datasheet, bit 28 has no significance
++ * for errors M4Err-M12Err and M17Err-M21Err, on FERR_NF_FBD
++ */
++ channel = branch & 2;
++
+ bank = NREC_BANK(info->nrecmema);
+ rank = NREC_RANK(info->nrecmema);
+ rdwr = NREC_RDWR(info->nrecmema);
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index aa7fd82..7d1357e 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -255,7 +255,6 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+ int ret = IRQ_NONE;
+ u32 de_iir, gt_iir, de_ier;
+- u32 new_de_iir, new_gt_iir;
+ struct drm_i915_master_private *master_priv;
+
+ /* disable master interrupt before clearing iir */
+@@ -266,35 +265,29 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
+ de_iir = I915_READ(DEIIR);
+ gt_iir = I915_READ(GTIIR);
+
+- for (;;) {
+- if (de_iir == 0 && gt_iir == 0)
+- break;
+-
+- ret = IRQ_HANDLED;
+-
+- I915_WRITE(DEIIR, de_iir);
+- new_de_iir = I915_READ(DEIIR);
+- I915_WRITE(GTIIR, gt_iir);
+- new_gt_iir = I915_READ(GTIIR);
++ if (de_iir == 0 && gt_iir == 0)
++ goto done;
+
+- if (dev->primary->master) {
+- master_priv = dev->primary->master->driver_priv;
+- if (master_priv->sarea_priv)
+- master_priv->sarea_priv->last_dispatch =
+- READ_BREADCRUMB(dev_priv);
+- }
++ ret = IRQ_HANDLED;
+
+- if (gt_iir & GT_USER_INTERRUPT) {
+- u32 seqno = i915_get_gem_seqno(dev);
+- dev_priv->mm.irq_gem_seqno = seqno;
+- trace_i915_gem_request_complete(dev, seqno);
+- DRM_WAKEUP(&dev_priv->irq_queue);
+- }
++ if (dev->primary->master) {
++ master_priv = dev->primary->master->driver_priv;
++ if (master_priv->sarea_priv)
++ master_priv->sarea_priv->last_dispatch =
++ READ_BREADCRUMB(dev_priv);
++ }
+
+- de_iir = new_de_iir;
+- gt_iir = new_gt_iir;
++ if (gt_iir & GT_USER_INTERRUPT) {
++ u32 seqno = i915_get_gem_seqno(dev);
++ dev_priv->mm.irq_gem_seqno = seqno;
++ trace_i915_gem_request_complete(dev, seqno);
++ DRM_WAKEUP(&dev_priv->irq_queue);
+ }
+
++ I915_WRITE(GTIIR, gt_iir);
++ I915_WRITE(DEIIR, de_iir);
++
++done:
+ I915_WRITE(DEIER, de_ier);
+ (void)I915_READ(DEIER);
+
+diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c
+index 4b96e7a..5b4d66d 100644
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -431,6 +431,13 @@ static const struct hid_device_id apple_devices[] = {
+ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS),
+ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI),
++ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO),
++ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
++ APPLE_ISO_KEYBOARD },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS),
++ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY),
+ .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY),
+diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
+index 7d05c4b..9678354 100644
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1287,6 +1287,9 @@ static const struct hid_device_id hid_blacklist[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
++ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index adbef5d..e380e7b 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -88,6 +88,9 @@
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI 0x0236
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_ISO 0x0237
+ #define USB_DEVICE_ID_APPLE_WELLSPRING3_JIS 0x0238
++#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI 0x0239
++#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO 0x023a
++#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS 0x023b
+ #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a
+ #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b
+ #define USB_DEVICE_ID_APPLE_ATV_IRCONTROL 0x8241
+diff --git a/drivers/i2c/busses/i2c-pca-isa.c b/drivers/i2c/busses/i2c-pca-isa.c
+index 0ed68e2..f7346a9 100644
+--- a/drivers/i2c/busses/i2c-pca-isa.c
++++ b/drivers/i2c/busses/i2c-pca-isa.c
+@@ -75,7 +75,7 @@ static int pca_isa_waitforcompletion(void *pd)
+ unsigned long timeout;
+
+ if (irq > -1) {
+- ret = wait_event_interruptible_timeout(pca_wait,
++ ret = wait_event_timeout(pca_wait,
+ pca_isa_readbyte(pd, I2C_PCA_CON)
+ & I2C_PCA_CON_SI, pca_isa_ops.timeout);
+ } else {
+@@ -96,7 +96,7 @@ static void pca_isa_resetchip(void *pd)
+ }
+
+ static irqreturn_t pca_handler(int this_irq, void *dev_id) {
+- wake_up_interruptible(&pca_wait);
++ wake_up(&pca_wait);
+ return IRQ_HANDLED;
+ }
+
+diff --git a/drivers/i2c/busses/i2c-pca-platform.c b/drivers/i2c/busses/i2c-pca-platform.c
+index c4df9d4..5b2213d 100644
+--- a/drivers/i2c/busses/i2c-pca-platform.c
++++ b/drivers/i2c/busses/i2c-pca-platform.c
+@@ -84,7 +84,7 @@ static int i2c_pca_pf_waitforcompletion(void *pd)
+ unsigned long timeout;
+
+ if (i2c->irq) {
+- ret = wait_event_interruptible_timeout(i2c->wait,
++ ret = wait_event_timeout(i2c->wait,
+ i2c->algo_data.read_byte(i2c, I2C_PCA_CON)
+ & I2C_PCA_CON_SI, i2c->adap.timeout);
+ } else {
+@@ -122,7 +122,7 @@ static irqreturn_t i2c_pca_pf_handler(int this_irq, void *dev_id)
+ if ((i2c->algo_data.read_byte(i2c, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0)
+ return IRQ_NONE;
+
+- wake_up_interruptible(&i2c->wait);
++ wake_up(&i2c->wait);
+
+ return IRQ_HANDLED;
+ }
+diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
+index 2965043..3bf7b0a 100644
+--- a/drivers/i2c/i2c-core.c
++++ b/drivers/i2c/i2c-core.c
+@@ -801,6 +801,9 @@ int i2c_del_adapter(struct i2c_adapter *adap)
+ adap->dev.parent);
+ #endif
+
++ /* device name is gone after device_unregister */
++ dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
++
+ /* clean up the sysfs representation */
+ init_completion(&adap->dev_released);
+ device_unregister(&adap->dev);
+@@ -813,8 +816,6 @@ int i2c_del_adapter(struct i2c_adapter *adap)
+ idr_remove(&i2c_adapter_idr, adap->nr);
+ mutex_unlock(&core_lock);
+
+- dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
+-
+ /* Clear the device structure in case this adapter is ever going to be
+ added again */
+ memset(&adap->dev, 0, sizeof(adap->dev));
+diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
+index 07c5379..0876d82 100644
+--- a/drivers/input/mouse/psmouse-base.c
++++ b/drivers/input/mouse/psmouse-base.c
+@@ -667,19 +667,6 @@ static int psmouse_extensions(struct psmouse *psmouse,
+ max_proto = PSMOUSE_IMEX;
+ }
+
+-/*
+- * Try Finger Sensing Pad
+- */
+- if (max_proto > PSMOUSE_IMEX) {
+- if (fsp_detect(psmouse, set_properties) == 0) {
+- if (!set_properties || fsp_init(psmouse) == 0)
+- return PSMOUSE_FSP;
+-/*
+- * Init failed, try basic relative protocols
+- */
+- max_proto = PSMOUSE_IMEX;
+- }
+- }
+
+ if (max_proto > PSMOUSE_IMEX) {
+ if (genius_detect(psmouse, set_properties) == 0)
+@@ -696,6 +683,21 @@ static int psmouse_extensions(struct psmouse *psmouse,
+ }
+
+ /*
++ * Try Finger Sensing Pad. We do it here because its probe upsets
++ * Trackpoint devices (causing TP_READ_ID command to time out).
++ */
++ if (max_proto > PSMOUSE_IMEX) {
++ if (fsp_detect(psmouse, set_properties) == 0) {
++ if (!set_properties || fsp_init(psmouse) == 0)
++ return PSMOUSE_FSP;
++/*
++ * Init failed, try basic relative protocols
++ */
++ max_proto = PSMOUSE_IMEX;
++ }
++ }
++
++/*
+ * Reset to defaults in case the device got confused by extended
+ * protocol probes. Note that we follow up with full reset because
+ * some mice put themselves to sleep when they see PSMOUSE_RESET_DIS.
+diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c
+index cdad3db..e0a3b75 100644
+--- a/drivers/media/video/gspca/sn9c20x.c
++++ b/drivers/media/video/gspca/sn9c20x.c
+@@ -2319,7 +2319,7 @@ static void do_autogain(struct gspca_dev *gspca_dev, u16 avg_lum)
+ }
+ }
+ if (avg_lum > MAX_AVG_LUM) {
+- if (sd->gain - 1 >= 0) {
++ if (sd->gain >= 1) {
+ sd->gain--;
+ set_gain(gspca_dev);
+ }
+diff --git a/drivers/mfd/wm8350-core.c b/drivers/mfd/wm8350-core.c
+index ba27c9d..ca6b098 100644
+--- a/drivers/mfd/wm8350-core.c
++++ b/drivers/mfd/wm8350-core.c
+@@ -134,8 +134,7 @@ static inline int is_reg_locked(struct wm8350 *wm8350, u8 reg)
+ wm8350->reg_cache[WM8350_SECURITY] == WM8350_UNLOCK_KEY)
+ return 0;
+
+- if ((reg == WM8350_GPIO_CONFIGURATION_I_O) ||
+- (reg >= WM8350_GPIO_FUNCTION_SELECT_1 &&
++ if ((reg >= WM8350_GPIO_FUNCTION_SELECT_1 &&
+ reg <= WM8350_GPIO_FUNCTION_SELECT_4) ||
+ (reg >= WM8350_BATTERY_CHARGER_CONTROL_1 &&
+ reg <= WM8350_BATTERY_CHARGER_CONTROL_3))
+diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
+index 4e4c295..6477722 100644
+--- a/drivers/pci/pci.c
++++ b/drivers/pci/pci.c
+@@ -2723,6 +2723,11 @@ int __attribute__ ((weak)) pci_ext_cfg_avail(struct pci_dev *dev)
+ return 1;
+ }
+
++void __weak pci_fixup_cardbus(struct pci_bus *bus)
++{
++}
++EXPORT_SYMBOL(pci_fixup_cardbus);
++
+ static int __init pci_setup(char *str)
+ {
+ while (str) {
+diff --git a/drivers/pcmcia/cardbus.c b/drivers/pcmcia/cardbus.c
+index db77e1f..5c26793 100644
+--- a/drivers/pcmcia/cardbus.c
++++ b/drivers/pcmcia/cardbus.c
+@@ -214,7 +214,7 @@ int __ref cb_alloc(struct pcmcia_socket * s)
+ unsigned int max, pass;
+
+ s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0));
+-// pcibios_fixup_bus(bus);
++ pci_fixup_cardbus(bus);
+
+ max = bus->secondary;
+ for (pass = 0; pass < 2; pass++)
+diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
+index 849359a..767cb61 100644
+--- a/drivers/platform/x86/asus-laptop.c
++++ b/drivers/platform/x86/asus-laptop.c
+@@ -221,6 +221,7 @@ static struct asus_hotk *hotk;
+ */
+ static const struct acpi_device_id asus_device_ids[] = {
+ {"ATK0100", 0},
++ {"ATK0101", 0},
+ {"", 0},
+ };
+ MODULE_DEVICE_TABLE(acpi, asus_device_ids);
+@@ -293,6 +294,11 @@ struct key_entry {
+ enum { KE_KEY, KE_END };
+
+ static struct key_entry asus_keymap[] = {
++ {KE_KEY, 0x02, KEY_SCREENLOCK},
++ {KE_KEY, 0x05, KEY_WLAN},
++ {KE_KEY, 0x08, BTN_TOUCH},
++ {KE_KEY, 0x17, KEY_ZOOM},
++ {KE_KEY, 0x1f, KEY_BATTERY},
+ {KE_KEY, 0x30, KEY_VOLUMEUP},
+ {KE_KEY, 0x31, KEY_VOLUMEDOWN},
+ {KE_KEY, 0x32, KEY_MUTE},
+@@ -312,6 +318,8 @@ static struct key_entry asus_keymap[] = {
+ {KE_KEY, 0x5F, KEY_WLAN},
+ {KE_KEY, 0x60, KEY_SWITCHVIDEOMODE},
+ {KE_KEY, 0x61, KEY_SWITCHVIDEOMODE},
++ {KE_KEY, 0x62, KEY_SWITCHVIDEOMODE},
++ {KE_KEY, 0x63, KEY_SWITCHVIDEOMODE},
+ {KE_KEY, 0x6B, BTN_TOUCH}, /* Lock Mouse */
+ {KE_KEY, 0x82, KEY_CAMERA},
+ {KE_KEY, 0x8A, KEY_PROG1},
+diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c
+index 507ccc6..518712c 100644
+--- a/drivers/scsi/megaraid/megaraid_sas.c
++++ b/drivers/scsi/megaraid/megaraid_sas.c
+@@ -3451,7 +3451,7 @@ out:
+ return retval;
+ }
+
+-static DRIVER_ATTR(poll_mode_io, S_IRUGO|S_IWUGO,
++static DRIVER_ATTR(poll_mode_io, S_IRUGO|S_IWUSR,
+ megasas_sysfs_show_poll_mode_io,
+ megasas_sysfs_set_poll_mode_io);
+
+diff --git a/drivers/serial/8250_pnp.c b/drivers/serial/8250_pnp.c
+index d71dfe3..0cce8a4 100644
+--- a/drivers/serial/8250_pnp.c
++++ b/drivers/serial/8250_pnp.c
+@@ -354,6 +354,8 @@ static const struct pnp_device_id pnp_dev_table[] = {
+ { "FUJ02E5", 0 },
+ /* Fujitsu P-series tablet PC device */
+ { "FUJ02E6", 0 },
++ /* Fujitsu Wacom 2FGT Tablet PC device */
++ { "FUJ02E7", 0 },
+ /*
+ * LG C1 EXPRESS DUAL (C1-PB11A3) touch screen (actually a FUJ02E6 in
+ * disguise)
+diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c
+index adf9632..53cb722 100644
+--- a/drivers/video/s3c-fb.c
++++ b/drivers/video/s3c-fb.c
+@@ -211,21 +211,23 @@ static int s3c_fb_check_var(struct fb_var_screeninfo *var,
+
+ /**
+ * s3c_fb_calc_pixclk() - calculate the divider to create the pixel clock.
+- * @id: window id.
+ * @sfb: The hardware state.
+ * @pixclock: The pixel clock wanted, in picoseconds.
+ *
+ * Given the specified pixel clock, work out the necessary divider to get
+ * close to the output frequency.
+ */
+-static int s3c_fb_calc_pixclk(unsigned char id, struct s3c_fb *sfb, unsigned int pixclk)
++static int s3c_fb_calc_pixclk(struct s3c_fb *sfb, unsigned int pixclk)
+ {
+- struct s3c_fb_pd_win *win = sfb->pdata->win[id];
+ unsigned long clk = clk_get_rate(sfb->bus_clk);
++ unsigned long long tmp;
+ unsigned int result;
+
+- pixclk *= win->win_mode.refresh;
+- result = clk / pixclk;
++ tmp = (unsigned long long)clk;
++ tmp *= pixclk;
++
++ do_div(tmp, 1000000000UL);
++ result = (unsigned int)tmp / 1000;
+
+ dev_dbg(sfb->dev, "pixclk=%u, clk=%lu, div=%d (%lu)\n",
+ pixclk, clk, result, clk / result);
+@@ -301,7 +303,7 @@ static int s3c_fb_set_par(struct fb_info *info)
+ /* use window 0 as the basis for the lcd output timings */
+
+ if (win_no == 0) {
+- clkdiv = s3c_fb_calc_pixclk(win_no, sfb, var->pixclock);
++ clkdiv = s3c_fb_calc_pixclk(sfb, var->pixclock);
+
+ data = sfb->pdata->vidcon0;
+ data &= ~(VIDCON0_CLKVAL_F_MASK | VIDCON0_CLKDIR);
+diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c
+index c9ee67b..1afb0a1 100644
+--- a/fs/notify/inotify/inotify_fsnotify.c
++++ b/fs/notify/inotify/inotify_fsnotify.c
+@@ -121,7 +121,7 @@ static int idr_callback(int id, void *p, void *data)
+ if (warned)
+ return 0;
+
+- warned = false;
++ warned = true;
+ entry = p;
+ ientry = container_of(entry, struct inotify_inode_mark_entry, fsn_entry);
+
+diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
+index dcd2040..ca44337 100644
+--- a/fs/notify/inotify/inotify_user.c
++++ b/fs/notify/inotify/inotify_user.c
+@@ -558,7 +558,7 @@ retry:
+
+ spin_lock(&group->inotify_data.idr_lock);
+ ret = idr_get_new_above(&group->inotify_data.idr, &tmp_ientry->fsn_entry,
+- group->inotify_data.last_wd,
++ group->inotify_data.last_wd+1,
+ &tmp_ientry->wd);
+ spin_unlock(&group->inotify_data.idr_lock);
+ if (ret) {
+@@ -638,7 +638,7 @@ static struct fsnotify_group *inotify_new_group(struct user_struct *user, unsign
+
+ spin_lock_init(&group->inotify_data.idr_lock);
+ idr_init(&group->inotify_data.idr);
+- group->inotify_data.last_wd = 1;
++ group->inotify_data.last_wd = 0;
+ group->inotify_data.user = user;
+ group->inotify_data.fa = NULL;
+
+diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
+index a14d6cd..d240c15 100644
+--- a/fs/reiserfs/inode.c
++++ b/fs/reiserfs/inode.c
+@@ -2531,6 +2531,12 @@ static int reiserfs_writepage(struct page *page, struct writeback_control *wbc)
+ return reiserfs_write_full_page(page, wbc);
+ }
+
++static void reiserfs_truncate_failed_write(struct inode *inode)
++{
++ truncate_inode_pages(inode->i_mapping, inode->i_size);
++ reiserfs_truncate_file(inode, 0);
++}
++
+ static int reiserfs_write_begin(struct file *file,
+ struct address_space *mapping,
+ loff_t pos, unsigned len, unsigned flags,
+@@ -2597,6 +2603,8 @@ static int reiserfs_write_begin(struct file *file,
+ if (ret) {
+ unlock_page(page);
+ page_cache_release(page);
++ /* Truncate allocated blocks */
++ reiserfs_truncate_failed_write(inode);
+ }
+ return ret;
+ }
+@@ -2689,8 +2697,7 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
+ ** transaction tracking stuff when the size changes. So, we have
+ ** to do the i_size updates here.
+ */
+- pos += copied;
+- if (pos > inode->i_size) {
++ if (pos + copied > inode->i_size) {
+ struct reiserfs_transaction_handle myth;
+ reiserfs_write_lock(inode->i_sb);
+ /* If the file have grown beyond the border where it
+@@ -2708,7 +2715,7 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
+ goto journal_error;
+ }
+ reiserfs_update_inode_transaction(inode);
+- inode->i_size = pos;
++ inode->i_size = pos + copied;
+ /*
+ * this will just nest into our transaction. It's important
+ * to use mark_inode_dirty so the inode gets pushed around on the
+@@ -2735,6 +2742,10 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
+ out:
+ unlock_page(page);
+ page_cache_release(page);
++
++ if (pos + len > inode->i_size)
++ reiserfs_truncate_failed_write(inode);
++
+ return ret == 0 ? copied : ret;
+
+ journal_error:
+diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
+index 221cecd..adf99c6 100644
+--- a/include/linux/blkdev.h
++++ b/include/linux/blkdev.h
+@@ -1114,11 +1114,18 @@ static inline int queue_alignment_offset(struct request_queue *q)
+ return q->limits.alignment_offset;
+ }
+
++static inline int queue_limit_alignment_offset(struct queue_limits *lim, sector_t offset)
++{
++ unsigned int granularity = max(lim->physical_block_size, lim->io_min);
++
++ offset &= granularity - 1;
++ return (granularity + lim->alignment_offset - offset) & (granularity - 1);
++}
++
+ static inline int queue_sector_alignment_offset(struct request_queue *q,
+ sector_t sector)
+ {
+- return ((sector << 9) - q->limits.alignment_offset)
+- & (q->limits.io_min - 1);
++ return queue_limit_alignment_offset(&q->limits, sector << 9);
+ }
+
+ static inline int bdev_alignment_offset(struct block_device *bdev)
+diff --git a/include/linux/mfd/wm8350/pmic.h b/include/linux/mfd/wm8350/pmic.h
+index be3264e..e786fe9 100644
+--- a/include/linux/mfd/wm8350/pmic.h
++++ b/include/linux/mfd/wm8350/pmic.h
+@@ -666,20 +666,20 @@
+ #define WM8350_ISINK_FLASH_DUR_64MS (1 << 8)
+ #define WM8350_ISINK_FLASH_DUR_96MS (2 << 8)
+ #define WM8350_ISINK_FLASH_DUR_1024MS (3 << 8)
+-#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 4)
+-#define WM8350_ISINK_FLASH_ON_0_25S (1 << 4)
+-#define WM8350_ISINK_FLASH_ON_0_50S (2 << 4)
+-#define WM8350_ISINK_FLASH_ON_1_00S (3 << 4)
+-#define WM8350_ISINK_FLASH_ON_1_95S (1 << 4)
+-#define WM8350_ISINK_FLASH_ON_3_91S (2 << 4)
+-#define WM8350_ISINK_FLASH_ON_7_80S (3 << 4)
+-#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 0)
+-#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 0)
+-#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 0)
+-#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 0)
+-#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 0)
+-#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 0)
+-#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 0)
++#define WM8350_ISINK_FLASH_ON_INSTANT (0 << 0)
++#define WM8350_ISINK_FLASH_ON_0_25S (1 << 0)
++#define WM8350_ISINK_FLASH_ON_0_50S (2 << 0)
++#define WM8350_ISINK_FLASH_ON_1_00S (3 << 0)
++#define WM8350_ISINK_FLASH_ON_1_95S (1 << 0)
++#define WM8350_ISINK_FLASH_ON_3_91S (2 << 0)
++#define WM8350_ISINK_FLASH_ON_7_80S (3 << 0)
++#define WM8350_ISINK_FLASH_OFF_INSTANT (0 << 4)
++#define WM8350_ISINK_FLASH_OFF_0_25S (1 << 4)
++#define WM8350_ISINK_FLASH_OFF_0_50S (2 << 4)
++#define WM8350_ISINK_FLASH_OFF_1_00S (3 << 4)
++#define WM8350_ISINK_FLASH_OFF_1_95S (1 << 4)
++#define WM8350_ISINK_FLASH_OFF_3_91S (2 << 4)
++#define WM8350_ISINK_FLASH_OFF_7_80S (3 << 4)
+
+ /*
+ * Regulator Interrupts.
+diff --git a/include/linux/pci.h b/include/linux/pci.h
+index f5c7cd3..2547515 100644
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -564,6 +564,9 @@ void pcibios_align_resource(void *, struct resource *, resource_size_t,
+ resource_size_t);
+ void pcibios_update_irq(struct pci_dev *, int irq);
+
++/* Weak but can be overriden by arch */
++void pci_fixup_cardbus(struct pci_bus *);
++
+ /* Generic PCI functions used internally */
+
+ extern struct pci_bus *pci_find_bus(int domain, int busnr);
+diff --git a/kernel/futex.c b/kernel/futex.c
+index d73ef1f..3b74909 100644
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -203,8 +203,6 @@ static void drop_futex_key_refs(union futex_key *key)
+ * @uaddr: virtual address of the futex
+ * @fshared: 0 for a PROCESS_PRIVATE futex, 1 for PROCESS_SHARED
+ * @key: address where result is stored.
+- * @rw: mapping needs to be read/write (values: VERIFY_READ,
+- * VERIFY_WRITE)
+ *
+ * Returns a negative error code or 0
+ * The key words are stored in *key on success.
+@@ -216,7 +214,7 @@ static void drop_futex_key_refs(union futex_key *key)
+ * lock_page() might sleep, the caller should not hold a spinlock.
+ */
+ static int
+-get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
++get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key)
+ {
+ unsigned long address = (unsigned long)uaddr;
+ struct mm_struct *mm = current->mm;
+@@ -239,7 +237,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
+ * but access_ok() should be faster than find_vma()
+ */
+ if (!fshared) {
+- if (unlikely(!access_ok(rw, uaddr, sizeof(u32))))
++ if (unlikely(!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))))
+ return -EFAULT;
+ key->private.mm = mm;
+ key->private.address = address;
+@@ -248,7 +246,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
+ }
+
+ again:
+- err = get_user_pages_fast(address, 1, rw == VERIFY_WRITE, &page);
++ err = get_user_pages_fast(address, 1, 1, &page);
+ if (err < 0)
+ return err;
+
+@@ -867,7 +865,7 @@ static int futex_wake(u32 __user *uaddr, int fshared, int nr_wake, u32 bitset)
+ if (!bitset)
+ return -EINVAL;
+
+- ret = get_futex_key(uaddr, fshared, &key, VERIFY_READ);
++ ret = get_futex_key(uaddr, fshared, &key);
+ if (unlikely(ret != 0))
+ goto out;
+
+@@ -913,10 +911,10 @@ futex_wake_op(u32 __user *uaddr1, int fshared, u32 __user *uaddr2,
+ int ret, op_ret;
+
+ retry:
+- ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ);
++ ret = get_futex_key(uaddr1, fshared, &key1);
+ if (unlikely(ret != 0))
+ goto out;
+- ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE);
++ ret = get_futex_key(uaddr2, fshared, &key2);
+ if (unlikely(ret != 0))
+ goto out_put_key1;
+
+@@ -1175,11 +1173,10 @@ retry:
+ pi_state = NULL;
+ }
+
+- ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ);
++ ret = get_futex_key(uaddr1, fshared, &key1);
+ if (unlikely(ret != 0))
+ goto out;
+- ret = get_futex_key(uaddr2, fshared, &key2,
+- requeue_pi ? VERIFY_WRITE : VERIFY_READ);
++ ret = get_futex_key(uaddr2, fshared, &key2);
+ if (unlikely(ret != 0))
+ goto out_put_key1;
+
+@@ -1738,7 +1735,7 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, int fshared,
+ */
+ retry:
+ q->key = FUTEX_KEY_INIT;
+- ret = get_futex_key(uaddr, fshared, &q->key, VERIFY_READ);
++ ret = get_futex_key(uaddr, fshared, &q->key);
+ if (unlikely(ret != 0))
+ return ret;
+
+@@ -1904,7 +1901,7 @@ static int futex_lock_pi(u32 __user *uaddr, int fshared,
+ q.requeue_pi_key = NULL;
+ retry:
+ q.key = FUTEX_KEY_INIT;
+- ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_WRITE);
++ ret = get_futex_key(uaddr, fshared, &q.key);
+ if (unlikely(ret != 0))
+ goto out;
+
+@@ -2023,7 +2020,7 @@ retry:
+ if ((uval & FUTEX_TID_MASK) != task_pid_vnr(current))
+ return -EPERM;
+
+- ret = get_futex_key(uaddr, fshared, &key, VERIFY_WRITE);
++ ret = get_futex_key(uaddr, fshared, &key);
+ if (unlikely(ret != 0))
+ goto out;
+
+@@ -2215,7 +2212,7 @@ static int futex_wait_requeue_pi(u32 __user *uaddr, int fshared,
+ rt_waiter.task = NULL;
+
+ key2 = FUTEX_KEY_INIT;
+- ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE);
++ ret = get_futex_key(uaddr2, fshared, &key2);
+ if (unlikely(ret != 0))
+ goto out;
+
+diff --git a/kernel/sched.c b/kernel/sched.c
+index dd0dccd..bf841d8 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -3177,10 +3177,6 @@ static void pull_task(struct rq *src_rq, struct task_struct *p,
+ deactivate_task(src_rq, p, 0);
+ set_task_cpu(p, this_cpu);
+ activate_task(this_rq, p, 0);
+- /*
+- * Note that idle threads have a prio of MAX_PRIO, for this test
+- * to be always true for them.
+- */
+ check_preempt_curr(this_rq, p, 0);
+ }
+
+@@ -6982,7 +6978,6 @@ void __cpuinit init_idle(struct task_struct *idle, int cpu)
+ __sched_fork(idle);
+ idle->se.exec_start = sched_clock();
+
+- idle->prio = idle->normal_prio = MAX_PRIO;
+ cpumask_copy(&idle->cpus_allowed, cpumask_of(cpu));
+ __set_task_cpu(idle, cpu);
+
+@@ -7686,7 +7681,6 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
+ spin_lock_irq(&rq->lock);
+ update_rq_clock(rq);
+ deactivate_task(rq, rq->idle, 0);
+- rq->idle->static_prio = MAX_PRIO;
+ __setscheduler(rq, rq->idle, SCHED_NORMAL, 0);
+ rq->idle->sched_class = &idle_sched_class;
+ migrate_dead_tasks(cpu);
+diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c
+index 479ce56..5b49613 100644
+--- a/kernel/sched_clock.c
++++ b/kernel/sched_clock.c
+@@ -236,6 +236,18 @@ void sched_clock_idle_wakeup_event(u64 delta_ns)
+ }
+ EXPORT_SYMBOL_GPL(sched_clock_idle_wakeup_event);
+
++unsigned long long cpu_clock(int cpu)
++{
++ unsigned long long clock;
++ unsigned long flags;
++
++ local_irq_save(flags);
++ clock = sched_clock_cpu(cpu);
++ local_irq_restore(flags);
++
++ return clock;
++}
++
+ #else /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */
+
+ void sched_clock_init(void)
+@@ -251,17 +263,12 @@ u64 sched_clock_cpu(int cpu)
+ return sched_clock();
+ }
+
+-#endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */
+
+ unsigned long long cpu_clock(int cpu)
+ {
+- unsigned long long clock;
+- unsigned long flags;
++ return sched_clock_cpu(cpu);
++}
+
+- local_irq_save(flags);
+- clock = sched_clock_cpu(cpu);
+- local_irq_restore(flags);
++#endif /* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK */
+
+- return clock;
+-}
+ EXPORT_SYMBOL_GPL(cpu_clock);
+diff --git a/mm/memcontrol.c b/mm/memcontrol.c
+index 5dc1037..66035bf 100644
+--- a/mm/memcontrol.c
++++ b/mm/memcontrol.c
+@@ -2381,7 +2381,7 @@ static int mem_cgroup_force_empty(struct mem_cgroup *mem, bool free_all)
+ if (free_all)
+ goto try_to_free;
+ move_account:
+- while (mem->res.usage > 0) {
++ do {
+ ret = -EBUSY;
+ if (cgroup_task_count(cgrp) || !list_empty(&cgrp->children))
+ goto out;
+@@ -2408,8 +2408,8 @@ move_account:
+ if (ret == -ENOMEM)
+ goto try_to_free;
+ cond_resched();
+- }
+- ret = 0;
++ /* "ret" should also be checked to ensure all lists are empty. */
++ } while (mem->res.usage > 0 || ret);
+ out:
+ css_put(&mem->css);
+ return ret;
+@@ -2442,10 +2442,7 @@ try_to_free:
+ }
+ lru_add_drain();
+ /* try move_account...there may be some *locked* pages. */
+- if (mem->res.usage)
+- goto move_account;
+- ret = 0;
+- goto out;
++ goto move_account;
+ }
+
+ int mem_cgroup_force_empty_write(struct cgroup *cont, unsigned int event)
+diff --git a/mm/page_alloc.c b/mm/page_alloc.c
+index 2bc2ac6..3a78e2e 100644
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -1225,10 +1225,10 @@ again:
+ }
+ spin_lock_irqsave(&zone->lock, flags);
+ page = __rmqueue(zone, order, migratetype);
+- __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order));
+ spin_unlock(&zone->lock);
+ if (!page)
+ goto failed;
++ __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order));
+ }
+
+ __count_zone_vm_events(PGALLOC, zone, 1 << order);
+diff --git a/mm/truncate.c b/mm/truncate.c
+index 450cebd..258bda7 100644
+--- a/mm/truncate.c
++++ b/mm/truncate.c
+@@ -516,22 +516,20 @@ EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
+ */
+ void truncate_pagecache(struct inode *inode, loff_t old, loff_t new)
+ {
+- if (new < old) {
+- struct address_space *mapping = inode->i_mapping;
+-
+- /*
+- * unmap_mapping_range is called twice, first simply for
+- * efficiency so that truncate_inode_pages does fewer
+- * single-page unmaps. However after this first call, and
+- * before truncate_inode_pages finishes, it is possible for
+- * private pages to be COWed, which remain after
+- * truncate_inode_pages finishes, hence the second
+- * unmap_mapping_range call must be made for correctness.
+- */
+- unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
+- truncate_inode_pages(mapping, new);
+- unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
+- }
++ struct address_space *mapping = inode->i_mapping;
++
++ /*
++ * unmap_mapping_range is called twice, first simply for
++ * efficiency so that truncate_inode_pages does fewer
++ * single-page unmaps. However after this first call, and
++ * before truncate_inode_pages finishes, it is possible for
++ * private pages to be COWed, which remain after
++ * truncate_inode_pages finishes, hence the second
++ * unmap_mapping_range call must be made for correctness.
++ */
++ unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
++ truncate_inode_pages(mapping, new);
++ unmap_mapping_range(mapping, new + PAGE_SIZE - 1, 0, 1);
+ }
+ EXPORT_SYMBOL(truncate_pagecache);
+
+diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
+index a4cb183..075c3a6 100644
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -14685,6 +14685,8 @@ static int patch_alc861(struct hda_codec *codec)
+ spec->stream_digital_playback = &alc861_pcm_digital_playback;
+ spec->stream_digital_capture = &alc861_pcm_digital_capture;
+
++ if (!spec->cap_mixer)
++ set_capture_mixer(codec);
+ set_beep_amp(spec, 0x23, 0, HDA_OUTPUT);
+
+ spec->vmaster_nid = 0x03;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2010-01-23 2:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-23 2:08 [gentoo-commits] linux-patches r1656 - genpatches-2.6/trunk/2.6.32 Mike Pagano (mpagano)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox