Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 23 Mar 2007 18:01:41 +0000 (11:01 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Fri, 23 Mar 2007 18:01:41 +0000 (11:01 -0700)
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
  [netdrvr] ewrk3: correct card detection bug
  cxgb3 - fix white spaces in drivers/net/Kconfig
  myri10ge: update driver version to 1.3.0-1.226
  myri10ge: fix management of >4kB allocated pages
  myri10ge: update wcfifo and intr_coal_delay default values
  myri10ge: Serverworks HT2100 provides aligned PCIe completion
  mv643xx_eth: add mv643xx_eth_shutdown function
  SAA9730: Fix large pile of warnings
  Revert "ucc_geth: returns NETDEV_TX_BUSY when BD ring is full"
  cxgb3 - T3B2 pcie config space
  cxgb3 - Fix potential MAC hang
  cxgb3 - Auto-load FW if mismatch detected
  cxgb3 - fix ethtool cmd on multiple queues port
  Fix return code in pci-skeleton.c
  skge: use per-port phy locking
  skge: mask irqs when device down
  skge: deadlock on tx timeout
  [PATCH] airo: Fix an error path memory leak
  [PATCH] bcm43xx: MANUALWLAN fixes

Documentation/kernel-parameters.txt
arch/i386/kernel/apic.c
drivers/acpi/processor_idle.c
drivers/serial/8250_pnp.c
drivers/video/riva/fbdev.c
fs/binfmt_elf_fdpic.c
fs/ext3/xattr.c
include/asm-i386/apic.h
kernel/time/timer_list.c

index e39ab0c99fbbeeeef9a8a2169c07e81f6daa0e51..09640a8f7cebfe6010937d781c751d688e856a97 100644 (file)
@@ -780,6 +780,9 @@ and is between 256 and 4096 characters. It is defined in the file
        lapic           [IA-32,APIC] Enable the local APIC even if BIOS
                        disabled it.
 
+       lapic_timer_c2_ok       [IA-32,APIC] trust the local apic timer in
+                       C2 power state.
+
        lasi=           [HW,SCSI] PARISC LASI driver for the 53c700 chip
                        Format: addr:<io>,irq:<irq>
 
index 244c3fe9b8c3acc754d79f51eac28a9ee456d93f..e88415282a6f0ebf3024c2a5b1165e95502686e2 100644 (file)
@@ -64,6 +64,9 @@ static int enable_local_apic __initdata = 0;
 static int local_apic_timer_verify_ok;
 /* Disable local APIC timer from the kernel commandline or via dmi quirk */
 static int local_apic_timer_disabled;
+/* Local APIC timer works in C2 */
+int local_apic_timer_c2_ok;
+EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok);
 
 /*
  * Debug level, exported for io_apic.c
@@ -1232,6 +1235,13 @@ static int __init parse_disable_lapic_timer(char *arg)
 }
 early_param("nolapic_timer", parse_disable_lapic_timer);
 
+static int __init parse_lapic_timer_c2_ok(char *arg)
+{
+       local_apic_timer_c2_ok = 1;
+       return 0;
+}
+early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok);
+
 static int __init apic_set_verbosity(char *str)
 {
        if (strcmp("debug", str) == 0)
index 562124ed785ec20923da69e014c0b0ac89e9bf75..cdf78943af4db915f1a54da4285cbca2cc1c42ac 100644 (file)
@@ -89,12 +89,6 @@ module_param(nocst, uint, 0000);
 static unsigned int bm_history __read_mostly =
     (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
 module_param(bm_history, uint, 0644);
-
-static unsigned use_ipi = 2;
-module_param(use_ipi, uint, 0644);
-MODULE_PARM_DESC(use_ipi, "IPI (vs. LAPIC) irqs for not waking up from C2/C3"
-                " machines. 0=apic, 1=ipi, 2=auto\n");
-
 /* --------------------------------------------------------------------------
                                 Power Management
    -------------------------------------------------------------------------- */
@@ -266,13 +260,15 @@ static void acpi_cstate_enter(struct acpi_processor_cx *cstate)
 
 /*
  * Some BIOS implementations switch to C3 in the published C2 state.
- * This seems to be a common problem on AMD boxen and Intel Dothan/Banias
- * Pentium M machines.
+ * This seems to be a common problem on AMD boxen, but other vendors
+ * are affected too. We pick the most conservative approach: we assume
+ * that the local APIC stops in both C2 and C3.
  */
 static void acpi_timer_check_state(int state, struct acpi_processor *pr,
                                   struct acpi_processor_cx *cx)
 {
        struct acpi_processor_power *pwr = &pr->power;
+       u8 type = local_apic_timer_c2_ok ? ACPI_STATE_C3 : ACPI_STATE_C2;
 
        /*
         * Check, if one of the previous states already marked the lapic
@@ -281,17 +277,8 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
        if (pwr->timer_broadcast_on_state < state)
                return;
 
-       if (cx->type >= ACPI_STATE_C2) {
-               if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
-                       pr->power.timer_broadcast_on_state = state;
-               else if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
-                         boot_cpu_data.x86 == 6) &&
-                        (boot_cpu_data.x86_model == 13 ||
-                         boot_cpu_data.x86_model == 9))
-               {
-                       pr->power.timer_broadcast_on_state = state;
-               }
-       }
+       if (cx->type >= type)
+               pr->power.timer_broadcast_on_state = state;
 }
 
 static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
@@ -306,16 +293,10 @@ static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
 #else
        cpumask_t mask = cpumask_of_cpu(pr->id);
 
-       if (use_ipi == 0)
+       if (pr->power.timer_broadcast_on_state < INT_MAX)
                on_each_cpu(switch_APIC_timer_to_ipi, &mask, 1, 1);
-       else if (use_ipi == 1)
+       else
                on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1);
-       else {
-               if (pr->power.timer_broadcast_on_state < INT_MAX)
-                       on_each_cpu(switch_APIC_timer_to_ipi, &mask, 1, 1);
-               else
-                       on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1);
-       }
 #endif
 }
 
@@ -1033,13 +1014,13 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
 
                case ACPI_STATE_C2:
                        acpi_processor_power_verify_c2(cx);
-                       if (cx->valid && use_ipi != 0 && use_ipi != 1)
+                       if (cx->valid)
                                acpi_timer_check_state(i, pr, cx);
                        break;
 
                case ACPI_STATE_C3:
                        acpi_processor_power_verify_c3(pr, cx);
-                       if (cx->valid && use_ipi != 0 && use_ipi != 1)
+                       if (cx->valid)
                                acpi_timer_check_state(i, pr, cx);
                        break;
                }
index cde5db44abf6f136b601f65bf070ac1c31318ded..301c8c0be9d76863767e6bc7e680652ae54ca701 100644 (file)
@@ -340,6 +340,9 @@ static const struct pnp_device_id pnp_dev_table[] = {
        {       "FUJ02B8",              0 },
        {       "FUJ02B9",              0 },
        {       "FUJ02BC",              0 },
+       /* Fujitsu Wacom Tablet PC devices */
+       {       "FUJ02E5",              0       },
+       {       "FUJ02E6",              0       },
        /* Rockwell's (PORALiNK) 33600 INT PNP */
        {       "WCI0003",              0       },
        /* Unkown PnP modems */
index 1d1c7c624d7f04be2c854741fdac775e6674d7bf..d7ece8d17a2c53f41fee7ccdccadc89411082b87 100644 (file)
@@ -285,8 +285,6 @@ static const struct riva_regs reg_template = {
 #define MAX_LEVEL 0x534
 #define LEVEL_STEP ((MAX_LEVEL - MIN_LEVEL) / FB_BACKLIGHT_MAX)
 
-static struct backlight_properties riva_bl_data;
-
 static int riva_bl_get_level_brightness(struct riva_par *par,
                int level)
 {
@@ -372,7 +370,7 @@ static void riva_bl_init(struct riva_par *par)
                FB_BACKLIGHT_MAX);
 
        bd->props.max_brightness = FB_BACKLIGHT_LEVELS - 1;
-       bd->props.brightness = riva_bl_data.max_brightness;
+       bd->props.brightness = bd->props.max_brightness;
        bd->props.power = FB_BLANK_UNBLANK;
        backlight_update_status(bd);
 
index 5810aa1339fdeb5d6d98dd857328998bcde733e5..47d6d49d1fb9c393328adb82cd725b67f770aede 100644 (file)
@@ -179,6 +179,8 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm,
        int executable_stack;
        int retval, i;
 
+       kdebug("____ LOAD %d ____", current->pid);
+
        memset(&exec_params, 0, sizeof(exec_params));
        memset(&interp_params, 0, sizeof(interp_params));
 
@@ -941,8 +943,11 @@ static int elf_fdpic_map_file_constdisp_on_uclinux(
 
                if (mm) {
                        if (phdr->p_flags & PF_X) {
-                               mm->start_code = seg->addr;
-                               mm->end_code = seg->addr + phdr->p_memsz;
+                               if (!mm->start_code) {
+                                       mm->start_code = seg->addr;
+                                       mm->end_code = seg->addr +
+                                               phdr->p_memsz;
+                               }
                        } else if (!mm->start_data) {
                                mm->start_data = seg->addr;
 #ifndef CONFIG_MMU
@@ -1123,8 +1128,10 @@ static int elf_fdpic_map_file_by_direct_mmap(struct elf_fdpic_params *params,
 
                if (mm) {
                        if (phdr->p_flags & PF_X) {
-                               mm->start_code = maddr;
-                               mm->end_code = maddr + phdr->p_memsz;
+                               if (!mm->start_code) {
+                                       mm->start_code = maddr;
+                                       mm->end_code = maddr + phdr->p_memsz;
+                               }
                        } else if (!mm->start_data) {
                                mm->start_data = maddr;
                                mm->end_data = maddr + phdr->p_memsz;
index 12f7dda1232cb8b17749d6f3e87d6ea77a40bb0c..f58cbb26323e1ea666d78eba4cb4d3bd4c16490a 100644 (file)
@@ -495,7 +495,8 @@ ext3_xattr_release_block(handle_t *handle, struct inode *inode,
                BHDR(bh)->h_refcount = cpu_to_le32(
                                le32_to_cpu(BHDR(bh)->h_refcount) - 1);
                error = ext3_journal_dirty_metadata(handle, bh);
-               handle->h_sync = 1;
+               if (IS_SYNC(inode))
+                       handle->h_sync = 1;
                DQUOT_FREE_BLOCK(inode, 1);
                ea_bdebug(bh, "refcount now=%d; releasing",
                          le32_to_cpu(BHDR(bh)->h_refcount));
index cc6b1652249aed9ed4251166b1b9c47a8cd27338..a19810a08ae908097b2ea9a6768ba587730b1122 100644 (file)
@@ -117,6 +117,7 @@ extern void enable_NMI_through_LVT0 (void * dummy);
 #define ARCH_APICTIMER_STOPS_ON_C3     1
 
 extern int timer_over_8254;
+extern int local_apic_timer_c2_ok;
 
 #else /* !CONFIG_X86_LOCAL_APIC */
 static inline void lapic_shutdown(void) { }
index f82c635c3d5ca87399b944bd69c89f2204f6a93e..59df5e8555a8a40d25321bb9569612e8a29f68b2 100644 (file)
@@ -194,9 +194,9 @@ print_tickdevice(struct seq_file *m, struct tick_device *td)
                return;
        }
        SEQ_printf(m, "%s\n", dev->name);
-       SEQ_printf(m, " max_delta_ns:   %ld\n", dev->max_delta_ns);
-       SEQ_printf(m, " min_delta_ns:   %ld\n", dev->min_delta_ns);
-       SEQ_printf(m, " mult:           %ld\n", dev->mult);
+       SEQ_printf(m, " max_delta_ns:   %lu\n", dev->max_delta_ns);
+       SEQ_printf(m, " min_delta_ns:   %lu\n", dev->min_delta_ns);
+       SEQ_printf(m, " mult:           %lu\n", dev->mult);
        SEQ_printf(m, " shift:          %d\n", dev->shift);
        SEQ_printf(m, " mode:           %d\n", dev->mode);
        SEQ_printf(m, " next_event:     %Ld nsecs\n",