--- linux-ec2-2.6.32.orig/MAINTAINERS +++ linux-ec2-2.6.32/MAINTAINERS @@ -1974,6 +1974,12 @@ S: Maintained F: drivers/platform/x86/eeepc-laptop.c +EFIFB FRAMEBUFFER DRIVER +L: linux-fbdev@vger.kernel.org +M: Peter Jones +S: Maintained +F: drivers/video/efifb.c + EFS FILESYSTEM W: http://aeschi.ch.eu.org/efs/ S: Orphan @@ -4373,7 +4379,7 @@ F: drivers/block/brd.c RANDOM NUMBER DRIVER -M: Matt Mackall +M: Theodore Ts'o" S: Maintained F: drivers/char/random.c @@ -5004,8 +5010,7 @@ STABLE BRANCH M: Greg Kroah-Hartman -M: Chris Wright -L: stable@kernel.org +L: stable@vger.kernel.org S: Maintained STAGING SUBSYSTEM @@ -5594,9 +5599,11 @@ F: drivers/net/wireless/rndis_wlan.c USB XHCI DRIVER -M: Sarah Sharp +M: Sarah Sharp L: linux-usb@vger.kernel.org S: Supported +F: drivers/usb/host/xhci* +F: drivers/usb/host/pci-quirks* USB ZC0301 DRIVER M: Luca Risolia @@ -5718,6 +5725,14 @@ S: Maintained F: drivers/net/vmxnet3/ +VMware PVSCSI driver +M: Alok Kataria +M: VMware PV-Drivers +L: linux-scsi@vger.kernel.org +S: Maintained +F: drivers/scsi/vmw_pvscsi.c +F: drivers/scsi/vmw_pvscsi.h + VOLTAGE AND CURRENT REGULATOR FRAMEWORK M: Liam Girdwood M: Mark Brown --- linux-ec2-2.6.32.orig/Makefile +++ linux-ec2-2.6.32/Makefile @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 -EXTRAVERSION = +EXTRAVERSION = .63+drm33.26 NAME = Man-Eating Seals of Antiquity # *DOCUMENTATION* @@ -331,14 +331,23 @@ AFLAGS_KERNEL = CFLAGS_GCOV = -fprofile-arcs -ftest-coverage +# Prefer linux-backports-modules +ifneq ($(KBUILD_SRC),) +ifneq ($(shell if test -e $(KBUILD_OUTPUT)/ubuntu-build; then echo yes; fi),yes) +UBUNTUINCLUDE := -I/usr/src/linux-headers-lbm-$(KERNELRELEASE) +endif +endif # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option -LINUXINCLUDE := -Iinclude \ +LINUXINCLUDE := $(UBUNTUINCLUDE) -Iinclude \ $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include) \ -I$(srctree)/arch/$(hdr-arch)/include \ -include include/linux/autoconf.h +# UBUNTU: Include our third party driver stuff too +LINUXINCLUDE += -Iubuntu/include $(if $(KBUILD_SRC),-I$(srctree)/ubuntu/include) + KBUILD_CPPFLAGS := -D__KERNEL__ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ @@ -464,12 +473,12 @@ # Carefully list dependencies so we do not try to build scripts twice # in parallel PHONY += scripts -scripts: scripts_basic include/config/auto.conf +scripts: scripts_basic include/config/auto.conf include/config/tristate.conf $(Q)$(MAKE) $(build)=$(@) # Objects we will link into vmlinux / subdirs we need to visit init-y := init/ -drivers-y := drivers/ sound/ firmware/ +drivers-y := drivers/ sound/ firmware/ ubuntu/ net-y := net/ libs-y := lib/ core-y := usr/ @@ -491,7 +500,7 @@ # with it and forgot to run make oldconfig. # if auto.conf.cmd is missing then we are probably in a cleaned tree so # we execute the config step to be sure to catch updated Kconfig files -include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd +include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig else # external modules needs include/linux/autoconf.h and include/config/auto.conf @@ -537,6 +546,9 @@ KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector) endif +# This warning generated too much noise in a regular build. +KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) + ifdef CONFIG_FRAME_POINTER KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls else @@ -565,7 +577,7 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) # disable pointer signed / unsigned warnings in gcc 4.0 -KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,) +KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign) # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) @@ -876,6 +888,9 @@ PHONY += $(vmlinux-dirs) $(vmlinux-dirs): prepare scripts $(Q)$(MAKE) $(build)=$@ +ifdef CONFIG_MODULES + $(Q)$(MAKE) $(modbuiltin)=$@ +endif # Build the kernel release string # @@ -1126,6 +1141,7 @@ PHONY += modules modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order + $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin @$(kecho) ' Building modules, stage 2.'; $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild @@ -1155,6 +1171,7 @@ ln -s $(objtree) $(MODLIB)/build ; \ fi @cp -f $(objtree)/modules.order $(MODLIB)/ + @cp -f $(objtree)/modules.builtin $(MODLIB)/ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst # This depmod is only for convenience to give the initial @@ -1218,6 +1235,7 @@ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '*.symtypes' -o -name 'modules.order' \ -o -name 'Module.markers' -o -name '.tmp_*.o.*' \ + -o -name 'modules.builtin' \ -o -name '*.gcno' \) -type f -print | xargs rm -f # mrproper - Delete all generated files, including .config @@ -1416,7 +1434,8 @@ clean: rm-dirs := $(MODVERDIR) clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers \ $(KBUILD_EXTMOD)/Module.markers \ - $(KBUILD_EXTMOD)/modules.order + $(KBUILD_EXTMOD)/modules.order \ + $(KBUILD_EXTMOD)/modules.builtin clean: $(clean-dirs) $(call cmd,rmdirs) $(call cmd,rmfiles) --- linux-ec2-2.6.32.orig/scripts/gcc-x86_32-has-stack-protector.sh +++ linux-ec2-2.6.32/scripts/gcc-x86_32-has-stack-protector.sh @@ -1,6 +1,6 @@ #!/bin/sh -echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs" +echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs" if [ "$?" -eq "0" ] ; then echo y else --- linux-ec2-2.6.32.orig/scripts/Makefile.modbuiltin +++ linux-ec2-2.6.32/scripts/Makefile.modbuiltin @@ -0,0 +1,55 @@ +# ========================================================================== +# Generating modules.builtin +# ========================================================================== + +src := $(obj) + +PHONY := __modbuiltin +__modbuiltin: + +-include include/config/auto.conf +# tristate.conf sets tristate variables to uppercase 'Y' or 'M' +# That way, we get the list of built-in modules in obj-Y +-include include/config/tristate.conf + +include scripts/Kbuild.include + +# The filename Kbuild has precedence over Makefile +kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) +kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) +include $(kbuild-file) + +include scripts/Makefile.lib +__subdir-Y := $(patsubst %/,%,$(filter %/, $(obj-Y))) +subdir-Y += $(__subdir-Y) +subdir-ym := $(sort $(subdir-y) $(subdir-Y) $(subdir-m)) +subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) +obj-Y := $(addprefix $(obj)/,$(obj-Y)) + +modbuiltin-subdirs := $(patsubst %,%/modules.builtin, $(subdir-ym)) +modbuiltin-mods := $(filter %.ko, $(obj-Y:.o=.ko)) +modbuiltin-target := $(obj)/modules.builtin + +__modbuiltin: $(modbuiltin-target) $(subdir-ym) + @: + +$(modbuiltin-target): $(subdir-ym) FORCE + $(Q)(for m in $(modbuiltin-mods); do echo kernel/$$m; done; \ + cat /dev/null $(modbuiltin-subdirs)) > $@ + +PHONY += FORCE + +FORCE: + +# Descending +# --------------------------------------------------------------------------- + +PHONY += $(subdir-ym) +$(subdir-ym): + $(Q)$(MAKE) $(modbuiltin)=$@ + + +# Declare the contents of the .PHONY variable as phony. We keep that +# information in a variable se we can use it in if_changed and friends. + +.PHONY: $(PHONY) --- linux-ec2-2.6.32.orig/scripts/gcc-version.sh +++ linux-ec2-2.6.32/scripts/gcc-version.sh @@ -22,10 +22,10 @@ exit 1 fi -MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1) -MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1) +MAJOR=$(echo __GNUC__ | $compiler -E -x c - | tail -n 1) +MINOR=$(echo __GNUC_MINOR__ | $compiler -E -x c - | tail -n 1) if [ "x$with_patchlevel" != "x" ] ; then - PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -xc - | tail -n 1) + PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -x c - | tail -n 1) printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL else printf "%02d%02d\\n" $MAJOR $MINOR --- linux-ec2-2.6.32.orig/scripts/Makefile.xen.awk +++ linux-ec2-2.6.32/scripts/Makefile.xen.awk @@ -0,0 +1,34 @@ +BEGIN { + is_rule = 0 +} + +/^[[:space:]]*#/ { + next +} + +/^[[:space:]]*$/ { + if (is_rule) + print("") + is_rule = 0 + next +} + +/:[[:space:]]*\$\(src\)\/%\.[cS][[:space:]]/ { + line = gensub(/%.([cS])/, "%-xen.\\1", "g", $0) + line = gensub(/(single-used-m)/, "xen-\\1", "g", line) + print line + is_rule = 1 + next +} + +/^[^\t]$/ { + if (is_rule) + print("") + is_rule = 0 + next +} + +is_rule { + print $0 + next +} --- linux-ec2-2.6.32.orig/scripts/Makefile.lib +++ linux-ec2-2.6.32/scripts/Makefile.lib @@ -22,6 +22,12 @@ lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m))) +# Remove objects forcibly disabled + +obj-y := $(filter-out $(disabled-obj-y),$(obj-y)) +obj-m := $(filter-out $(disabled-obj-y),$(obj-m)) +lib-y := $(filter-out $(disabled-obj-y),$(lib-y)) + # Handle objects in subdirs # --------------------------------------------------------------------------- --- linux-ec2-2.6.32.orig/scripts/mkmakefile +++ linux-ec2-2.6.32/scripts/mkmakefile @@ -44,7 +44,9 @@ Makefile:; -\$(all) %/: all +\$(all): all @: +%/: all + @: EOF --- linux-ec2-2.6.32.orig/scripts/Kbuild.include +++ linux-ec2-2.6.32/scripts/Kbuild.include @@ -94,30 +94,35 @@ # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) as-option = $(call try-run,\ - $(CC) $(KBUILD_CFLAGS) $(1) -c -xassembler /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) # as-instr # Usage: cflags-y += $(call as-instr,instr,option1,option2) as-instr = $(call try-run,\ - /bin/echo -e "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -xassembler -o "$$TMP" -,$(2),$(3)) + /bin/echo -e "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) # cc-option # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) cc-option = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) # cc-option-yn # Usage: flag := $(call cc-option-yn,-march=winchip-c6) cc-option-yn = $(call try-run,\ - $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n) + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) # cc-option-align # Prefix align with either -falign or -malign cc-option-align = $(subst -functions=0,,\ $(call cc-option,-falign-functions=0,-malign-functions=0)) +# cc-disable-warning +# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) +cc-disable-warning = $(call try-run,\ + $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) + # cc-version # Usage gcc-ver := $(call cc-version) cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC)) @@ -134,7 +139,7 @@ # cc-ldoption # Usage: ldflags += $(call cc-ldoption, -Wl$(comma)--hash-style=both) cc-ldoption = $(call try-run,\ - $(CC) $(1) -nostdlib -xc /dev/null -o "$$TMP",$(1),$(2)) + $(CC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2)) # ld-option # Usage: LDFLAGS += $(call ld-option, -X) @@ -149,6 +154,12 @@ # $(Q)$(MAKE) $(build)=dir build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj +### +# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.modbuiltin obj= +# Usage: +# $(Q)$(MAKE) $(modbuiltin)=dir +modbuiltin := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.modbuiltin obj + # Prefix -I with $(srctree) if it is not an absolute path. # skip if -I has no parameter addtree = $(if $(patsubst -I%,%,$(1)), \ --- linux-ec2-2.6.32.orig/scripts/gcc-x86_64-has-stack-protector.sh +++ linux-ec2-2.6.32/scripts/gcc-x86_64-has-stack-protector.sh @@ -1,6 +1,6 @@ #!/bin/sh -echo "int foo(void) { char X[200]; return 3; }" | $* -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs" +echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -mcmodel=kernel -fstack-protector - -o - 2> /dev/null | grep -q "%gs" if [ "$?" -eq "0" ] ; then echo y else --- linux-ec2-2.6.32.orig/scripts/Makefile.build +++ linux-ec2-2.6.32/scripts/Makefile.build @@ -76,6 +76,21 @@ $(warning kbuild: Makefile.build is included improperly) endif +ifeq ($(CONFIG_XEN),y) +Makefile.xen := $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD),$(objtree)/scripts)/Makefile.xen +$(Makefile.xen): $(srctree)/scripts/Makefile.xen.awk $(srctree)/scripts/Makefile.build + @echo ' Updating $@' + $(if $(shell echo a | $(AWK) '{ print gensub(/a/, "AA", "g"); }'),\ + ,$(error 'Your awk program does not define gensub. Use gawk or another awk with gensub')) + @$(AWK) -f $< $(filter-out $<,$^) >$@ + +xen-src-single-used-m := $(patsubst $(srctree)/%,%,$(wildcard $(addprefix $(srctree)/,$(single-used-m:.o=-xen.c)))) +xen-single-used-m := $(xen-src-single-used-m:-xen.c=.o) +single-used-m := $(filter-out $(xen-single-used-m),$(single-used-m)) + +-include $(Makefile.xen) +endif + # =========================================================================== ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),) --- linux-ec2-2.6.32.orig/scripts/mod/modpost.c +++ linux-ec2-2.6.32/scripts/mod/modpost.c @@ -1311,7 +1311,7 @@ int section = sechdr->sh_info; return (void *)elf->hdr + sechdrs[section].sh_offset + - (r->r_offset - sechdrs[section].sh_addr); + r->r_offset - sechdrs[section].sh_addr; } static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r) --- linux-ec2-2.6.32.orig/scripts/kconfig/confdata.c +++ linux-ec2-2.6.32/scripts/kconfig/confdata.c @@ -677,7 +677,7 @@ struct symbol *sym; const char *str; const char *name; - FILE *out, *out_h; + FILE *out, *tristate, *out_h; time_t now; int i, l; @@ -692,9 +692,16 @@ if (!out) return 1; + tristate = fopen(".tmpconfig_tristate", "w"); + if (!tristate) { + fclose(out); + return 1; + } + out_h = fopen(".tmpconfig.h", "w"); if (!out_h) { fclose(out); + fclose(tristate); return 1; } @@ -707,6 +714,9 @@ "# %s" "#\n", sym_get_string_value(sym), ctime(&now)); + fprintf(tristate, "#\n" + "# Automatically generated - do not edit\n" + "\n"); fprintf(out_h, "/*\n" " * Automatically generated C config: don't edit\n" " * Linux kernel version: %s\n" @@ -727,10 +737,14 @@ break; case mod: fprintf(out, "CONFIG_%s=m\n", sym->name); + fprintf(tristate, "CONFIG_%s=M\n", sym->name); fprintf(out_h, "#define CONFIG_%s_MODULE 1\n", sym->name); break; case yes: fprintf(out, "CONFIG_%s=y\n", sym->name); + if (sym->type == S_TRISTATE) + fprintf(tristate, "CONFIG_%s=Y\n", + sym->name); fprintf(out_h, "#define CONFIG_%s 1\n", sym->name); break; } @@ -772,6 +786,7 @@ } } fclose(out); + fclose(tristate); fclose(out_h); name = getenv("KCONFIG_AUTOHEADER"); @@ -779,6 +794,11 @@ name = "include/linux/autoconf.h"; if (rename(".tmpconfig.h", name)) return 1; + name = getenv("KCONFIG_TRISTATE"); + if (!name) + name = "include/config/tristate.conf"; + if (rename(".tmpconfig_tristate", name)) + return 1; name = conf_get_autoconfig_name(); /* * This must be the last step, kbuild has a dependency on auto.conf --- linux-ec2-2.6.32.orig/scripts/kconfig/check.sh +++ linux-ec2-2.6.32/scripts/kconfig/check.sh @@ -1,6 +1,6 @@ #!/bin/sh # Needed for systems without gettext -$* -xc -o /dev/null - > /dev/null 2>&1 << EOF +$* -x c -o /dev/null - > /dev/null 2>&1 << EOF #include int main() { --- linux-ec2-2.6.32.orig/scripts/kconfig/conf.c +++ linux-ec2-2.6.32/scripts/kconfig/conf.c @@ -330,7 +330,7 @@ } if (!child) continue; - if (line[strlen(line) - 1] == '?') { + if (line[0] && line[strlen(line) - 1] == '?') { print_help(child); continue; } --- linux-ec2-2.6.32.orig/scripts/kconfig/lxdialog/check-lxdialog.sh +++ linux-ec2-2.6.32/scripts/kconfig/lxdialog/check-lxdialog.sh @@ -36,7 +36,7 @@ # Check if we can link to ncurses check() { - $cc -xc - -o $tmp 2>/dev/null <<'EOF' + $cc -x c - -o $tmp 2>/dev/null <<'EOF' #include CURSES_LOC main() {} EOF --- linux-ec2-2.6.32.orig/Documentation/Changes +++ linux-ec2-2.6.32/Documentation/Changes @@ -49,6 +49,8 @@ o udev 081 # udevinfo -V o grub 0.93 # grub --version o mcelog 0.6 +o iptables 1.4.1 # iptables -V + Kernel compilation ================== --- linux-ec2-2.6.32.orig/Documentation/kernel-parameters.txt +++ linux-ec2-2.6.32/Documentation/kernel-parameters.txt @@ -241,7 +241,7 @@ acpi_sleep= [HW,ACPI] Sleep options Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, - old_ordering, s4_nonvs } + old_ordering, s4_nonvs, sci_force_enable } See Documentation/power/video.txt for information on s3_bios and s3_mode. s3_beep is for debugging; it makes the PC's speaker beep @@ -254,6 +254,9 @@ of _PTS is used by default). s4_nonvs prevents the kernel from saving/restoring the ACPI NVS memory during hibernation. + sci_force_enable causes the kernel to set SCI_EN directly + on resume from S1/S3 (which is against the ACPI spec, + but some broken systems don't work without it). acpi_use_timer_override [HW,ACPI] Use timer override. For some broken Nvidia NF5 boards @@ -803,6 +806,24 @@ gpt [EFI] Forces disk with valid GPT signature but invalid Protective MBR to be treated as GPT. + guestdev= [PCI,ACPI,XEN] + Format: {|}][,{|}[,...]] + Format of device path: [:]-.[-.[,...]][+iomul] + Format of sbdf: [:]:.[+iomul] + Specifies PCI device for guest domain. + If PCI-PCI bridge is specified, all PCI devices + behind PCI-PCI bridge are reserved. + +iomul means that this PCI function will share + IO ports with other +iomul functions under same + switch. NOTE: if +iomul is specfied, all the functions + of the device will share IO ports. + + guestiomuldev= [PCI,ACPI,XEN] + Format: [sbd][,][,...] + Format of sbdf: [:]: + Note: function shouldn't be specified. + Specifies PCI device for IO port multiplexing driver. + gvp11= [HW,SCSI] hashdist= [KNL,NUMA] Large hashes allocated during boot @@ -875,6 +896,7 @@ i8042.panicblink= [HW] Frequency with which keyboard LEDs should blink when kernel panics (default is 0.5 sec) + i8042.notimeout [HW] Ignore timeout condition signalled by conroller i8042.reset [HW] Reset the controller during init and cleanup i8042.unlock [HW] Unlock (ignore) the keylock @@ -1622,7 +1644,7 @@ noclflush [BUGS=X86] Don't use the CLFLUSH instruction - nodelayacct [KNL] Disable per-task delay accounting + delayacct [KNL] Enable per-task delay accounting nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. @@ -1721,6 +1743,11 @@ noresidual [PPC] Don't use residual data on PReP machines. + nordrand [X86] Disable the direct use of the RDRAND + instruction even if it is supported by the + processor. RDRAND is still available to user + space applications. + noresume [SWSUSP] Disables resume and restores original swap space. @@ -1960,6 +1987,13 @@ off: Turn ECRC off on: Turn ECRC on. + pci_reserve= [PCI] + Format: [[+IO][+MEM]][,...] + Format of sbdf: [:]:. + Specifies the least reserved io size or memory size + which is assigned to PCI bridge even when no child + pci device exists. This is useful with PCI hotplug. + pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power Management. off Disable ASPM. @@ -2114,6 +2148,10 @@ Run specified binary instead of /init from the ramdisk, used for early userspace startup. See initrd. + reassign_resources [PCI,ACPI,XEN] + Use guestdev= parameter to reassign device's + resources. + reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode Format: [,[,...]] See arch/*/kernel/reboot.c or arch/*/kernel/process.c @@ -2574,6 +2612,10 @@ disables clocksource verification at runtime. Used to enable high-resolution timer mode on older hardware, and in virtualized environment. + [x86] noirqtime: Do not use TSC to do irq accounting. + Used to run time disable IRQ_TIME_ACCOUNTING on any + platforms where RDTSC is slow and this accounting + can add overhead. turbografx.map[2|3]= [HW,JOY] TurboGraFX parallel port interface @@ -2645,6 +2687,8 @@ to a common usb-storage quirk flag as follows: a = SANE_SENSE (collect more than 18 bytes of sense data); + b = BAD_SENSE (don't collect more than 18 + bytes of sense data); c = FIX_CAPACITY (decrease the reported device capacity by one sector); h = CAPACITY_HEURISTICS (decrease the @@ -2666,6 +2710,13 @@ medium is write-protected). Example: quirks=0419:aaf5:rl,0421:0433:rc + userpte= + [X86] Flags controlling user PTE allocations. + + nohigh = do not allocate PTE pages in + HIGHMEM regardless of setting + of CONFIG_HIGHPTE. + vdso= [X86,SH] vdso=2: enable compat VDSO (default with COMPAT_VDSO) vdso=1: enable VDSO (default) --- linux-ec2-2.6.32.orig/Documentation/stable_kernel_rules.txt +++ linux-ec2-2.6.32/Documentation/stable_kernel_rules.txt @@ -12,6 +12,12 @@ marked CONFIG_BROKEN), an oops, a hang, data corruption, a real security issue, or some "oh, that's not good" issue. In short, something critical. + - Serious issues as reported by a user of a distribution kernel may also + be considered if they fix a notable performance or interactivity issue. + As these fixes are not as obvious and have a higher risk of a subtle + regression they should only be submitted by a distribution kernel + maintainer and include an addendum linking to a bugzilla entry if it + exists and additional information on the user-visible impact. - New device IDs and quirks are also accepted. - No "theoretical race condition" issues, unless an explanation of how the race can be exploited is also provided. @@ -25,13 +31,13 @@ Procedure for submitting patches to the -stable tree: - Send the patch, after verifying that it follows the above rules, to - stable@kernel.org. + stable@vger.kernel.org. - The sender will receive an ACK when the patch has been accepted into the queue, or a NAK if the patch is rejected. This response might take a few days, according to the developer's schedules. - If accepted, the patch will be added to the -stable queue, for review by other developers and by the relevant subsystem maintainer. - - If the stable@kernel.org address is added to a patch, when it goes into + - If the stable@vger.kernel.org address is added to a patch, when it goes into Linus's tree it will automatically be emailed to the stable team. - Security patches should not be sent to this alias, but instead to the documented security@kernel.org address. --- linux-ec2-2.6.32.orig/Documentation/HOWTO +++ linux-ec2-2.6.32/Documentation/HOWTO @@ -275,8 +275,8 @@ If no 2.6.x.y kernel is available, then the highest numbered 2.6.x kernel is the current stable kernel. -2.6.x.y are maintained by the "stable" team , and are -released as needs dictate. The normal release period is approximately +2.6.x.y are maintained by the "stable" team , and +are released as needs dictate. The normal release period is approximately two weeks, but it can be longer if there are no pressing problems. A security-related problem, instead, can cause a release to happen almost instantly. --- linux-ec2-2.6.32.orig/Documentation/Makefile +++ linux-ec2-2.6.32/Documentation/Makefile @@ -1,3 +1,3 @@ obj-m := DocBook/ accounting/ auxdisplay/ connector/ \ filesystems/configfs/ ia64/ networking/ \ - pcmcia/ spi/ video4linux/ vm/ watchdog/src/ + pcmcia/ spi/ vm/ watchdog/src/ --- linux-ec2-2.6.32.orig/Documentation/kbuild/makefiles.txt +++ linux-ec2-2.6.32/Documentation/kbuild/makefiles.txt @@ -502,6 +502,18 @@ gcc >= 3.00. For gcc < 3.00, -malign-functions=4 is used. Note: cc-option-align uses KBUILD_CFLAGS for $(CC) options + cc-disable-warning + cc-disable-warning checks if gcc supports a given warning and returns + the commandline switch to disable it. This special function is needed, + because gcc 4.4 and later accept any unknown -Wno-* option and only + warn about it if there is another warning in the source file. + + Example: + KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) + + In the above example, -Wno-unused-but-set-variable will be added to + KBUILD_CFLAGS only if gcc really accepts it. + cc-version cc-version returns a numerical version of the $(CC) compiler version. The format is where both are two digits. So for example --- linux-ec2-2.6.32.orig/Documentation/kbuild/kconfig.txt +++ linux-ec2-2.6.32/Documentation/kbuild/kconfig.txt @@ -103,6 +103,11 @@ This environment variable can be set to specify the path & name of the "auto.conf" file. Its default value is "include/config/auto.conf". +KCONFIG_TRISTATE +-------------------------------------------------- +This environment variable can be set to specify the path & name of the +"tristate.conf" file. Its default value is "include/config/tristate.conf". + KCONFIG_AUTOHEADER -------------------------------------------------- This environment variable can be set to specify the path & name of the --- linux-ec2-2.6.32.orig/Documentation/kbuild/kbuild.txt +++ linux-ec2-2.6.32/Documentation/kbuild/kbuild.txt @@ -1,3 +1,17 @@ +Output files + +modules.order +-------------------------------------------------- +This file records the order in which modules appear in Makefiles. This +is used by modprobe to deterministically resolve aliases that match +multiple modules. + +modules.builtin +-------------------------------------------------- +This file lists all modules that are built into the kernel. This is used +by modprobe to not fail when trying to load something builtin. + + Environment variables KCPPFLAGS --- linux-ec2-2.6.32.orig/Documentation/hwmon/ltc4245 +++ linux-ec2-2.6.32/Documentation/hwmon/ltc4245 @@ -72,9 +72,7 @@ in7_min_alarm 3v output undervoltage alarm in8_min_alarm Vee (-12v) output undervoltage alarm -in9_input GPIO #1 voltage data -in10_input GPIO #2 voltage data -in11_input GPIO #3 voltage data +in9_input GPIO voltage data power1_input 12v power usage (mW) power2_input 5v power usage (mW) --- linux-ec2-2.6.32.orig/Documentation/kvm/api.txt +++ linux-ec2-2.6.32/Documentation/kvm/api.txt @@ -593,6 +593,42 @@ } chip; }; +4.27 KVM_GET_CLOCK + +Capability: KVM_CAP_ADJUST_CLOCK +Architectures: x86 +Type: vm ioctl +Parameters: struct kvm_clock_data (out) +Returns: 0 on success, -1 on error + +Gets the current timestamp of kvmclock as seen by the current guest. In +conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios +such as migration. + +struct kvm_clock_data { + __u64 clock; /* kvmclock current value */ + __u32 flags; + __u32 pad[9]; +}; + +4.28 KVM_SET_CLOCK + +Capability: KVM_CAP_ADJUST_CLOCK +Architectures: x86 +Type: vm ioctl +Parameters: struct kvm_clock_data (in) +Returns: 0 on success, -1 on error + +Sets the current timestamp of kvmclock to the valued specific in its parameter. +In conjunction with KVM_GET_CLOCK, it is used to ensure monotonicity on scenarios +such as migration. + +struct kvm_clock_data { + __u64 clock; /* kvmclock current value */ + __u32 flags; + __u32 pad[9]; +}; + 5. The kvm_run structure Application code obtains a pointer to the kvm_run structure by --- linux-ec2-2.6.32.orig/Documentation/networking/README.ipw2200 +++ linux-ec2-2.6.32/Documentation/networking/README.ipw2200 @@ -171,7 +171,7 @@ led Can be used to turn on experimental LED code. - 0 = Off, 1 = On. Default is 0. + 0 = Off, 1 = On. Default is 1. mode Can be used to set the default mode of the adapter. --- linux-ec2-2.6.32.orig/Documentation/networking/3c509.txt +++ linux-ec2-2.6.32/Documentation/networking/3c509.txt @@ -48,11 +48,11 @@ This configures the first found 3c509 card for IRQ 10, base I/O 0x310, and transceiver type 3 (10base2). The flag "0x3c509" must be set to avoid conflicts with other card types when overriding the I/O address. When the driver is -loaded as a module, only the IRQ and transceiver setting may be overridden. -For example, setting two cards to 10base2/IRQ10 and AUI/IRQ11 is done by using -the xcvr and irq module options: +loaded as a module, only the IRQ may be overridden. For example, +setting two cards to IRQ10 and IRQ11 is done by using the irq module +option: - options 3c509 xcvr=3,1 irq=10,11 + options 3c509 irq=10,11 (2) Full-duplex mode @@ -77,6 +77,8 @@ itself full-duplex capable. This is almost certainly one of two things: a full- duplex-capable Ethernet switch (*not* a hub), or a full-duplex-capable NIC on another system that's connected directly to the 3c509B via a crossover cable. + +Full-duplex mode can be enabled using 'ethtool'. /////Extremely important caution concerning full-duplex mode///// Understand that the 3c509B's hardware's full-duplex support is much more @@ -113,6 +115,8 @@ never automatically enable full-duplex mode in an existing installation; it must always be explicitly enabled via one of these code in order to be activated. + +The transceiver type can be changed using 'ethtool'. (4a) Interpretation of error messages and common problems --- linux-ec2-2.6.32.orig/Documentation/sound/alsa/HD-Audio-Models.txt +++ linux-ec2-2.6.32/Documentation/sound/alsa/HD-Audio-Models.txt @@ -401,4 +401,5 @@ Cirrus Logic CS4206/4207 ======================== mbp55 MacBook Pro 5,5 + imac27 IMac 27 Inch auto BIOS setup (default) --- linux-ec2-2.6.32.orig/Documentation/i2c/instantiating-devices +++ linux-ec2-2.6.32/Documentation/i2c/instantiating-devices @@ -100,7 +100,7 @@ (...) i2c_adap = i2c_get_adapter(2); memset(&i2c_info, 0, sizeof(struct i2c_board_info)); - strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); + strlcpy(i2c_info.type, "isp1301_pnx", I2C_NAME_SIZE); isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, normal_i2c); i2c_put_adapter(i2c_adap); --- linux-ec2-2.6.32.orig/Documentation/i2c/busses/i2c-i801 +++ linux-ec2-2.6.32/Documentation/i2c/busses/i2c-i801 @@ -15,7 +15,8 @@ * Intel 82801I (ICH9) * Intel EP80579 (Tolapai) * Intel 82801JI (ICH10) - * Intel PCH + * Intel 3400/5 Series (PCH) + * Intel Cougar Point (PCH) Datasheets: Publicly available at the Intel website Authors: --- linux-ec2-2.6.32.orig/Documentation/usb/usbmon.txt +++ linux-ec2-2.6.32/Documentation/usb/usbmon.txt @@ -43,10 +43,11 @@ 2. Find which bus connects to the desired device -Run "cat /proc/bus/usb/devices", and find the T-line which corresponds to -the device. Usually you do it by looking for the vendor string. If you have -many similar devices, unplug one and compare two /proc/bus/usb/devices outputs. -The T-line will have a bus number. Example: +Run "cat /sys/kernel/debug/usb/devices", and find the T-line which corresponds +to the device. Usually you do it by looking for the vendor string. If you have +many similar devices, unplug one and compare the two +/sys/kernel/debug/usb/devices outputs. The T-line will have a bus number. +Example: T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 @@ -54,7 +55,10 @@ S: Manufacturer=ATEN S: Product=UC100KM V2.00 -Bus=03 means it's bus 3. +"Bus=03" means it's bus 3. Alternatively, you can look at the output from +"lsusb" and get the bus number from the appropriate line. Example: + +Bus 003 Device 002: ID 0557:2004 ATEN UC100KM V2.00 3. Start 'cat' --- linux-ec2-2.6.32.orig/Documentation/usb/proc_usb_info.txt +++ linux-ec2-2.6.32/Documentation/usb/proc_usb_info.txt @@ -1,12 +1,17 @@ /proc/bus/usb filesystem output =============================== -(version 2003.05.30) +(version 2010.09.13) The usbfs filesystem for USB devices is traditionally mounted at /proc/bus/usb. It provides the /proc/bus/usb/devices file, as well as the /proc/bus/usb/BBB/DDD files. +In many modern systems the usbfs filsystem isn't used at all. Instead +USB device nodes are created under /dev/usb/ or someplace similar. The +"devices" file is available in debugfs, typically as +/sys/kernel/debug/usb/devices. + **NOTE**: If /proc/bus/usb appears empty, and a host controller driver has been linked, then you need to mount the @@ -106,8 +111,8 @@ Topology info: -T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=ddd MxCh=dd -| | | | | | | | |__MaxChildren +T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd +| | | | | | | | |__MaxChildren | | | | | | | |__Device Speed in Mbps | | | | | | |__DeviceNumber | | | | | |__Count of devices at this level @@ -120,8 +125,13 @@ Speed may be: 1.5 Mbit/s for low speed USB 12 Mbit/s for full speed USB - 480 Mbit/s for high speed USB (added for USB 2.0) - + 480 Mbit/s for high speed USB (added for USB 2.0); + also used for Wireless USB, which has no fixed speed + 5000 Mbit/s for SuperSpeed USB (added for USB 3.0) + + For reasons lost in the mists of time, the Port number is always + too low by 1. For example, a device plugged into port 4 will + show up with "Port=03". Bandwidth info: B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd @@ -291,7 +301,7 @@ an external hub connected to the root hub, and a mouse and a serial converter connected to the external hub. -T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 +T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 @@ -301,21 +311,21 @@ I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms -T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 +T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0451 ProdID=1446 Rev= 1.00 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms -T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 +T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=04b4 ProdID=0001 Rev= 0.00 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse E: Ad=81(I) Atr=03(Int.) MxPS= 3 Ivl= 10ms -T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 +T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0565 ProdID=0001 Rev= 1.08 S: Manufacturer=Peracom Networks, Inc. @@ -330,12 +340,12 @@ Selecting only the "T:" and "I:" lines from this (for example, by using "procusb ti"), we have: -T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 -T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 +T: Bus=00 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 +T: Bus=00 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 4 I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub -T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 +T: Bus=00 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=mouse -T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 +T: Bus=00 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=12 MxCh= 0 I: If#= 0 Alt= 0 #EPs= 3 Cls=00(>ifc ) Sub=00 Prot=00 Driver=serial --- linux-ec2-2.6.32.orig/Documentation/filesystems/tmpfs.txt +++ linux-ec2-2.6.32/Documentation/filesystems/tmpfs.txt @@ -82,11 +82,13 @@ all files in that instance (if CONFIG_NUMA is enabled) - which can be adjusted on the fly via 'mount -o remount ...' -mpol=default prefers to allocate memory from the local node +mpol=default use the process allocation policy + (see set_mempolicy(2)) mpol=prefer:Node prefers to allocate memory from the given Node mpol=bind:NodeList allocates memory only from nodes in NodeList mpol=interleave prefers to allocate from each node in turn mpol=interleave:NodeList allocates from each node of NodeList in turn +mpol=local prefers to allocate memory from the local node NodeList format is a comma-separated list of decimal numbers and ranges, a range being two hyphen-separated decimal numbers, the smallest and @@ -134,3 +136,5 @@ Christoph Rohland , 1.12.01 Updated: Hugh Dickins, 4 June 2007 +Updated: + KOSAKI Motohiro, 16 Mar 2010 --- linux-ec2-2.6.32.orig/Documentation/filesystems/ext4.txt +++ linux-ec2-2.6.32/Documentation/filesystems/ext4.txt @@ -153,8 +153,8 @@ identified through its new major/minor numbers encoded in devnum. -noload Don't load the journal on mounting. Note that - if the filesystem was not unmounted cleanly, +norecovery Don't load the journal on mounting. Note that +noload if the filesystem was not unmounted cleanly, skipping the journal replay will lead to the filesystem containing inconsistencies that can lead to any number of problems. @@ -196,7 +196,7 @@ also be used to enable or disable barriers, for consistency with other ext4 mount options. -inode_readahead=n This tuning parameter controls the maximum +inode_readahead_blks=n This tuning parameter controls the maximum number of inode table blocks that ext4's inode table readahead algorithm will pre-read into the buffer cache. The default value is 32 blocks. @@ -353,6 +353,12 @@ system crashes before the delayed allocation blocks are forced to disk. +discard Controls whether ext4 should issue discard/TRIM +nodiscard(*) commands to the underlying block device when + blocks are freed. This is useful for SSD devices + and sparse/thinly-provisioned LUNs, but it is off + by default until sufficient testing has been done. + Data Mode ========= There are 3 different data modes: --- linux-ec2-2.6.32.orig/Documentation/filesystems/proc.txt +++ linux-ec2-2.6.32/Documentation/filesystems/proc.txt @@ -176,7 +176,6 @@ CapBnd: ffffffffffffffff voluntary_ctxt_switches: 0 nonvoluntary_ctxt_switches: 1 - Stack usage: 12 kB This shows you nearly the same information you would get if you viewed it with the ps command. In fact, ps uses the proc file system to obtain its @@ -230,7 +229,6 @@ Mems_allowed_list Same as previous, but in "list format" voluntary_ctxt_switches number of voluntary context switches nonvoluntary_ctxt_switches number of non voluntary context switches - Stack usage: stack usage high water mark (round up to page size) .............................................................................. Table 1-3: Contents of the statm files (as of 2.6.8-rc3) @@ -309,7 +307,7 @@ 08049000-0804a000 rw-p 00001000 03:00 8312 /opt/test 0804a000-0806b000 rw-p 00000000 00:00 0 [heap] a7cb1000-a7cb2000 ---p 00000000 00:00 0 -a7cb2000-a7eb2000 rw-p 00000000 00:00 0 [threadstack:001ff4b4] +a7cb2000-a7eb2000 rw-p 00000000 00:00 0 a7eb2000-a7eb3000 ---p 00000000 00:00 0 a7eb3000-a7ed5000 rw-p 00000000 00:00 0 a7ed5000-a8008000 r-xp 00000000 03:00 4222 /lib/libc.so.6 @@ -345,7 +343,6 @@ [stack] = the stack of the main process [vdso] = the "virtual dynamic shared object", the kernel system call handler - [threadstack:xxxxxxxx] = the stack of the thread, xxxxxxxx is the stack size or if empty, the mapping is anonymous. --- linux-ec2-2.6.32.orig/Documentation/video4linux/gspca.txt +++ linux-ec2-2.6.32/Documentation/video4linux/gspca.txt @@ -37,6 +37,7 @@ ov519 041e:4060 Creative Live! VISTA VF0350 ov519 041e:4061 Creative Live! VISTA VF0400 ov519 041e:4064 Creative Live! VISTA VF0420 +ov519 041e:4067 Creative Live! Cam Video IM (VF0350) ov519 041e:4068 Creative Live! VISTA VF0470 spca561 0458:7004 Genius VideoCAM Express V2 sunplus 0458:7006 Genius Dsc 1.3 Smart --- linux-ec2-2.6.32.orig/Documentation/video4linux/CARDLIST.saa7134 +++ linux-ec2-2.6.32/Documentation/video4linux/CARDLIST.saa7134 @@ -172,3 +172,4 @@ 171 -> Beholder BeholdTV X7 [5ace:7595] 172 -> RoverMedia TV Link Pro FM [19d1:0138] 173 -> Zolid Hybrid TV Tuner PCI [1131:2004] +174 -> Asus Europa Hybrid OEM [1043:4847] --- linux-ec2-2.6.32.orig/Documentation/DocBook/Makefile +++ linux-ec2-2.6.32/Documentation/DocBook/Makefile @@ -32,28 +32,37 @@ ### # The targets that may be used. -PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs media +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) -xmldocs: $(BOOKS) +xmldocs: xmldoclinks $(BOOKS) sgmldocs: xmldocs PS := $(patsubst %.xml, %.ps, $(BOOKS)) -psdocs: $(PS) +psdocs: xmldoclinks $(PS) PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) -pdfdocs: $(PDF) +pdfdocs: xmldoclinks $(PDF) HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) -htmldocs: media $(HTML) +htmldocs: xmldoclinks $(HTML) $(call build_main_index) + $(call build_images) MAN := $(patsubst %.xml, %.9, $(BOOKS)) mandocs: $(MAN) -media: - mkdir -p $(srctree)/Documentation/DocBook/media/ - cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(srctree)/Documentation/DocBook/media/ +build_images = mkdir -p $(objtree)/Documentation/DocBook/media/ && \ + cp $(srctree)/Documentation/DocBook/dvb/*.png $(srctree)/Documentation/DocBook/v4l/*.gif $(objtree)/Documentation/DocBook/media/ + +xmldoclinks: +ifneq ($(objtree),$(srctree)) + for dep in dvb media-entities.tmpl media-indices.tmpl v4l; do \ + rm -f $(objtree)/Documentation/DocBook/$$dep \ + && ln -s $(srctree)/Documentation/DocBook/$$dep $(objtree)/Documentation/DocBook/ \ + || exit; \ + done +endif installmandocs: mandocs mkdir -p /usr/local/man/man9/ --- linux-ec2-2.6.32.orig/Documentation/development-process/5.Posting +++ linux-ec2-2.6.32/Documentation/development-process/5.Posting @@ -267,10 +267,10 @@ the linux-kernel list. - If you are fixing a bug, think about whether the fix should go into the - next stable update. If so, stable@kernel.org should get a copy of the - patch. Also add a "Cc: stable@kernel.org" to the tags within the patch - itself; that will cause the stable team to get a notification when your - fix goes into the mainline. + next stable update. If so, stable@vger.kernel.org should get a copy of + the patch. Also add a "Cc: stable@vger.kernel.org" to the tags within + the patch itself; that will cause the stable team to get a notification + when your fix goes into the mainline. When selecting recipients for a patch, it is good to have an idea of who you think will eventually accept the patch and get it merged. While it --- linux-ec2-2.6.32.orig/lib/swiotlb-xen.c +++ linux-ec2-2.6.32/lib/swiotlb-xen.c @@ -0,0 +1,750 @@ +/* + * Dynamic DMA mapping support. + * + * This implementation is a fallback for platforms that do not support + * I/O TLBs (aka DMA address translation hardware). + * Copyright (C) 2000 Asit Mallick + * Copyright (C) 2000 Goutham Rao + * Copyright (C) 2000, 2003 Hewlett-Packard Co + * David Mosberger-Tang + * Copyright (C) 2005 Keir Fraser + * 08/12/11 beckyb Add highmem support + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define OFFSET(val,align) ((unsigned long)((val) & ( (align) - 1))) + +int swiotlb; +int swiotlb_force; + +/* + * Used to do a quick range check in unmap_single and + * sync_single_*, to see if the memory was in fact allocated by this + * API. + */ +static char *io_tlb_start, *io_tlb_end; + +/* + * The number of IO TLB blocks (in groups of 64) betweeen io_tlb_start and + * io_tlb_end. This is command line adjustable via setup_io_tlb_npages. + */ +static unsigned long io_tlb_nslabs; + +/* + * When the IOMMU overflows we return a fallback buffer. This sets the size. + */ +static unsigned long io_tlb_overflow = 32*1024; + +void *io_tlb_overflow_buffer; + +/* + * This is a free list describing the number of free entries available from + * each index + */ +static unsigned int *io_tlb_list; +static unsigned int io_tlb_index; + +/* + * We need to save away the original address corresponding to a mapped entry + * for the sync operations. + */ +static phys_addr_t *io_tlb_orig_addr; + +/* + * Protect the above data structures in the map and unmap calls + */ +static DEFINE_SPINLOCK(io_tlb_lock); + +static unsigned int dma_bits; +static unsigned int __initdata max_dma_bits = 32; +static int __init +setup_dma_bits(char *str) +{ + max_dma_bits = simple_strtoul(str, NULL, 0); + return 0; +} +__setup("dma_bits=", setup_dma_bits); + +static int __init +setup_io_tlb_npages(char *str) +{ + /* Unlike ia64, the size is aperture in megabytes, not 'slabs'! */ + if (isdigit(*str)) { + io_tlb_nslabs = simple_strtoul(str, &str, 0) << + (20 - IO_TLB_SHIFT); + io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); + } + if (*str == ',') + ++str; + /* + * NB. 'force' enables the swiotlb, but doesn't force its use for + * every DMA like it does on native Linux. 'off' forcibly disables + * use of the swiotlb. + */ + if (!strcmp(str, "force")) + swiotlb_force = 1; + else if (!strcmp(str, "off")) + swiotlb_force = -1; + return 1; +} +__setup("swiotlb=", setup_io_tlb_npages); +/* make io_tlb_overflow tunable too? */ + +/* Note that this doesn't work with highmem page */ +static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev, + volatile void *address) +{ + return phys_to_dma(hwdev, virt_to_phys(address)); +} + +static void swiotlb_print_info(unsigned long bytes) +{ + printk(KERN_INFO "Software IO TLB enabled: \n" + " Aperture: %lu megabytes\n" + " Address size: %u bits\n" + " Kernel range: %p - %p\n", + bytes >> 20, dma_bits, + io_tlb_start, io_tlb_end); +} + +/* + * Statically reserve bounce buffer space and initialize bounce buffer data + * structures for the software IO TLB used to implement the PCI DMA API. + */ +void __init +swiotlb_init_with_default_size(size_t default_size) +{ + unsigned long i, bytes; + int rc; + + if (!io_tlb_nslabs) { + io_tlb_nslabs = (default_size >> IO_TLB_SHIFT); + io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); + } + + bytes = io_tlb_nslabs << IO_TLB_SHIFT; + + /* + * Get IO TLB memory from the low pages + */ + io_tlb_start = alloc_bootmem_pages(bytes); + if (!io_tlb_start) + panic("Cannot allocate SWIOTLB buffer!\n"); + dma_bits = get_order(IO_TLB_SEGSIZE << IO_TLB_SHIFT) + PAGE_SHIFT; + for (i = 0; i < io_tlb_nslabs; i += IO_TLB_SEGSIZE) { + do { + rc = xen_create_contiguous_region( + (unsigned long)io_tlb_start + (i << IO_TLB_SHIFT), + get_order(IO_TLB_SEGSIZE << IO_TLB_SHIFT), + dma_bits); + } while (rc && dma_bits++ < max_dma_bits); + if (rc) { + if (i == 0) + panic("No suitable physical memory available for SWIOTLB buffer!\n" + "Use dom0_mem Xen boot parameter to reserve\n" + "some DMA memory (e.g., dom0_mem=-128M).\n"); + io_tlb_nslabs = i; + i <<= IO_TLB_SHIFT; + free_bootmem(__pa(io_tlb_start + i), bytes - i); + bytes = i; + for (dma_bits = 0; i > 0; i -= IO_TLB_SEGSIZE << IO_TLB_SHIFT) { + unsigned int bits = fls64(virt_to_bus(io_tlb_start + i - 1)); + + if (bits > dma_bits) + dma_bits = bits; + } + break; + } + } + io_tlb_end = io_tlb_start + bytes; + + /* + * Allocate and initialize the free list array. This array is used + * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE. + */ + io_tlb_list = alloc_bootmem(io_tlb_nslabs * sizeof(int)); + for (i = 0; i < io_tlb_nslabs; i++) + io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE); + io_tlb_index = 0; + io_tlb_orig_addr = alloc_bootmem(io_tlb_nslabs * sizeof(phys_addr_t)); + + /* + * Get the overflow emergency buffer + */ + io_tlb_overflow_buffer = alloc_bootmem(io_tlb_overflow); + if (!io_tlb_overflow_buffer) + panic("Cannot allocate SWIOTLB overflow buffer!\n"); + + do { + rc = xen_create_contiguous_region( + (unsigned long)io_tlb_overflow_buffer, + get_order(io_tlb_overflow), + dma_bits); + } while (rc && dma_bits++ < max_dma_bits); + if (rc) + panic("No suitable physical memory available for SWIOTLB overflow buffer!\n"); + + swiotlb_print_info(bytes); +} + +void __init +swiotlb_init(void) +{ + unsigned long ram_end; + size_t defsz = 64 << 20; /* 64MB default size */ + + if (swiotlb_force == 1) { + swiotlb = 1; + } else if ((swiotlb_force != -1) && + is_running_on_xen() && + is_initial_xendomain()) { + /* Domain 0 always has a swiotlb. */ + ram_end = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL); + if (ram_end <= 0x1ffff) + defsz = 2 << 20; /* 2MB on <512MB systems. */ + else if (ram_end <= 0x3ffff) + defsz = 4 << 20; /* 4MB on <1GB systems. */ + else if (ram_end <= 0x7ffff) + defsz = 8 << 20; /* 8MB on <2GB systems. */ + swiotlb = 1; + } + + if (swiotlb) + swiotlb_init_with_default_size(defsz); + else + printk(KERN_INFO "Software IO TLB disabled\n"); +} + +static inline int range_needs_mapping(phys_addr_t pa, size_t size) +{ + return range_straddles_page_boundary(pa, size); +} + +static int is_swiotlb_buffer(phys_addr_t paddr) +{ + return paddr >= virt_to_phys(io_tlb_start) && + paddr < virt_to_phys(io_tlb_end); +} + +/* + * Bounce: copy the swiotlb buffer back to the original dma location + * + * We use __copy_to_user_inatomic to transfer to the host buffer because the + * buffer may be mapped read-only (e.g, in blkback driver) but lower-level + * drivers map the buffer for DMA_BIDIRECTIONAL access. This causes an + * unnecessary copy from the aperture to the host buffer, and a page fault. + */ +static void swiotlb_bounce(phys_addr_t phys, char *dma_addr, size_t size, + enum dma_data_direction dir) +{ + unsigned long pfn = PFN_DOWN(phys); + + if (PageHighMem(pfn_to_page(pfn))) { + /* The buffer does not have a mapping. Map it in and copy */ + unsigned int offset = phys & ~PAGE_MASK; + char *buffer; + unsigned int sz = 0; + unsigned long flags; + + while (size) { + sz = min_t(size_t, PAGE_SIZE - offset, size); + + local_irq_save(flags); + buffer = kmap_atomic(pfn_to_page(pfn), + KM_BOUNCE_READ); + if (dir == DMA_TO_DEVICE) + memcpy(dma_addr, buffer + offset, sz); + else if (__copy_to_user_inatomic(buffer + offset, + dma_addr, sz)) + /* inaccessible */; + kunmap_atomic(buffer, KM_BOUNCE_READ); + local_irq_restore(flags); + + size -= sz; + pfn++; + dma_addr += sz; + offset = 0; + } + } else { + if (dir == DMA_TO_DEVICE) + memcpy(dma_addr, phys_to_virt(phys), size); + else + memcpy(phys_to_virt(phys), dma_addr, size); + } +} + +/* + * Allocates bounce buffer and returns its kernel virtual address. + */ +static void * +map_single(struct device *hwdev, phys_addr_t phys, size_t size, int dir) +{ + unsigned long flags; + char *dma_addr; + unsigned int nslots, stride, index, wrap; + int i; + unsigned long mask; + unsigned long offset_slots; + unsigned long max_slots; + + mask = dma_get_seg_boundary(hwdev); + offset_slots = -IO_TLB_SEGSIZE; + + /* + * Carefully handle integer overflow which can occur when mask == ~0UL. + */ + max_slots = mask + 1 + ? ALIGN(mask + 1, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT + : 1UL << (BITS_PER_LONG - IO_TLB_SHIFT); + + /* + * For mappings greater than a page, we limit the stride (and + * hence alignment) to a page size. + */ + nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT; + if (size > PAGE_SIZE) + stride = (1 << (PAGE_SHIFT - IO_TLB_SHIFT)); + else + stride = 1; + + BUG_ON(!nslots); + + /* + * Find suitable number of IO TLB entries size that will fit this + * request and allocate a buffer from that IO TLB pool. + */ + spin_lock_irqsave(&io_tlb_lock, flags); + index = ALIGN(io_tlb_index, stride); + if (index >= io_tlb_nslabs) + index = 0; + wrap = index; + + do { + while (iommu_is_span_boundary(index, nslots, offset_slots, + max_slots)) { + index += stride; + if (index >= io_tlb_nslabs) + index = 0; + if (index == wrap) + goto not_found; + } + + /* + * If we find a slot that indicates we have 'nslots' number of + * contiguous buffers, we allocate the buffers from that slot + * and mark the entries as '0' indicating unavailable. + */ + if (io_tlb_list[index] >= nslots) { + int count = 0; + + for (i = index; i < (int) (index + nslots); i++) + io_tlb_list[i] = 0; + for (i = index - 1; (OFFSET(i, IO_TLB_SEGSIZE) != IO_TLB_SEGSIZE - 1) && io_tlb_list[i]; i--) + io_tlb_list[i] = ++count; + dma_addr = io_tlb_start + (index << IO_TLB_SHIFT); + + /* + * Update the indices to avoid searching in the next + * round. + */ + io_tlb_index = ((index + nslots) < io_tlb_nslabs + ? (index + nslots) : 0); + + goto found; + } + index += stride; + if (index >= io_tlb_nslabs) + index = 0; + } while (index != wrap); + +not_found: + spin_unlock_irqrestore(&io_tlb_lock, flags); + return NULL; +found: + spin_unlock_irqrestore(&io_tlb_lock, flags); + + /* + * Save away the mapping from the original address to the DMA address. + * This is needed when we sync the memory. Then we sync the buffer if + * needed. + */ + for (i = 0; i < nslots; i++) + io_tlb_orig_addr[index+i] = phys + (i << IO_TLB_SHIFT); + if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) + swiotlb_bounce(phys, dma_addr, size, DMA_TO_DEVICE); + + return dma_addr; +} + +/* + * dma_addr is the kernel virtual address of the bounce buffer to unmap. + */ +static void +do_unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir) +{ + unsigned long flags; + int i, count, nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT; + int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT; + phys_addr_t phys = io_tlb_orig_addr[index]; + + /* + * First, sync the memory before unmapping the entry + */ + if (phys && ((dir == DMA_FROM_DEVICE) || (dir == DMA_BIDIRECTIONAL))) + swiotlb_bounce(phys, dma_addr, size, DMA_FROM_DEVICE); + + /* + * Return the buffer to the free list by setting the corresponding + * entries to indicate the number of contigous entries available. + * While returning the entries to the free list, we merge the entries + * with slots below and above the pool being returned. + */ + spin_lock_irqsave(&io_tlb_lock, flags); + { + count = ((index + nslots) < ALIGN(index + 1, IO_TLB_SEGSIZE) ? + io_tlb_list[index + nslots] : 0); + /* + * Step 1: return the slots to the free list, merging the + * slots with superceeding slots + */ + for (i = index + nslots - 1; i >= index; i--) + io_tlb_list[i] = ++count; + /* + * Step 2: merge the returned slots with the preceding slots, + * if available (non zero) + */ + for (i = index - 1; + (OFFSET(i, IO_TLB_SEGSIZE) != + IO_TLB_SEGSIZE -1) && io_tlb_list[i]; + i--) + io_tlb_list[i] = ++count; + } + spin_unlock_irqrestore(&io_tlb_lock, flags); +} + +static void +sync_single(struct device *hwdev, char *dma_addr, size_t size, int dir) +{ + int index = (dma_addr - io_tlb_start) >> IO_TLB_SHIFT; + phys_addr_t phys = io_tlb_orig_addr[index]; + + phys += ((unsigned long)dma_addr & ((1 << IO_TLB_SHIFT) - 1)); + + BUG_ON((dir != DMA_FROM_DEVICE) && (dir != DMA_TO_DEVICE)); + swiotlb_bounce(phys, dma_addr, size, dir); +} + +static void +swiotlb_full(struct device *dev, size_t size, int dir, int do_panic) +{ + /* + * Ran out of IOMMU space for this operation. This is very bad. + * Unfortunately the drivers cannot handle this operation properly. + * unless they check for pci_dma_mapping_error (most don't) + * When the mapping is small enough return a static buffer to limit + * the damage, or panic when the transfer is too big. + */ + printk(KERN_ERR "PCI-DMA: Out of SW-IOMMU space for %zu bytes at " + "device %s\n", size, dev ? dev_name(dev) : "?"); + + if (size <= io_tlb_overflow || !do_panic) + return; + + if (dir == DMA_BIDIRECTIONAL) + panic("DMA: Random memory could be DMA accessed\n"); + if (dir == DMA_FROM_DEVICE) + panic("DMA: Random memory could be DMA written\n"); + if (dir == DMA_TO_DEVICE) + panic("DMA: Random memory could be DMA read\n"); +} + +/* + * Map a single buffer of the indicated size for DMA in streaming mode. The + * PCI address to use is returned. + * + * Once the device is given the dma address, the device owns this memory until + * either swiotlb_unmap_page or swiotlb_dma_sync_single is performed. + */ +dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, + unsigned long offset, size_t size, + enum dma_data_direction dir, + struct dma_attrs *attrs) +{ + phys_addr_t phys = page_to_pseudophys(page) + offset; + dma_addr_t dev_addr = gnttab_dma_map_page(page) + offset; + void *map; + + BUG_ON(dir == DMA_NONE); + + /* + * If the address happens to be in the device's DMA window, + * we can safely return the device addr and not worry about bounce + * buffering it. + */ + if (dma_capable(dev, dev_addr, size)/* && !swiotlb_force*/) + return dev_addr; + + /* + * Oh well, have to allocate and map a bounce buffer. + */ + gnttab_dma_unmap_page(dev_addr); + map = map_single(dev, phys, size, dir); + if (!map) { + swiotlb_full(dev, size, dir, 1); + map = io_tlb_overflow_buffer; + } + + dev_addr = swiotlb_virt_to_bus(dev, map); + return dev_addr; +} +EXPORT_SYMBOL_GPL(swiotlb_map_page); + +/* + * Unmap a single streaming mode DMA translation. The dma_addr and size must + * match what was provided for in a previous swiotlb_map_page call. All + * other usages are undefined. + * + * After this call, reads by the cpu to the buffer are guaranteed to see + * whatever the device wrote there. + */ +static void unmap_single(struct device *hwdev, dma_addr_t dev_addr, + size_t size, int dir) +{ + phys_addr_t paddr = dma_to_phys(hwdev, dev_addr); + + BUG_ON(dir == DMA_NONE); + + if (is_swiotlb_buffer(paddr)) { + do_unmap_single(hwdev, phys_to_virt(paddr), size, dir); + return; + } + + gnttab_dma_unmap_page(dev_addr); +} + +void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr, + size_t size, enum dma_data_direction dir, + struct dma_attrs *attrs) +{ + unmap_single(hwdev, dev_addr, size, dir); +} +EXPORT_SYMBOL_GPL(swiotlb_unmap_page); + +/* + * Make physical memory consistent for a single streaming mode DMA translation + * after a transfer. + * + * If you perform a swiotlb_map_page() but wish to interrogate the buffer + * using the cpu, yet do not wish to teardown the PCI dma mapping, you must + * call this function before doing so. At the next point you give the PCI dma + * address back to the card, you must first perform a + * swiotlb_dma_sync_for_device, and then the device again owns the buffer + */ +void +swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr, + size_t size, enum dma_data_direction dir) +{ + phys_addr_t paddr = dma_to_phys(hwdev, dev_addr); + + BUG_ON(dir == DMA_NONE); + + if (is_swiotlb_buffer(paddr)) + sync_single(hwdev, phys_to_virt(paddr), size, dir); +} +EXPORT_SYMBOL(swiotlb_sync_single_for_cpu); + +void +swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr, + size_t size, enum dma_data_direction dir) +{ + phys_addr_t paddr = dma_to_phys(hwdev, dev_addr); + + BUG_ON(dir == DMA_NONE); + + if (is_swiotlb_buffer(paddr)) + sync_single(hwdev, phys_to_virt(paddr), size, dir); +} +EXPORT_SYMBOL(swiotlb_sync_single_for_device); + +void +swiotlb_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dev_addr, + unsigned long offset, size_t size, + enum dma_data_direction dir) +{ + swiotlb_sync_single_for_cpu(hwdev, dev_addr + offset, size, dir); +} +EXPORT_SYMBOL_GPL(swiotlb_sync_single_range_for_cpu); + +void +swiotlb_sync_single_range_for_device(struct device *hwdev, dma_addr_t dev_addr, + unsigned long offset, size_t size, + enum dma_data_direction dir) +{ + swiotlb_sync_single_for_device(hwdev, dev_addr + offset, size, dir); +} +EXPORT_SYMBOL_GPL(swiotlb_sync_single_range_for_device); + +/* + * Map a set of buffers described by scatterlist in streaming mode for DMA. + * This is the scatter-gather version of the above swiotlb_map_page + * interface. Here the scatter gather list elements are each tagged with the + * appropriate dma address and length. They are obtained via + * sg_dma_{address,length}(SG). + * + * NOTE: An implementation may be able to use a smaller number of + * DMA address/length pairs than there are SG table elements. + * (for example via virtual mapping capabilities) + * The routine returns the number of addr/length pairs actually + * used, at most nents. + * + * Device ownership issues as mentioned above for swiotlb_map_page are the + * same here. + */ +int +swiotlb_map_sg_attrs(struct device *hwdev, struct scatterlist *sgl, int nelems, + enum dma_data_direction dir, struct dma_attrs *attrs) +{ + struct scatterlist *sg; + int i; + + BUG_ON(dir == DMA_NONE); + + for_each_sg(sgl, sg, nelems, i) { + dma_addr_t dev_addr = gnttab_dma_map_page(sg_page(sg)) + + sg->offset; + phys_addr_t paddr = page_to_pseudophys(sg_page(sg)) + + sg->offset; + + if (range_needs_mapping(paddr, sg->length) || + !dma_capable(hwdev, dev_addr, sg->length)) { + void *map; + + gnttab_dma_unmap_page(dev_addr); + map = map_single(hwdev, paddr, + sg->length, dir); + if (!map) { + /* Don't panic here, we expect map_sg users + to do proper error handling. */ + swiotlb_full(hwdev, sg->length, dir, 0); + swiotlb_unmap_sg_attrs(hwdev, sgl, i, dir, + attrs); + sgl[0].dma_length = 0; + return 0; + } + sg->dma_address = swiotlb_virt_to_bus(hwdev, map); + } else + sg->dma_address = dev_addr; + sg->dma_length = sg->length; + } + return nelems; +} +EXPORT_SYMBOL(swiotlb_map_sg_attrs); + +int +swiotlb_map_sg(struct device *hwdev, struct scatterlist *sgl, int nelems, + int dir) +{ + return swiotlb_map_sg_attrs(hwdev, sgl, nelems, dir, NULL); +} +EXPORT_SYMBOL(swiotlb_map_sg); + +/* + * Unmap a set of streaming mode DMA translations. Again, cpu read rules + * concerning calls here are the same as for swiotlb_unmap_page() above. + */ +void +swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl, + int nelems, enum dma_data_direction dir, struct dma_attrs *attrs) +{ + struct scatterlist *sg; + int i; + + BUG_ON(dir == DMA_NONE); + + for_each_sg(sgl, sg, nelems, i) + unmap_single(hwdev, sg->dma_address, sg->dma_length, dir); + +} +EXPORT_SYMBOL(swiotlb_unmap_sg_attrs); + +void +swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sgl, int nelems, + int dir) +{ + return swiotlb_unmap_sg_attrs(hwdev, sgl, nelems, dir, NULL); +} +EXPORT_SYMBOL(swiotlb_unmap_sg); + +/* + * Make physical memory consistent for a set of streaming mode DMA translations + * after a transfer. + * + * The same as swiotlb_sync_single_* but for a scatter-gather list, same rules + * and usage. + */ +void +swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sgl, + int nelems, enum dma_data_direction dir) +{ + struct scatterlist *sg; + int i; + + for_each_sg(sgl, sg, nelems, i) + swiotlb_sync_single_for_cpu(hwdev, sg->dma_address, + sg->dma_length, dir); +} +EXPORT_SYMBOL(swiotlb_sync_sg_for_cpu); + +void +swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sgl, + int nelems, enum dma_data_direction dir) +{ + struct scatterlist *sg; + int i; + + for_each_sg(sgl, sg, nelems, i) + swiotlb_sync_single_for_device(hwdev, sg->dma_address, + sg->dma_length, dir); +} +EXPORT_SYMBOL(swiotlb_sync_sg_for_device); + +int +swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr) +{ + return (dma_addr == swiotlb_virt_to_bus(hwdev, io_tlb_overflow_buffer)); +} +EXPORT_SYMBOL(swiotlb_dma_mapping_error); + +/* + * Return whether the given PCI device DMA address mask can be supported + * properly. For example, if your device can only drive the low 24-bits + * during PCI bus mastering, then you would pass 0x00ffffff as the mask to + * this function. + */ +int +swiotlb_dma_supported (struct device *hwdev, u64 mask) +{ + return (mask >= ((1UL << dma_bits) - 1)); +} +EXPORT_SYMBOL(swiotlb_dma_supported); --- linux-ec2-2.6.32.orig/lib/nlattr.c +++ linux-ec2-2.6.32/lib/nlattr.c @@ -20,6 +20,7 @@ [NLA_U16] = sizeof(u16), [NLA_U32] = sizeof(u32), [NLA_U64] = sizeof(u64), + [NLA_MSECS] = sizeof(u64), [NLA_NESTED] = NLA_HDRLEN, }; @@ -298,9 +299,15 @@ */ int nla_strcmp(const struct nlattr *nla, const char *str) { - int len = strlen(str) + 1; - int d = nla_len(nla) - len; + int len = strlen(str); + char *buf = nla_data(nla); + int attrlen = nla_len(nla); + int d; + if (attrlen > 0 && buf[attrlen - 1] == '\0') + attrlen--; + + d = attrlen - len; if (d == 0) d = memcmp(nla_data(nla), str, len); --- linux-ec2-2.6.32.orig/lib/flex_array.c +++ linux-ec2-2.6.32/lib/flex_array.c @@ -99,7 +99,7 @@ ret->element_size = element_size; ret->total_nr_elements = total; if (elements_fit_in_base(ret) && !(flags & __GFP_ZERO)) - memset(ret->parts[0], FLEX_ARRAY_FREE, + memset(&ret->parts[0], FLEX_ARRAY_FREE, FLEX_ARRAY_BASE_BYTES_LEFT); return ret; } --- linux-ec2-2.6.32.orig/lib/list_sort.c +++ linux-ec2-2.6.32/lib/list_sort.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include + +/** + * list_sort - sort a list. + * @priv: private data, passed to @cmp + * @head: the list to sort + * @cmp: the elements comparison function + * + * This function has been implemented by Mark J Roberts . It + * implements "merge sort" which has O(nlog(n)) complexity. The list is sorted + * in ascending order. + * + * The comparison function @cmp is supposed to return a negative value if @a is + * less than @b, and a positive value if @a is greater than @b. If @a and @b + * are equivalent, then it does not matter what this function returns. + */ +void list_sort(void *priv, struct list_head *head, + int (*cmp)(void *priv, struct list_head *a, + struct list_head *b)) +{ + struct list_head *p, *q, *e, *list, *tail, *oldhead; + int insize, nmerges, psize, qsize, i; + + if (list_empty(head)) + return; + + list = head->next; + list_del(head); + insize = 1; + for (;;) { + p = oldhead = list; + list = tail = NULL; + nmerges = 0; + + while (p) { + nmerges++; + q = p; + psize = 0; + for (i = 0; i < insize; i++) { + psize++; + q = q->next == oldhead ? NULL : q->next; + if (!q) + break; + } + + qsize = insize; + while (psize > 0 || (qsize > 0 && q)) { + if (!psize) { + e = q; + q = q->next; + qsize--; + if (q == oldhead) + q = NULL; + } else if (!qsize || !q) { + e = p; + p = p->next; + psize--; + if (p == oldhead) + p = NULL; + } else if (cmp(priv, p, q) <= 0) { + e = p; + p = p->next; + psize--; + if (p == oldhead) + p = NULL; + } else { + e = q; + q = q->next; + qsize--; + if (q == oldhead) + q = NULL; + } + if (tail) + tail->next = e; + else + list = e; + e->prev = tail; + tail = e; + } + p = q; + } + + tail->next = list; + list->prev = tail; + + if (nmerges <= 1) + break; + + insize *= 2; + } + + head->next = list; + head->prev = list->prev; + list->prev->next = head; + list->prev = head; +} + +EXPORT_SYMBOL(list_sort); --- linux-ec2-2.6.32.orig/lib/dma-debug.c +++ linux-ec2-2.6.32/lib/dma-debug.c @@ -670,12 +670,13 @@ return count; } -static int dma_debug_device_change(struct notifier_block *nb, - unsigned long action, void *data) +static int dma_debug_device_change(struct notifier_block *nb, unsigned long action, void *data) { struct device *dev = data; int count; + if (global_disable) + return 0; switch (action) { case BUS_NOTIFY_UNBOUND_DRIVER: @@ -697,6 +698,9 @@ { struct notifier_block *nb; + if (global_disable) + return; + nb = kzalloc(sizeof(struct notifier_block), GFP_KERNEL); if (nb == NULL) { pr_err("dma_debug_add_bus: out of memory\n"); @@ -909,6 +913,9 @@ ref->size); } + if (entry->direction == DMA_BIDIRECTIONAL) + goto out; + if (ref->direction != entry->direction) { err_printk(dev, entry, "DMA-API: device driver syncs " "DMA memory with different direction " @@ -919,9 +926,6 @@ dir2name[ref->direction]); } - if (entry->direction == DMA_BIDIRECTIONAL) - goto out; - if (to_cpu && !(entry->direction == DMA_FROM_DEVICE) && !(ref->direction == DMA_TO_DEVICE)) err_printk(dev, entry, "DMA-API: device driver syncs " @@ -944,7 +948,6 @@ out: put_hash_bucket(bucket, &flags); - } void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, --- linux-ec2-2.6.32.orig/lib/random32.c +++ linux-ec2-2.6.32/lib/random32.c @@ -96,7 +96,7 @@ */ for_each_possible_cpu (i) { struct rnd_state *state = &per_cpu(net_rand_state, i); - state->s1 = __seed(state->s1 ^ entropy, 1); + state->s1 = __seed(state->s1 ^ entropy, 2); } } EXPORT_SYMBOL(srandom32); @@ -113,9 +113,9 @@ struct rnd_state *state = &per_cpu(net_rand_state,i); #define LCG(x) ((x) * 69069) /* super-duper LCG */ - state->s1 = __seed(LCG(i + jiffies), 1); - state->s2 = __seed(LCG(state->s1), 7); - state->s3 = __seed(LCG(state->s2), 15); + state->s1 = __seed(LCG(i + jiffies), 2); + state->s2 = __seed(LCG(state->s1), 8); + state->s3 = __seed(LCG(state->s2), 16); /* "warm it up" */ __random32(state); @@ -142,9 +142,9 @@ u32 seeds[3]; get_random_bytes(&seeds, sizeof(seeds)); - state->s1 = __seed(seeds[0], 1); - state->s2 = __seed(seeds[1], 7); - state->s3 = __seed(seeds[2], 15); + state->s1 = __seed(seeds[0], 2); + state->s2 = __seed(seeds[1], 8); + state->s3 = __seed(seeds[2], 16); /* mix it in */ __random32(state); --- linux-ec2-2.6.32.orig/lib/md5.c +++ linux-ec2-2.6.32/lib/md5.c @@ -0,0 +1,95 @@ +#include +#include +#include + +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1(z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) + +#define MD5STEP(f, w, x, y, z, in, s) \ + (w += f(x, y, z) + in, w = (w<>(32-s)) + x) + +void md5_transform(__u32 *hash, __u32 const *in) +{ + u32 a, b, c, d; + + a = hash[0]; + b = hash[1]; + c = hash[2]; + d = hash[3]; + + MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); + MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); + MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); + MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); + MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); + MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); + MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); + MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); + + MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); + MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); + MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); + MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); + MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); + MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); + MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); + MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + + hash[0] += a; + hash[1] += b; + hash[2] += c; + hash[3] += d; +} +EXPORT_SYMBOL(md5_transform); --- linux-ec2-2.6.32.orig/lib/rational.c +++ linux-ec2-2.6.32/lib/rational.c @@ -7,6 +7,7 @@ */ #include +#include /* * calculate best rational approximation for a given fraction --- linux-ec2-2.6.32.orig/lib/percpu_counter.c +++ linux-ec2-2.6.32/lib/percpu_counter.c @@ -76,6 +76,7 @@ if (!fbc->counters) return -ENOMEM; #ifdef CONFIG_HOTPLUG_CPU + INIT_LIST_HEAD(&fbc->list); mutex_lock(&percpu_counters_lock); list_add(&fbc->list, &percpu_counters); mutex_unlock(&percpu_counters_lock); --- linux-ec2-2.6.32.orig/lib/kobject_uevent.c +++ linux-ec2-2.6.32/lib/kobject_uevent.c @@ -235,7 +235,7 @@ retval = netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL); /* ENOBUFS should be handled in userspace */ - if (retval == -ENOBUFS) + if (retval == -ENOBUFS || retval == -ESRCH) retval = 0; } else retval = -ENOMEM; --- linux-ec2-2.6.32.orig/lib/lcm.c +++ linux-ec2-2.6.32/lib/lcm.c @@ -0,0 +1,15 @@ +#include +#include +#include + +/* Lowest common multiple */ +unsigned long lcm(unsigned long a, unsigned long b) +{ + if (a && b) + return (a * b) / gcd(a, b); + else if (b) + return b; + + return a; +} +EXPORT_SYMBOL_GPL(lcm); --- linux-ec2-2.6.32.orig/lib/Makefile +++ linux-ec2-2.6.32/lib/Makefile @@ -10,7 +10,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \ rbtree.o radix-tree.o dump_stack.o \ idr.o int_sqrt.o extable.o prio_tree.o \ - sha1.o irq_regs.o reciprocal_div.o argv_split.o \ + sha1.o md5.o irq_regs.o reciprocal_div.o argv_split.o \ proportions.o prio_heap.o ratelimit.o show_mem.o \ is_single_threaded.o plist.o decompress.o flex_array.o @@ -21,7 +21,7 @@ obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o \ - string_helpers.o gcd.o + string_helpers.o gcd.o list_sort.o lcm.o ifeq ($(CONFIG_DEBUG_KOBJECT),y) CFLAGS_kobject.o += -DDEBUG --- linux-ec2-2.6.32.orig/lib/idr.c +++ linux-ec2-2.6.32/lib/idr.c @@ -156,10 +156,12 @@ id = (id | ((1 << (IDR_BITS * l)) - 1)) + 1; /* if already at the top layer, we need to grow */ - if (!(p = pa[l])) { + if (id >= 1 << (idp->layers * IDR_BITS)) { *starting_id = id; return IDR_NEED_TO_GROW; } + p = pa[l]; + BUG_ON(!p); /* If we need to go up one layer, continue the * loop; otherwise, restart from the top. --- linux-ec2-2.6.32.orig/lib/genalloc.c +++ linux-ec2-2.6.32/lib/genalloc.c @@ -52,7 +52,7 @@ struct gen_pool_chunk *chunk; int nbits = size >> pool->min_alloc_order; int nbytes = sizeof(struct gen_pool_chunk) + - (nbits + BITS_PER_BYTE - 1) / BITS_PER_BYTE; + BITS_TO_LONGS(nbits) * sizeof(long); chunk = kmalloc_node(nbytes, GFP_KERNEL | __GFP_ZERO, nid); if (unlikely(chunk == NULL)) --- linux-ec2-2.6.32.orig/lib/locking-selftest.c +++ linux-ec2-2.6.32/lib/locking-selftest.c @@ -144,7 +144,7 @@ #define HARDIRQ_ENTER() \ local_irq_disable(); \ - irq_enter(); \ + __irq_enter(); \ WARN_ON(!in_irq()); #define HARDIRQ_EXIT() \ --- linux-ec2-2.6.32.orig/lib/debugobjects.c +++ linux-ec2-2.6.32/lib/debugobjects.c @@ -196,7 +196,7 @@ * initialized: */ if (obj_pool_free > ODEBUG_POOL_SIZE && obj_cache) - sched = !work_pending(&debug_obj_work); + sched = keventd_up() && !work_pending(&debug_obj_work); hlist_add_head(&obj->node, &obj_pool); obj_pool_free++; obj_pool_used--; --- linux-ec2-2.6.32.orig/lib/lzo/lzo1x_compress.c +++ linux-ec2-2.6.32/lib/lzo/lzo1x_compress.c @@ -1,194 +1,243 @@ /* - * LZO1X Compressor from MiniLZO + * LZO1X Compressor from LZO * - * Copyright (C) 1996-2005 Markus F.X.J. Oberhumer + * Copyright (C) 1996-2012 Markus F.X.J. Oberhumer * * The full LZO package can be found at: * http://www.oberhumer.com/opensource/lzo/ * - * Changed for kernel use by: + * Changed for Linux kernel use by: * Nitin Gupta * Richard Purdie */ #include #include -#include #include +#include #include "lzodefs.h" static noinline size_t -_lzo1x_1_do_compress(const unsigned char *in, size_t in_len, - unsigned char *out, size_t *out_len, void *wrkmem) +lzo1x_1_do_compress(const unsigned char *in, size_t in_len, + unsigned char *out, size_t *out_len, + size_t ti, void *wrkmem) { + const unsigned char *ip; + unsigned char *op; const unsigned char * const in_end = in + in_len; - const unsigned char * const ip_end = in + in_len - M2_MAX_LEN - 5; - const unsigned char ** const dict = wrkmem; - const unsigned char *ip = in, *ii = ip; - const unsigned char *end, *m, *m_pos; - size_t m_off, m_len, dindex; - unsigned char *op = out; + const unsigned char * const ip_end = in + in_len - 20; + const unsigned char *ii; + lzo_dict_t * const dict = (lzo_dict_t *) wrkmem; - ip += 4; + op = out; + ip = in; + ii = ip; + ip += ti < 4 ? 4 - ti : 0; for (;;) { - dindex = ((size_t)(0x21 * DX3(ip, 5, 5, 6)) >> 5) & D_MASK; - m_pos = dict[dindex]; - - if (m_pos < in) - goto literal; - - if (ip == m_pos || ((size_t)(ip - m_pos) > M4_MAX_OFFSET)) - goto literal; - - m_off = ip - m_pos; - if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) - goto try_match; - - dindex = (dindex & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f); - m_pos = dict[dindex]; - - if (m_pos < in) - goto literal; - - if (ip == m_pos || ((size_t)(ip - m_pos) > M4_MAX_OFFSET)) - goto literal; - - m_off = ip - m_pos; - if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) - goto try_match; - - goto literal; - -try_match: - if (get_unaligned((const unsigned short *)m_pos) - == get_unaligned((const unsigned short *)ip)) { - if (likely(m_pos[2] == ip[2])) - goto match; - } - + const unsigned char *m_pos; + size_t t, m_len, m_off; + u32 dv; literal: - dict[dindex] = ip; - ++ip; + ip += 1 + ((ip - ii) >> 5); +next: if (unlikely(ip >= ip_end)) break; - continue; - -match: - dict[dindex] = ip; - if (ip != ii) { - size_t t = ip - ii; + dv = get_unaligned_le32(ip); + t = ((dv * 0x1824429d) >> (32 - D_BITS)) & D_MASK; + m_pos = in + dict[t]; + dict[t] = (lzo_dict_t) (ip - in); + if (unlikely(dv != get_unaligned_le32(m_pos))) + goto literal; + ii -= ti; + ti = 0; + t = ip - ii; + if (t != 0) { if (t <= 3) { op[-2] |= t; - } else if (t <= 18) { + COPY4(op, ii); + op += t; + } else if (t <= 16) { *op++ = (t - 3); + COPY8(op, ii); + COPY8(op + 8, ii + 8); + op += t; } else { - size_t tt = t - 18; - - *op++ = 0; - while (tt > 255) { - tt -= 255; + if (t <= 18) { + *op++ = (t - 3); + } else { + size_t tt = t - 18; *op++ = 0; + while (unlikely(tt > 255)) { + tt -= 255; + *op++ = 0; + } + *op++ = tt; } - *op++ = tt; + do { + COPY8(op, ii); + COPY8(op + 8, ii + 8); + op += 16; + ii += 16; + t -= 16; + } while (t >= 16); + if (t > 0) do { + *op++ = *ii++; + } while (--t > 0); } + } + + m_len = 4; + { +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && defined(LZO_USE_CTZ64) + u64 v; + v = get_unaligned((const u64 *) (ip + m_len)) ^ + get_unaligned((const u64 *) (m_pos + m_len)); + if (unlikely(v == 0)) { + do { + m_len += 8; + v = get_unaligned((const u64 *) (ip + m_len)) ^ + get_unaligned((const u64 *) (m_pos + m_len)); + if (unlikely(ip + m_len >= ip_end)) + goto m_len_done; + } while (v == 0); + } +# if defined(__LITTLE_ENDIAN) + m_len += (unsigned) __builtin_ctzll(v) / 8; +# elif defined(__BIG_ENDIAN) + m_len += (unsigned) __builtin_clzll(v) / 8; +# else +# error "missing endian definition" +# endif +#elif defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && defined(LZO_USE_CTZ32) + u32 v; + v = get_unaligned((const u32 *) (ip + m_len)) ^ + get_unaligned((const u32 *) (m_pos + m_len)); + if (unlikely(v == 0)) { do { - *op++ = *ii++; - } while (--t > 0); + m_len += 4; + v = get_unaligned((const u32 *) (ip + m_len)) ^ + get_unaligned((const u32 *) (m_pos + m_len)); + if (v != 0) + break; + m_len += 4; + v = get_unaligned((const u32 *) (ip + m_len)) ^ + get_unaligned((const u32 *) (m_pos + m_len)); + if (unlikely(ip + m_len >= ip_end)) + goto m_len_done; + } while (v == 0); } +# if defined(__LITTLE_ENDIAN) + m_len += (unsigned) __builtin_ctz(v) / 8; +# elif defined(__BIG_ENDIAN) + m_len += (unsigned) __builtin_clz(v) / 8; +# else +# error "missing endian definition" +# endif +#else + if (unlikely(ip[m_len] == m_pos[m_len])) { + do { + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (unlikely(ip + m_len >= ip_end)) + goto m_len_done; + } while (ip[m_len] == m_pos[m_len]); + } +#endif + } +m_len_done: - ip += 3; - if (m_pos[3] != *ip++ || m_pos[4] != *ip++ - || m_pos[5] != *ip++ || m_pos[6] != *ip++ - || m_pos[7] != *ip++ || m_pos[8] != *ip++) { - --ip; - m_len = ip - ii; - - if (m_off <= M2_MAX_OFFSET) { - m_off -= 1; - *op++ = (((m_len - 1) << 5) - | ((m_off & 7) << 2)); - *op++ = (m_off >> 3); - } else if (m_off <= M3_MAX_OFFSET) { - m_off -= 1; + m_off = ip - m_pos; + ip += m_len; + ii = ip; + if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) { + m_off -= 1; + *op++ = (((m_len - 1) << 5) | ((m_off & 7) << 2)); + *op++ = (m_off >> 3); + } else if (m_off <= M3_MAX_OFFSET) { + m_off -= 1; + if (m_len <= M3_MAX_LEN) *op++ = (M3_MARKER | (m_len - 2)); - goto m3_m4_offset; - } else { - m_off -= 0x4000; - - *op++ = (M4_MARKER | ((m_off & 0x4000) >> 11) - | (m_len - 2)); - goto m3_m4_offset; + else { + m_len -= M3_MAX_LEN; + *op++ = M3_MARKER | 0; + while (unlikely(m_len > 255)) { + m_len -= 255; + *op++ = 0; + } + *op++ = (m_len); } + *op++ = (m_off << 2); + *op++ = (m_off >> 6); } else { - end = in_end; - m = m_pos + M2_MAX_LEN + 1; - - while (ip < end && *m == *ip) { - m++; - ip++; - } - m_len = ip - ii; - - if (m_off <= M3_MAX_OFFSET) { - m_off -= 1; - if (m_len <= 33) { - *op++ = (M3_MARKER | (m_len - 2)); - } else { - m_len -= 33; - *op++ = M3_MARKER | 0; - goto m3_m4_len; - } - } else { - m_off -= 0x4000; - if (m_len <= M4_MAX_LEN) { - *op++ = (M4_MARKER - | ((m_off & 0x4000) >> 11) + m_off -= 0x4000; + if (m_len <= M4_MAX_LEN) + *op++ = (M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2)); - } else { - m_len -= M4_MAX_LEN; - *op++ = (M4_MARKER - | ((m_off & 0x4000) >> 11)); -m3_m4_len: - while (m_len > 255) { - m_len -= 255; - *op++ = 0; - } - - *op++ = (m_len); + else { + m_len -= M4_MAX_LEN; + *op++ = (M4_MARKER | ((m_off >> 11) & 8)); + while (unlikely(m_len > 255)) { + m_len -= 255; + *op++ = 0; } + *op++ = (m_len); } -m3_m4_offset: - *op++ = ((m_off & 63) << 2); + *op++ = (m_off << 2); *op++ = (m_off >> 6); } - - ii = ip; - if (unlikely(ip >= ip_end)) - break; + goto next; } - *out_len = op - out; - return in_end - ii; + return in_end - (ii - ti); } -int lzo1x_1_compress(const unsigned char *in, size_t in_len, unsigned char *out, - size_t *out_len, void *wrkmem) +int lzo1x_1_compress(const unsigned char *in, size_t in_len, + unsigned char *out, size_t *out_len, + void *wrkmem) { - const unsigned char *ii; + const unsigned char *ip = in; unsigned char *op = out; - size_t t; + size_t l = in_len; + size_t t = 0; - if (unlikely(in_len <= M2_MAX_LEN + 5)) { - t = in_len; - } else { - t = _lzo1x_1_do_compress(in, in_len, op, out_len, wrkmem); + while (l > 20) { + size_t ll = l <= (M4_MAX_OFFSET + 1) ? l : (M4_MAX_OFFSET + 1); + uintptr_t ll_end = (uintptr_t) ip + ll; + if ((ll_end + ((t + ll) >> 5)) <= ll_end) + break; + BUILD_BUG_ON(D_SIZE * sizeof(lzo_dict_t) > LZO1X_1_MEM_COMPRESS); + memset(wrkmem, 0, D_SIZE * sizeof(lzo_dict_t)); + t = lzo1x_1_do_compress(ip, ll, op, out_len, t, wrkmem); + ip += ll; op += *out_len; + l -= ll; } + t += l; if (t > 0) { - ii = in + in_len - t; + const unsigned char *ii = in + in_len - t; if (op == out && t <= 238) { *op++ = (17 + t); @@ -198,16 +247,21 @@ *op++ = (t - 3); } else { size_t tt = t - 18; - *op++ = 0; while (tt > 255) { tt -= 255; *op++ = 0; } - *op++ = tt; } - do { + if (t >= 16) do { + COPY8(op, ii); + COPY8(op + 8, ii + 8); + op += 16; + ii += 16; + t -= 16; + } while (t >= 16); + if (t > 0) do { *op++ = *ii++; } while (--t > 0); } @@ -223,4 +277,3 @@ MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("LZO1X-1 Compressor"); - --- linux-ec2-2.6.32.orig/lib/lzo/lzodefs.h +++ linux-ec2-2.6.32/lib/lzo/lzodefs.h @@ -1,19 +1,37 @@ /* * lzodefs.h -- architecture, OS and compiler specific defines * - * Copyright (C) 1996-2005 Markus F.X.J. Oberhumer + * Copyright (C) 1996-2012 Markus F.X.J. Oberhumer * * The full LZO package can be found at: * http://www.oberhumer.com/opensource/lzo/ * - * Changed for kernel use by: + * Changed for Linux kernel use by: * Nitin Gupta * Richard Purdie */ -#define LZO_VERSION 0x2020 -#define LZO_VERSION_STRING "2.02" -#define LZO_VERSION_DATE "Oct 17 2005" + +#define COPY4(dst, src) \ + put_unaligned(get_unaligned((const u32 *)(src)), (u32 *)(dst)) +#if defined(__x86_64__) +#define COPY8(dst, src) \ + put_unaligned(get_unaligned((const u64 *)(src)), (u64 *)(dst)) +#else +#define COPY8(dst, src) \ + COPY4(dst, src); COPY4((dst) + 4, (src) + 4) +#endif + +#if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) +#error "conflicting endian definitions" +#elif defined(__x86_64__) +#define LZO_USE_CTZ64 1 +#define LZO_USE_CTZ32 1 +#elif defined(__i386__) || defined(__powerpc__) +#define LZO_USE_CTZ32 1 +#elif defined(__arm__) && (__LINUX_ARM_ARCH__ >= 5) +#define LZO_USE_CTZ32 1 +#endif #define M1_MAX_OFFSET 0x0400 #define M2_MAX_OFFSET 0x0800 @@ -34,10 +52,8 @@ #define M3_MARKER 32 #define M4_MARKER 16 -#define D_BITS 14 -#define D_MASK ((1u << D_BITS) - 1) +#define lzo_dict_t unsigned short +#define D_BITS 13 +#define D_SIZE (1u << D_BITS) +#define D_MASK (D_SIZE - 1) #define D_HIGH ((D_MASK >> 1) + 1) - -#define DX2(p, s1, s2) (((((size_t)((p)[2]) << (s2)) ^ (p)[1]) \ - << (s1)) ^ (p)[0]) -#define DX3(p, s1, s2, s3) ((DX2((p)+1, s2, s3) << (s1)) ^ (p)[0]) --- linux-ec2-2.6.32.orig/lib/lzo/lzo1x_decompress_safe.c +++ linux-ec2-2.6.32/lib/lzo/lzo1x_decompress_safe.c @@ -0,0 +1,255 @@ +/* + * LZO1X Decompressor from LZO + * + * Copyright (C) 1996-2012 Markus F.X.J. Oberhumer + * + * The full LZO package can be found at: + * http://www.oberhumer.com/opensource/lzo/ + * + * Changed for Linux kernel use by: + * Nitin Gupta + * Richard Purdie + */ + +#include +#include +#include +#include +#include +#include "lzodefs.h" + +#define HAVE_IP(t, x) \ + (((size_t)(ip_end - ip) >= (size_t)(t + x)) && \ + (((t + x) >= t) && ((t + x) >= x))) + +#define HAVE_OP(t, x) \ + (((size_t)(op_end - op) >= (size_t)(t + x)) && \ + (((t + x) >= t) && ((t + x) >= x))) + +#define NEED_IP(t, x) \ + do { \ + if (!HAVE_IP(t, x)) \ + goto input_overrun; \ + } while (0) + +#define NEED_OP(t, x) \ + do { \ + if (!HAVE_OP(t, x)) \ + goto output_overrun; \ + } while (0) + +#define TEST_LB(m_pos) \ + do { \ + if ((m_pos) < out) \ + goto lookbehind_overrun; \ + } while (0) + +int lzo1x_decompress_safe(const unsigned char *in, size_t in_len, + unsigned char *out, size_t *out_len) +{ + unsigned char *op; + const unsigned char *ip; + size_t t, next; + size_t state = 0; + const unsigned char *m_pos; + const unsigned char * const ip_end = in + in_len; + unsigned char * const op_end = out + *out_len; + + op = out; + ip = in; + + if (unlikely(in_len < 3)) + goto input_overrun; + if (*ip > 17) { + t = *ip++ - 17; + if (t < 4) { + next = t; + goto match_next; + } + goto copy_literal_run; + } + + for (;;) { + t = *ip++; + if (t < 16) { + if (likely(state == 0)) { + if (unlikely(t == 0)) { + while (unlikely(*ip == 0)) { + t += 255; + ip++; + NEED_IP(1, 0); + } + t += 15 + *ip++; + } + t += 3; +copy_literal_run: +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) + if (likely(HAVE_IP(t, 15) && HAVE_OP(t, 15))) { + const unsigned char *ie = ip + t; + unsigned char *oe = op + t; + do { + COPY8(op, ip); + op += 8; + ip += 8; + COPY8(op, ip); + op += 8; + ip += 8; + } while (ip < ie); + ip = ie; + op = oe; + } else +#endif + { + NEED_OP(t, 0); + NEED_IP(t, 3); + do { + *op++ = *ip++; + } while (--t > 0); + } + state = 4; + continue; + } else if (state != 4) { + next = t & 3; + m_pos = op - 1; + m_pos -= t >> 2; + m_pos -= *ip++ << 2; + TEST_LB(m_pos); + NEED_OP(2, 0); + op[0] = m_pos[0]; + op[1] = m_pos[1]; + op += 2; + goto match_next; + } else { + next = t & 3; + m_pos = op - (1 + M2_MAX_OFFSET); + m_pos -= t >> 2; + m_pos -= *ip++ << 2; + t = 3; + } + } else if (t >= 64) { + next = t & 3; + m_pos = op - 1; + m_pos -= (t >> 2) & 7; + m_pos -= *ip++ << 3; + t = (t >> 5) - 1 + (3 - 1); + } else if (t >= 32) { + t = (t & 31) + (3 - 1); + if (unlikely(t == 2)) { + while (unlikely(*ip == 0)) { + t += 255; + ip++; + NEED_IP(1, 0); + } + t += 31 + *ip++; + NEED_IP(2, 0); + } + m_pos = op - 1; + next = get_unaligned_le16(ip); + ip += 2; + m_pos -= next >> 2; + next &= 3; + } else { + m_pos = op; + m_pos -= (t & 8) << 11; + t = (t & 7) + (3 - 1); + if (unlikely(t == 2)) { + while (unlikely(*ip == 0)) { + t += 255; + ip++; + NEED_IP(1, 0); + } + t += 7 + *ip++; + NEED_IP(2, 0); + } + next = get_unaligned_le16(ip); + ip += 2; + m_pos -= next >> 2; + next &= 3; + if (m_pos == op) + goto eof_found; + m_pos -= 0x4000; + } + TEST_LB(m_pos); +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) + if (op - m_pos >= 8) { + unsigned char *oe = op + t; + if (likely(HAVE_OP(t, 15))) { + do { + COPY8(op, m_pos); + op += 8; + m_pos += 8; + COPY8(op, m_pos); + op += 8; + m_pos += 8; + } while (op < oe); + op = oe; + if (HAVE_IP(6, 0)) { + state = next; + COPY4(op, ip); + op += next; + ip += next; + continue; + } + } else { + NEED_OP(t, 0); + do { + *op++ = *m_pos++; + } while (op < oe); + } + } else +#endif + { + unsigned char *oe = op + t; + NEED_OP(t, 0); + op[0] = m_pos[0]; + op[1] = m_pos[1]; + op += 2; + m_pos += 2; + do { + *op++ = *m_pos++; + } while (op < oe); + } +match_next: + state = next; + t = next; +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) + if (likely(HAVE_IP(6, 0) && HAVE_OP(4, 0))) { + COPY4(op, ip); + op += t; + ip += t; + } else +#endif + { + NEED_IP(t, 3); + NEED_OP(t, 0); + while (t > 0) { + *op++ = *ip++; + t--; + } + } + } + +eof_found: + *out_len = op - out; + return (t != 3 ? LZO_E_ERROR : + ip == ip_end ? LZO_E_OK : + ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN); + +input_overrun: + *out_len = op - out; + return LZO_E_INPUT_OVERRUN; + +output_overrun: + *out_len = op - out; + return LZO_E_OUTPUT_OVERRUN; + +lookbehind_overrun: + *out_len = op - out; + return LZO_E_LOOKBEHIND_OVERRUN; +} + +EXPORT_SYMBOL_GPL(lzo1x_decompress_safe); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("LZO1X Decompressor"); + --- linux-ec2-2.6.32.orig/lib/lzo/Makefile +++ linux-ec2-2.6.32/lib/lzo/Makefile @@ -1,5 +1,5 @@ lzo_compress-objs := lzo1x_compress.o -lzo_decompress-objs := lzo1x_decompress.o +lzo_decompress-objs := lzo1x_decompress_safe.o obj-$(CONFIG_LZO_COMPRESS) += lzo_compress.o obj-$(CONFIG_LZO_DECOMPRESS) += lzo_decompress.o --- linux-ec2-2.6.32.orig/debian.ec2/control +++ linux-ec2-2.6.32/debian.ec2/control @@ -0,0 +1,112 @@ +Source: linux-ec2 +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], gawk +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-karmic.git + +Package: linux-ec2-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-ec2-source, linux-ec2-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-ec2-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-ec2-doc-2.6 +Replaces: linux-ec2-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-ec2-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-headers-2.6.32-368 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +#Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-368/debian.README.gz for details + + +Package: linux-image-2.6.32-368-ec2 +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1) +Recommends: +Suggests: fdutils, linux-ec2-doc-2.6.32 | linux-ec2-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ec2 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-368-ec2 +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-368, ${shlibs:Depends} +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-368/debian.README.gz for details. + +Package: linux-image-2.6.32-368-ec2-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. --- linux-ec2-2.6.32.orig/debian.ec2/control.stub.in +++ linux-ec2-2.6.32/debian.ec2/control.stub.in @@ -0,0 +1,58 @@ +Source: SRCPKGNAME +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], gawk +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-karmic.git + +Package: SRCPKGNAME-source-PKGVER +Architecture: all +Section: devel +Priority: optional +Provides: SRCPKGNAME-source, SRCPKGNAME-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version PKGVER with Ubuntu patches + This package provides the source code for the Linux kernel version + PKGVER. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: SRCPKGNAME-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: SRCPKGNAME-doc-2.6 +Replaces: SRCPKGNAME-doc-2.6 +Description: Linux kernel specific documentation for version PKGVER + This package provides the various documents in the PKGVER kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/SRCPKGNAME-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-headers-PKGVER-ABINUM +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +#Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version PKGVER + This package provides kernel header files for version PKGVER, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-PKGVER-ABINUM/debian.README.gz for details + --- linux-ec2-2.6.32.orig/debian.ec2/changelog.historical +++ linux-ec2-2.6.32/debian.ec2/changelog.historical @@ -0,0 +1,4176 @@ +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 + +linux (2.6.28-9.31) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: cpufreq-nforce2: probe failures are not errors + - LP: #332170 + * SAUCE: mmc: add MODALIAS linkage for MMC/SD devices + - LP: #30335 + * remove test-suspend script + - LP: #333856 + + [ Kees Cook ] + + * handle relative paths in modules.dep + Fixes 2.6.28-9.30 FTBS. + + [ Upstream Kernel Changes ] + + * ricoh_mmc: Handle newer models of Ricoh controllers + + -- Tim Gardner Wed, 11 Mar 2009 08:19:24 -0600 + +linux (2.6.28-9.30) jaunty; urgency=low + + [ Amit Kucheria ] + + * ARM:mx51 Add SoC and board support for mx51 platforms + * ARM:mx51 Add CONFIG_ARCH_MXC_CANONICAL to disable parts of Freescale's + code + * MMC: Add support for 8-bit cards + * Add ARM:MX51 SoC support to the build system + * ARM: Make ARM arch aware of ubuntu/ drivers + * ARM: Add imx51 configuration + * Disable d-i modules for imx51 and mv78xx0 + * Disable Apparmor on boot for ARM + * Updating imx51 config + + [ Jason Liu ] + + * Do not use OOB with MLC NAND + + [ Richard Zhu ] + + * Support the eMMC4.3 card + + [ Rob Herring ] + + * ARM: Add more cache memory types macros + + [ Tim Gardner ] + + * Set CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y for i386/amd64/lpia + + [ Manoj Iyer ] + + * Enable CONFIG_RTL8187SE=m + + [ Upstream Kernel Changes ] + + * USB: EHCI: slow down ITD reuse + - LP: #329437 + + -- Tim Gardner Sun, 08 Mar 2009 14:14:15 -0600 + +linux (2.6.28-9.29) jaunty; urgency=low + + [ Andy Whitcroft ] + + * link-headers -- only link directories which do not already exist + - LP: #315252 + + [ Daniel Marjamäki ] + + * SAUCE: (drop after 2.6.28) netxen: fix memory leak in + drivers/net/netxen_nic_init.c + - LP: #330813 + + [ Dhananjay Phadke ] + + * SAUCE: (drop after 2.6.28) netxen: fix endianness in firmware commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix ipv6 offload and tx cleanup + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix link speed reporting for some + boards + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: firmware init fix + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: cleanup mac list on driver unload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: hold tx lock while sending firmware + commands + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: handle dma mapping failures + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: avoid invalid iounmap + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: include ipv6.h (fixes build failure) + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix vlan tso/checksum offload + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: reduce memory footprint + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: revert jumbo ringsize + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: fix msi-x interrupt handling + - LP: #330813 + * SAUCE: (drop after 2.6.28) netxen: remove pcie workaround + - LP: #330813 + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.28) drivers/net/netxen: fix sparse warnings: use + NULL pointer instead of plain integer + - LP: #330813 + + [ Huaxu Wan ] + + * SAUCE: report rfkill changes event if interface is down + - LP: #193970 + + [ Tim Gardner ] + + * MV78XX0 must specify a target in the vars definition. + + [ Upstream Kernel Changes ] + + * Revert "ext4: wait on all pending commits in ext4_sync_fs()" + * jbd2: Fix return value of jbd2_journal_start_commit() + * jbd2: Avoid possible NULL dereference in + jbd2_journal_begin_ordered_truncate() + * ext4: Fix to read empty directory blocks correctly in 64k + * ext4: Fix lockdep warning + * ext4: Initialize preallocation list_head's properly + * ext4: Implement range_cyclic in ext4_da_writepages instead of + write_cache_pages + * ext4: Fix NULL dereference in ext4_ext_migrate()'s error handling + * ext4: Add fallback for find_group_flex + * ext4: Fix deadlock in ext4_write_begin() and ext4_da_write_begin() + * Added mv78xx0 flavor + + -- Tim Gardner Fri, 06 Mar 2009 06:13:31 -0700 + +linux (2.6.28-8.28) jaunty; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: Limit workaround for ASUS notebooks even more + - LP: #288385 + + [ Scott James Remnant ] + + * SAUCE: Auto-load esp module when device opened. + * SAUCE: Auto-load bridge module when socket opened. + * SAUCE: Auto-load af_netlink module when socket opened. + * SAUCE: Auto-load wanrouter module when socket opened. + * SAUCE: Auto-load ip_queue module when socket opened. + * SAUCE: Auto-load ip6_queue module when socket opened. + * SAUCE: Auto-load cn module when socket opened. + * SAUCE: Auto-load scsi_transport_iscsi module when socket opened. + * SAUCE: Auto-load ftl module when device opened. + * SAUCE: Auto-load pcd module when device opened. + * SAUCE: Auto-load pf module when device opened. + * SAUCE: Auto-load nftl module when device opened. + * SAUCE: Auto-load mousedev module when psaux device opened. + * SAUCE: Auto-load mousedev module when /dev/input/mice opened. + * SAUCE: Auto-load rng-core module when device opened. + * SAUCE: Auto-load openprom module when device opened. + * SAUCE: Auto-load applicom module when device opened. + * SAUCE: Auto-load toshiba module when device opened. + * SAUCE: Auto-load cyclades module when device opened. + * SAUCE: Auto-load riscom8 module when device opened. + * SAUCE: Auto-load specialix module when device opened. + * SAUCE: Auto-load videodev module when device opened. + * SAUCE: Auto-load i2c_dev module when device opened. + * SAUCE: Auto-load mtdchar module when device opened. + * SAUCE: Auto-load pt module when device opened. + * SAUCE: Auto-load pg module when device opened. + * SAUCE: Auto-load cdc_acm module when device opened. + * SAUCE: Auto-load msr module when device opened. + * SAUCE: Auto-load cpuid module when device opened. + * SAUCE: quickcam: Enable double-buffering by default + * SAUCE: libata: Ignore HPA by default. + * SAUCE: hostap: Change initial operation mode to managed (infra) + * SAUCE: floppy: Provide a PnP device table in the module. + - LP: #255651 + * SAUCE: Auto-load mwave module when device opened. + * Build CONFIG_FUSE_FS into kernel, not as module. + + [ Stefan Bader ] + + * Enable build of ext4 as a module on LPIA + - LP: #331848 + + [ Tim Gardner ] + + * Update configs to fix LPIA FTBS + + -- Tim Gardner Thu, 05 Mar 2009 10:43:24 -0700 + +linux (2.6.28-8.27) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (arm:ixp4xx) + + [ Andy Whitcroft ] + + * SAUCE: enable Intel HDMI output + + [ Manoj Iyer ] + + * SAUCE: Added quirk for Linksys WUSB600N USB wifi-n networking adapter + - LP: #323473 + + [ Steve Beattie ] + + * fix apparmor memory leak on unlinked file ops + - LP: #329489 + + [ Tim Gardner ] + + * SAUCE: Dell XPS710 reboot quirk + - LP: #323592 + * SAUCE: (drop after 2.6.28) ieee80211: Add infrastructure to obsolete + scan results + - LP: #336055 + * Add modules.order to the linux-image package. + + [ Upstream Kernel Changes ] + + * iwlwifi: fix time interval misuse in iwl_poll_{direct_}bit + * x86: only scan the root bus in early PCI quirks + - LP: #267295 + * ALSA: hda - Intel HDMI audio support + * ALSA: hda - Fix unused function in patch_intelhdmi.c + * ALSA: handle SiI1392 HDMI codec in patch_intelhdmi.c + * ALSA: hda-intel: reorder HDMI audio enabling sequence + * ALSA: introduce snd_print_pcm_rates() + * ALSA: create hda_eld.c for ELD routines and proc interface + * ALSA: ELD proc interface for HDMI sinks + * ALSA: hda: make standalone hdmi_fill_audio_infoframe() + * ALSA: hda: make global snd_print_channel_allocation() + * ALSA: hda: HDMI channel allocations for audio infoframe + * ALSA: hda: HDMI channel mapping cleanups + * ALSA: hda: minor code cleanups + * ALSA: hda: rename sink_eld to hdmi_eld + * ALSA: hda - Release ELD proc file + * ALSA: hda - minor HDMI code cleanups + * ALSA: hda - report selected CA index for Audio InfoFrame + * ALSA: hda - Add Intel vendor id string + + -- Tim Gardner Wed, 25 Feb 2009 14:23:46 -0700 + +linux (2.6.28-8.26) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs (armel:ixp4xx) + - LP: #331510 + + [ Tim Gardner ] + + * Add more missing modules + + -- Tim Gardner Tue, 24 Feb 2009 06:58:53 -0700 + +linux (2.6.28-8.25) jaunty; urgency=low + + [ Scott James Remnant ] + + * SAUCE: Prefer powernow-k8 to acpi-cpufreq + * Change CONFIG_X86_P4_CLOCKMOD to be a module again. + + [ Tim Gardner ] + + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new + group descriptor when resizing the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check + to make_indexed_dir" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: only use + i_size_high for regular files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks + for the superblock before mounting the filesystem" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix + s_dirty_blocks_counter if block allocation failed with nodelalloc" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Init the complete + page while building buddy cache" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new + groups to be added during block allocation" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: mark the + blocks/inode bitmap beyond end of group as used" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use new + buffer_head flag to check uninit group bitmaps initialization" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the race + between read_inode_bitmap() and ext4_new_inode()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used()" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks + freed but not yet committed in buddy cache init" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc + header files" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added + during resize to bitmap" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status" + * Revert "SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not + supported test to journal_wait_on_commit_record" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[]" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error + when mounting a fs with a single bg" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset." + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings" + * Revert "SAUCE: (revert before 2.6.28.y update) ext4: Add support for + non-native signed/unsigned htree hash algorithms" + * Enabled X86_ACPI_CPUFREQ=y + + [ Upstream Kernel Changes ] + + * ath9k: quiet harmless ForceXPAon messages + - LP: #321474 + * [WATCHDOG] iTCO_wdt: fix SMI_EN regression 2 + - LP: #314050 + * pid: implement ns_of_pid + * mqueue: fix si_pid value in mqueue do_notify() + * powerpc/vsx: Fix VSX alignment handler for regs 32-63 + * sata_nv: give up hardreset on nf2 + * Fix Intel IOMMU write-buffer flushing + * SCSI: libiscsi: fix iscsi pool leak + * x86/cpa: make sure cpa is safe to call in lazy mmu mode + * sched: SCHED_OTHER vs SCHED_IDLE isolation + * x86, vm86: fix preemption bug + * Add support for VT6415 PCIE PATA IDE Host Controller + * ext2/xip: refuse to change xip flag during remount with busy inodes + * 3c505: do not set pcb->data.raw beyond its size + * Bluetooth: Fix TX error path in btsdio driver + * ext4: Add support for non-native signed/unsigned htree hash algorithms + * ext4: tone down ext4_da_writepages warnings + * ext4: Fix the delalloc writepages to allocate blocks at the right + offset. + * ext4: avoid ext4_error when mounting a fs with a single bg + * ext4: Widen type of ext4_sb_info.s_mb_maxs[] + * jbd2: Add barrier not supported test to journal_wait_on_commit_record + * ext4: Don't overwrite allocation_context ac_status + * ext4: Add blocks added during resize to bitmap + * ext4: Use EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * ext4: cleanup mballoc header files + * ext4: don't use blocks freed but not yet committed in buddy cache init + * ext4: Fix race between read_block_bitmap() and mark_diskspace_used() + * ext4: Fix the race between read_inode_bitmap() and ext4_new_inode() + * ext4: Use new buffer_head flag to check uninit group bitmaps + initialization + * ext4: mark the blocks/inode bitmap beyond end of group as used + * ext4: Don't allow new groups to be added during block allocation + * ext4: Init the complete page while building buddy cache + * ext4: Fix s_dirty_blocks_counter if block allocation failed with + nodelalloc + * ext4: Add sanity checks for the superblock before mounting the + filesystem + * ext4: only use i_size_high for regular files + * ext4: Add sanity check to make_indexed_dir + * ext4: Initialize the new group descriptor when resizing the filesystem + * Fix longstanding "error: storage size of '__mod_dmi_device_table' isn't + known" + * Linux 2.6.28.7 + + -- Tim Gardner Thu, 19 Feb 2009 06:45:55 -0700 + +linux (2.6.28-8.24) jaunty; urgency=low + + [ Scott James Remnant ] + + * Change CPU_FREQ_DEFAULT_GOV_ONDEMAND to y + * SAUCE: Link acpi-cpufreq.o first + + [ Tim Gardner ] + + * Build in CPU Frequency scaling drivers + + -- Tim Gardner Wed, 18 Feb 2009 06:12:24 -0700 + +linux (2.6.28-8.23) jaunty; urgency=low + + [ Andy Whitcroft ] + + * include the kernel configuration in the sub-flavour images + - LP: #328859 + + [ Tim Gardner ] + + * Revert "SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks" in favor of upstream commit. + * Fix compile issues with qc-usb + * SAUCE: (remove after 2.6.28) V4L/DVB (10216): saa7127: fix broken + S-Video with saa7129 + - LP: #329267 + + [ Upstream Kernel Changes ] + + * Subject:SAUCE: LP#193970 iwlagn: fix hw-rfkill while the interface is + down + - LP: #193970 + * x86, vmi: put a missing paravirt_release_pmd in pgd_dtor + * nbd: fix I/O hang on disconnected nbds + * mac80211: restrict to AP in outgoing interface heuristic + * w1: w1 temp calculation overflow fix + * zd1211rw: adding 0ace:0xa211 as a ZD1211 device + * zd1211rw: treat MAXIM_NEW_RF(0x08) as UW2453_RF(0x09) for TP-Link + WN322/422G + * parport: parport_serial, don't bind netmos ibm 0299 + * syscall define: fix uml compile bug + * kernel-doc: fix syscall wrapper processing + * Fix page writeback thinko, causing Berkeley DB slowdown + * write-back: fix nr_to_write counter + * writeback: fix break condition + * mm: rearrange exit_mmap() to unlock before arch_exit_mmap + * powerpc/fsl-booke: Fix mapping functions to use phys_addr_t + * lockd: fix regression in lockd's handling of blocked locks + * sctp: Fix crc32c calculations on big-endian arhes. + * sctp: Correctly start rtx timer on new packet transmissions. + * sctp: Properly timestamp outgoing data chunks for rtx purposes + * net: Fix frag_list handling in skb_seq_read + * net: Fix OOPS in skb_seq_read(). + * drivers/net/skfp: if !capable(CAP_NET_ADMIN): inverted logic + * ipv4: fix infinite retry loop in IP-Config + * net: Fix userland breakage wrt. linux/if_tunnel.h + * net: packet socket packet_lookup_frame fix + * packet: Avoid lock_sock in mmap handler + * sungem: Soft lockup in sungem on Netra AC200 when switching interface + up + * udp: Fix UDP short packet false positive + * udp: increments sk_drops in __udp_queue_rcv_skb() + * ipv6: Disallow rediculious flowlabel option sizes. + * ipv6: Copy cork options in ip6_append_data + * net: 4 bytes kernel memory disclosure in SO_BSDCOMPAT gsopt try #2 + * sky2: fix hard hang with netconsoling and iface going up + * tun: Add some missing TUN compat ioctl translations. + * tun: Fix unicast filter overflow + * virtio_net: Fix MAX_PACKET_LEN to support 802.1Q VLANs + * tcp: splice as many packets as possible at once + * tcp: Fix length tcp_splice_data_recv passes to skb_splice_bits. + * sparc: Enable syscall wrappers for 64-bit (CVE-2009-0029) + * sparc64: Annotate sparc64 specific syscalls with SYSCALL_DEFINEx() + * ALSA: hda - Add missing terminator in slave dig-out array + * ALSA: mtpav - Fix initial value for input hwport + * HID: adjust report descriptor fixup for MS 1028 receiver + * ide/libata: fix ata_id_is_cfa() (take 4) + * libata: fix EH device failure handling + * netfilter: fix tuple inversion for Node information request + * netfilter: xt_sctp: sctp chunk mapping doesn't work + * x86: microcode_amd: fix wrong handling of equivalent CPU id + * ide-cd: fix DMA for non bio-backed requests + * net: Fix data corruption when splicing from sockets. + * Linux 2.6.28.6 + * eCryptfs: Regression in unencrypted filename symlinks + + -- Tim Gardner Mon, 16 Feb 2009 06:43:51 -0700 + +linux (2.6.28-8.22) jaunty; urgency=low + + [ Amit Kucheria ] + + * Remove perm-blacklist + + [ Andy Whitcroft ] + + * SAUCE: psmouse/synaptics: ensure we reset the device on resume + - LP: #317270 + + [ Tim Gardner ] + + * Add lpia to getabi script + * SAUCE: tracer for sreadahead + + -- Amit Kucheria Fri, 13 Feb 2009 15:23:21 +0200 + +linux (2.6.28-8.21) jaunty; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: switch the Asus Pundit P1-AH2 to old acpi sleep ordering + - LP: #327267 + + [ Tim Gardner ] + + * Added LPIA arch support + * Added libdrm-dev as a 'Replaces' to linux-libc-dev + * SAUCE: LPIA support for 9202 HDA Sigmatel codec + * SAUCE: Add an X86_LPIA Kconfig option + * SAUCE: UHCI USB quirk for resume + * SAUCE: LPIA Reboot fix for Intel Crownbeach development boards + * SAUCE: LPIA Logical reset of USB port on resume + * Set CONFIG_WIRELESS_OLD_REGULATORY=n, added wireless-crda + as an install dependency. + + [ Upstream Kernel Changes ] + + * Revert "Revert "x86, early_ioremap: fix fencepost error"" + - LP: #312554 + * drm/i915: capture last_vblank count at IRQ uninstall time too + - LP: #320813 + * drm/i915: add get_vblank_counter function for GM45 + - LP: #320813 + * Staging: comedi: fix Kbuild + * Staging: meilhaus: fix Kbuild + * Staging: android: binder: fix arm build errors + * Staging: android: timed_gpio: Fix build to build on kernels after + 2.6.25. + * Staging: android: fix build error on 64bit boxes + * Staging: android: Add lowmemorykiller documentation. + * Staging: android: task_get_unused_fd_flags: fix the wrong usage of + tsk->signal + * staging: agnx: drivers/staging/agnx/agnx.h needs + * Staging: usbip: usbip_start_threads(): handle kernel_thread failure + * Staging: poch: fix verification of memory area + * Documentation: move DMA-mapping.txt to Doc/PCI/ + * sgi-xp: fix writing past the end of kzalloc()'d space + * do_wp_page: fix regression with execute in place + * wait: prevent exclusive waiter starvation + * shm: fix shmctl(SHM_INFO) lockup with !CONFIG_SHMEM + * revert "rlimit: permit setting RLIMIT_NOFILE to RLIM_INFINITY" + * prevent kprobes from catching spurious page faults + * sound: usb-audio: handle wMaxPacketSize for FIXED_ENDPOINT devices + * md: Ensure an md array never has too many devices. + * md: Fix a bug in linear.c causing which_dev() to return the wrong + device. + * ACPI: Enable bit 11 in _PDC to advertise hw coord + * ACPI: dock: Don't eval _STA on every show_docked sysfs read + * ieee1394: ohci1394: increase AT req. retries, fix ack_busy_X from + Panasonic camcorders and others + * firewire: ohci: increase AT req. retries, fix ack_busy_X from Panasonic + camcorders and others + * firewire: sbp2: fix DMA mapping leak on the failure path + * firewire: sbp2: add workarounds for 2nd and 3rd generation iPods + * ieee1394: sbp2: add workarounds for 2nd and 3rd generation iPods + * module: remove over-zealous check in __module_get() + * x86: APIC: enable workaround on AMD Fam10h CPUs + * eeepc-laptop: fix oops when changing backlight brightness during + eeepc-laptop init + * eeepc-laptop: Add support for extended hotkeys + * e1000: fix bug with shared interrupt during reset + * e1000: Fix PCI enable to honor the need_ioport flag + * agp/intel: Fix broken ® symbol in device name. + * ALSA: hda - Add quirk for FSC Amilo Xi2550 + * ALSA: hda - Add missing COEF initialization for ALC887 + * ALSA: hda - Add missing initialization for ALC272 + * asus_acpi: Add R1F support + * panasonic-laptop: fix X[ ARRAY_SIZE(X) ] + * ACPI: Skip the first two elements in the _BCL package + * ACPI: proc_dir_entry 'video/VGA' already registered + * ACPI: disable ACPI cleanly when bad RSDP found + * ACPICA: Fix table entry truncation calculation + * PCI: properly clean up ASPM link state on device remove + * PCI: return error on failure to read PCI ROMs + * seq_file: move traverse so it can be used from seq_read + * seq_file: fix big-enough lseek() + read() + * serial: set correct baud_base for Oxford Semiconductor Ltd EXSYS + EX-41092 Dual 16950 Serial adapter + * Add support for '8-port RS-232 MIC-3620 from advantech' + * mm: fix error case in mlock downgrade reversion + * elf core dump: fix get_user use + * ACPI: video: Fix reversed brightness behavior on ThinkPad SL series + * ipw2200: fix scanning while associated + * XFS: set b_error from bio error in xfs_buf_bio_end_io + * Revert USB: option: add Pantech cards + * USB: option: New mobile broadband modems to be supported + * USB: new id for ti_usb_3410_5052 driver + * USB: two more usb ids for ti_usb_3410_5052 + * USB: usb-storage: add Pentax to the bad-vendor list + * sata_via: Add VT8261 support + * nbd: do not allow two clients at the same time + * sctp: Fix another socket race during accept/peeloff + * Linux 2.6.28.5 + + -- Tim Gardner Mon, 09 Feb 2009 16:11:28 -0700 + +linux (2.6.28-7.20) jaunty; urgency=low + + [ Tim Gardner ] + + * SAUCE: Input: atkbd - Samsung NC10 key repeat fix + + [ Upstream Kernel Changes ] + + * Manually revert "mlock: downgrade mmap sem while populating mlocked + regions" + * xen: make sysfs files behave as their names suggest + * sata_mv: fix 8-port timeouts on 508x/6081 chips + * m68knommu: set NO_DMA + * PCI/MSI: bugfix/utilize for msi_capability_init() + * x86: use early clobbers in usercopy*.c + * netfilter: ctnetlink: fix scheduling while atomic + * orinoco: move kmalloc(..., GFP_KERNEL) outside spinlock in + orinoco_ioctl_set_genie + * fbdev/atyfb: Fix DSP config on some PowerMacs & PowerBooks + * kmalloc: return NULL instead of link failure + * sata_nv: rename nv_nf2_hardreset() + * sata_nv: fix MCP5x reset + * sata_nv: ck804 has borked hardreset too + * Fix memory corruption in console selection + * Add enable_ms to jsm driver + * nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is + found + * nfsd: Ensure nfsv4 calls the underlying filesystem on LOCKT + * iwlwifi: fix rs_get_rate WARN_ON() + * p54: fix lm87 checksum endianness + * p54: fix p54_read_eeprom to cope with tx_hdr_len + * p54usb: rewriting rx/tx routines to make use of usb_anchor's facilities + * minstrel: fix warning if lowest supported rate index is not 0 + * PCI: irq and pci_ids patch for Intel Tigerpoint DeviceIDs + * cpuidle: Add decaying history logic to menu idle predictor + * ACPI: Avoid array address overflow when _CST MWAIT hint bits are set + * video: always update the brightness when poking "brightness" + * Newly inserted battery might differ from one just removed, so update of + battery info fields is required. + * ACPI: Do not modify SCI_EN directly + * dlm: initialize file_lock struct in GETLK before copying conflicting + lock + * sata_mv: Fix chip type for Hightpoint RocketRaid 1740/1742 + * ACPICA: Allow multiple backslash prefix in namepaths + * Linux 2.6.28.4 + + -- Tim Gardner Sat, 07 Feb 2009 18:53:42 -0700 + +linux (2.6.28-7.19) jaunty; urgency=low + + * Fix missing modules FTBS + + -- Tim Gardner Thu, 05 Feb 2009 15:28:15 -0700 + +linux (2.6.28-7.18) jaunty; urgency=low + + [ Alok Kataria ] + + * SAUCE: (drop after 2.6.29) x86: add a synthetic TSC_RELIABLE feature + bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: add X86_FEATURE_HYPERVISOR feature bit + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Hypervisor detection and get tsc_freq + from hypervisor + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Add a synthetic TSC_RELIABLE feature + bit. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: Skip verification by the watchdog for + TSC clocksource. + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: VMware: Fix vmware_get_tsc code + - LP: #319945 + * SAUCE: (drop after 2.6.29) x86: vmware: look for DMI string in the + product serial key + - LP: #319945 + + [ Andy Whitcroft ] + + * SAUCE: toshiba_acpi -- pull in current -dev version of driver + - LP: #269831 + * SAUCE: toshiba_acpi -- add acpi hotkey kernel thread + - LP: #269831 + * move toshiba laptops back from tlsup to toshiba_acpi + - LP: #269831 + + [ Aneesh Kumar K.V ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the delalloc + writepages to allocate blocks at the right offset. + * SAUCE: (revert before 2.6.28.y update) ext4: avoid ext4_error when + mounting a fs with a single bg + * SAUCE: (revert before 2.6.28.y update) ext4: Don't overwrite + allocation_context ac_status + * SAUCE: (revert before 2.6.28.y update) ext4: Add blocks added during + resize to bitmap + * SAUCE: (revert before 2.6.28.y update) ext4: Use + EXT4_GROUP_INFO_NEED_INIT_BIT during resize + * SAUCE: (revert before 2.6.28.y update) ext4: cleanup mballoc header + files + * SAUCE: (revert before 2.6.28.y update) ext4: don't use blocks freed but + not yet committed in buddy cache init + * SAUCE: (revert before 2.6.28.y update) ext4: Fix race between + read_block_bitmap() and mark_diskspace_used() + * SAUCE: (revert before 2.6.28.y update) ext4: Fix the race between + read_inode_bitmap() and ext4_new_inode() + * SAUCE: (revert before 2.6.28.y update) ext4: Use new buffer_head flag + to check uninit group bitmaps initialization + * SAUCE: (revert before 2.6.28.y update) ext4: mark the blocks/inode + bitmap beyond end of group as used + * SAUCE: (revert before 2.6.28.y update) ext4: Don't allow new groups to + be added during block allocation + * SAUCE: (revert before 2.6.28.y update) ext4: Init the complete page + while building buddy cache + * SAUCE: (revert before 2.6.28.y update) ext4: Fix s_dirty_blocks_counter + if block allocation failed with nodelalloc + + [ Hannes Eder ] + + * SAUCE: (drop after 2.6.29) x86: vmware - fix sparse warnings + - LP: #319945 + + [ Luke Yelavich ] + + * hid modules have hyphens instead of underscores in their names + + [ Mark Fasheh ] + + * SAUCE: (revert before 2.6.28.y update) jbd2: Add BH_JBDPrivateStart + + [ Theodore Ts'o ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Add support for non-native + signed/unsigned htree hash algorithms + * SAUCE: (revert before 2.6.28.y update) ext4: tone down + ext4_da_writepages warnings + * SAUCE: (revert before 2.6.28.y update) jbd2: Add barrier not supported + test to journal_wait_on_commit_record + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity checks for the + superblock before mounting the filesystem + * SAUCE: (revert before 2.6.28.y update) ext4: only use i_size_high for + regular files + * SAUCE: (revert before 2.6.28.y update) ext4: Add sanity check to + make_indexed_dir + * SAUCE: (revert before 2.6.28.y update) jbd2: On a __journal_expect() + assertion failure printk "JBD2", not "EXT3-fs" + * SAUCE: (revert before 2.6.28.y update) ext4: Initialize the new group + descriptor when resizing the filesystem + + [ Tyler Hicks ] + + * SAUCE: (drop after 2.6.28) [eCryptfs] Regression in unencrypted + filename symlinks + - LP: #322532 + + [ Upstream Kernel Changes ] + + * Input: atkbd - broaden the Dell DMI signatures + - LP: #261721 + * ti_usb_3410_5052: support alternate firmware + * ath5k: fix mesh point operation + * mac80211: decrement ref count to netdev after launching mesh discovery + * inotify: clean up inotify_read and fix locking problems + * fuse: destroy bdi on umount + * fuse: fix missing fput on error + * fuse: fix NULL deref in fuse_file_alloc() + * x86, mm: fix pte_free() + * klist.c: bit 0 in pointer can't be used as flag + * sysfs: fix problems with binary files + * x86: fix page attribute corruption with cpa() + * USB: fix toggle mismatch in disable_endpoint paths + * sound: virtuoso: enable UART on Xonar HDAV1.3 + * USB: usbmon: Implement compat_ioctl + * USB: fix char-device disconnect handling + * USB: storage: add unusual devs entry + * alpha: nautilus - fix compile failure with gcc-4.3 + * alpha: fix vmalloc breakage + * resources: skip sanity check of busy resources + * rtl8187: Add termination packet to prevent stall + * it821x: Add ultra_mask quirk for Vortex86SX + * libata: pata_via: support VX855, future chips whose IDE controller use + 0x0571 + * serial_8250: support for Sealevel Systems Model 7803 COMM+8 + * drm: stash AGP include under the do-we-have-AGP ifdef + * Fix OOPS in mmap_region() when merging adjacent VM_LOCKED file segments + * bnx2x: Block nvram access when the device is inactive + * ext3: Add sanity check to make_indexed_dir + * rtl8187: Fix error in setting OFDM power settings for RTL8187L + * epoll: drop max_user_instances and rely only on max_user_watches + * gpiolib: fix request related issue + * sgi-xpc: Remove NULL pointer dereference. + * sgi-xpc: ensure flags are updated before bte_copy + * include/linux: Add bsg.h to the Kernel exported headers + * ALSA: hda - Fix PCM reference NID for STAC/IDT analog outputs + * ALSA: hda - add another MacBook Pro 4, 1 subsystem ID + * ALSA: hda - Add quirk for HP DV6700 laptop + * crypto: authenc - Fix zero-length IV crash + * crypto: ccm - Fix handling of null assoc data + * x86, pat: fix reserve_memtype() for legacy 1MB range + * x86, pat: fix PTE corruption issue while mapping RAM using /dev/mem + * PCI hotplug: fix lock imbalance in pciehp + * dmaengine: fix dependency chaining + * NET: net_namespace, fix lock imbalance + * relay: fix lock imbalance in relay_late_setup_files + * Linux 2.6.28.3 + * ALSA: Enable SPDIF output on ALC655 + * ALSA: hda - Add ASUS V1Sn support + * ALSA: hda - support detecting HD Audio devices with PCI class code + * ALSA: hda: alc883 model for ASUS P5Q-EM boards + * ALSA: hda - Add quirk for MSI 7260 mobo + * ALSA: hda - Add quirk for Sony VAIO VGN-SR19XN + * ALSA: oxygen: add Claro halo support + * ALSA: hda - Add a new function to seek for a codec ID + * ALSA: patch_sigmatel: Add missing Gateway entries and autodetection + * ALSA: hda - More fixes on Gateway entries + * ALSA: hda - Add MCP67 HDMI support + * ALSA: hda - fix name for ALC1200 + * LSA: hda - Add HP Acacia detection + * ALSA: hda - Add quirk for HP 2230s + * ALSA: hda - Add quirk for Dell Inspiron Mini9 + * ALSA: hda - add support for Intel DX58SO board + * ALSA: hda - Fix silent headphone output on Panasonic CF-74 + * ALSA: USB quirk for Logitech Quickcam Pro 9000 name + * ALSA: hda - add quirks for some 82801H variants to use ALC883_MITAC + + [ Yasunori Goto ] + + * SAUCE: (revert before 2.6.28.y update) ext4: Widen type of + ext4_sb_info.s_mb_maxs[] + + -- Tim Gardner Mon, 02 Feb 2009 23:07:13 -0700 + +linux (2.6.28-6.17) jaunty; urgency=low + + [ Amit Kucheria ] + + * Updating configs: ARMEL/versatile + + -- Amit Kucheria Fri, 30 Jan 2009 13:36:59 +0200 + +linux (2.6.28-6.16) jaunty; urgency=low + + [ Luke Yelavich ] + + * Add hid quirks to input-modules udeb + + [ Tim Gardner ] + + * Revert "[arm] Fix kexec on ARM by properly calling the relocation + function". This patch was deemed 'bogus' by Russell King on the + ARM mailing list. + + [ Upstream Kernel Changes ] + + * PCI: keep ASPM link state consistent throughout PCIe hierarchy + * security: introduce missing kfree + * rt2x00: add USB ID for the Linksys WUSB200. + * p54usb: Add USB ID for Thomson Speedtouch 121g + * lib/idr.c: use kmem_cache_zalloc() for the idr_layer cache + * sgi-xp: eliminate false detection of no heartbeat + * sched: fix update_min_vruntime + * IA64: Turn on CONFIG_HAVE_UNSTABLE_CLOCK + * sound: virtuoso: do not overwrite EEPROM on Xonar D2/D2X + * ALSA: hda - Add quirk for another HP dv5 + * ALSA: hda - Fix HP dv5 mic input + * ALSA: hda - Don't reset HP pinctl in patch_sigmatel.c + * ALSA: hda - make laptop-eapd model back for AD1986A + * drivers/net/irda/irda-usb.c: fix buffer overflow + * usb-storage: add last-sector hacks + * usb-storage: set CAPACITY_HEURISTICS flag for bad vendors + * pkt_sched: sch_htb: Fix deadlock in hrtimers triggered by HTB + * ipv6: Fix fib6_dump_table walker leak + * sctp: Avoid memory overflow while FWD-TSN chunk is received with bad + stream ID + * pkt_sched: cls_u32: Fix locking in u32_change() + * r6040: fix wrong logic in mdio code + * r6040: save and restore MIER correctly in the interrupt routine + * r6040: bump release number to 0.19 + * tcp: don't mask EOF and socket errors on nonblocking splice receive + * p54usb: fix traffic stalls / packet drop + * netfilter: x_tables: fix match/target revision lookup + * netfilter: ebtables: fix inversion in match code + * netfilter: nf_conntrack: fix ICMP/ICMPv6 timeout sysctls on big-endian + * dell_rbu: use scnprintf() instead of less secure sprintf() + * powerpc: is_hugepage_only_range() must account for both 4kB and 64kB + slices + * hwmon: (abituguru3) Fix CONFIG_DMI=n fallback to probe + * mm: write_cache_pages cyclic fix + * mm: write_cache_pages early loop termination + * mm: write_cache_pages writepage error fix + * mm: write_cache_pages integrity fix + * mm: write_cache_pages cleanups + * mm: write_cache_pages optimise page cleaning + * mm: write_cache_pages terminate quickly + * mm: write_cache_pages more terminate quickly + * mm: do_sync_mapping_range integrity fix + * mm: direct IO starvation improvement + * fs: remove WB_SYNC_HOLD + * fs: sync_sb_inodes fix + * fs: sys_sync fix + * Linux 2.6.28.2 + + -- Tim Gardner Sun, 25 Jan 2009 13:36:16 -0700 + +linux (2.6.28-5.15) jaunty; urgency=low + + [ Tim Gardner ] + + * Revert "Enabled CONFIG_PID_NS=y for i386/amd64" + Somehow this commit also reverted the 7 prior commits (which is bad). + * Enabled CONFIG_PID_NS=y for i386/amd64 (version 2) + + -- Tim Gardner Thu, 22 Jan 2009 13:48:34 -0700 + +linux (2.6.28-5.14) jaunty; urgency=low + + [ Ben Collins ] + + * lirc_gpio: Forward ported to current kernel (jaunty) + * configs: Enable LIRC_GPIO on 64-bit/32-bit x86 + - LP: #298791 + + [ Jeff Layton ] + + * SAUCE: cifs: make sure we allocate enough storage for socket address + - LP: #318565 + + [ Tim Gardner ] + + * check-abi: Return success when ABI skip is requested and no ABI files exist. + This ought to fix the armel FTBS. + + -- Tim Gardner Thu, 22 Jan 2009 06:42:49 -0700 + +linux (2.6.28-5.13) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control" + + [ Tim Gardner ] + + * Fix udeb generation breakage caused by the previous armel versatile + flavour config update. + + -- Tim Gardner Wed, 21 Jan 2009 12:38:35 -0700 + +linux (2.6.28-5.12) jaunty; urgency=low + + [ Ante ] + + * Update drbd to 8.3.0 + + [ Dave Airlie ] + + * i915/drm: provide compat defines for userspace for certain struct + + [ Eric Anholt ] + + * drm/i915: Don't double-unpin buffers if we take a signal in + * drm/i915: Don't complain when interrupted while pinning in execbuffers. + * drm/i915: Don't allow objects to get bound while VT switched. + + [ Jani Monoses ] + + * Fix webcam having USB ID 0ac8:303b + - LP: #292086 + + [ Jesse Barnes ] + + * drm/i915: set vblank enabled flag correctly across IRQ + * drm/i915: don't enable vblanks on disabled pipes + + [ Michael Casadevall ] + + * [arm] Fix kexec on ARM by properly calling the relocation function + + [ Tim Gardner ] + + * Enabled CONFIG_PID_NS=y for i386/amd64 + * SAUCE: Increase ATA_TMOUT_PMP_SRST_WAIT to 5 seconds. + - LP: #318978 + * Update armel versatile config + - LP: #314789 + * Enabled CONFIG_RT2860=m for i386/amd64 + * Enabled CONFIG_RT2870=m for i386/amd64 + + [ Upstream Kernel Changes ] + + * Input: atkbd - add keyboard quirk for HP Pavilion ZV6100 laptop + - LP: #291878 + * ALSA: hda - Add quirk for another HP dv7 + * ALSA: hda - Add quirk for HP6730B laptop + * ALSA: caiaq - Fix Oops with MIDI + * ALSA: hda - Fix typos for AD1882 codecs + * x86: fix intel x86_64 llc_shared_map/cpu_llc_id anomolies + * x86: default to SWIOTLB=y on x86_64 + * CIFS: make sure that DFS pathnames are properly formed + * ring-buffer: prevent false positive warning + * ring-buffer: fix dangling commit race + * iwlwifi: use GFP_KERNEL to allocate Rx SKB memory + * tx493[89]ide: Fix length for __ide_flush_dcache_range + * tx4939ide: Do not use zero count PRD entry + * SCSI: eata: fix the data buffer accessors conversion regression + * USB: emi26: fix oops on load + * x86, UV: remove erroneous BAU initialization + * x86: fix incorrect __read_mostly on _boot_cpu_pda + * vmalloc.c: fix flushing in vmap_page_range() + * fs: symlink write_begin allocation context fix + * cgroups: fix a race between cgroup_clone and umount + * dm raid1: fix error count + * dm log: fix dm_io_client leak on error paths + * minix: fix add link's wrong position calculation + * md: fix bitmap-on-external-file bug. + * sched_clock: prevent scd->clock from moving backwards, take #2 + * devices cgroup: allow mkfifo + * SCSI: aha152x_cs: Fix regression that keeps driver from using shared + interrupts + * ioat: fix self test for multi-channel case + * USB: isp1760: use a specific PLX bridge instead of any bdridge + * USB: isp1760: Fix probe in PCI glue code + * USB: unusual_devs.h additions for Pentax K10D + * inotify: fix type errors in interfaces + * Move compat system call declarations to compat header file + * Convert all system calls to return a long + * Rename old_readdir to sys_old_readdir + * Remove __attribute__((weak)) from sys_pipe/sys_pipe2 + * Make sys_pselect7 static + * Make sys_syslog a conditional system call + * System call wrapper infrastructure + * powerpc: Enable syscall wrappers for 64-bit + * s390: enable system call wrappers + * System call wrapper special cases + * System call wrappers part 01 + * System call wrappers part 02 + * System call wrappers part 03 + * System call wrappers part 04 + * System call wrappers part 05 + * System call wrappers part 06 + * System call wrappers part 07 + * System call wrappers part 08 + * System call wrappers part 09 + * System call wrappers part 10 + * System call wrappers part 11 + * System call wrappers part 12 + * System call wrappers part 13 + * System call wrappers part 14 + * System call wrappers part 15 + * System call wrappers part 16 + * System call wrappers part 17 + * System call wrappers part 18 + * System call wrappers part 19 + * System call wrappers part 20 + * System call wrappers part 21 + * System call wrappers part 22 + * System call wrappers part 23 + * System call wrappers part 24 + * System call wrappers part 25 + * System call wrappers part 26 + * System call wrappers part 27 + * System call wrappers part 28 + * System call wrappers part 29 + * System call wrappers part 30 + * System call wrappers part 31 + * System call wrappers part 32 + * System call wrappers part 33 + * s390 specific system call wrappers + * x86: fix RIP printout in early_idt_handler + * Fix timeouts in sys_pselect7 + * USB: another unusual_devs entry for another bad Argosy storage device + * USB: storage: extend unusual range for 067b:3507 + * USB: storage: recognizing and enabling Nokia 5200 cell phoes + * HID: fix error condition propagation in hid-sony driver + * fix switch_names() breakage in short-to-short case + * nfs: remove redundant tests on reading new pages + * eCryptfs: check readlink result was not an error before using it + * mvsas: increase port type detection delay to suit Seagate's 10k6 drive ST3450856SS 0003 + * x86: avoid theoretical vmalloc fault loop + * ath9k: enable RXing of beacons on STA/IBSS + * mm lockless pagecache barrier fix + * powerpc: Disable Collaborative Memory Manager for kdump + * ibmvfc: Delay NPIV login retry and add retries + * ibmvfc: Improve async event handling + * getrusage: RUSAGE_THREAD should return ru_utime and ru_stime + * ath5k: ignore the return value of ath5k_hw_noise_floor_calibration + * mm: fix assertion + * XFS: truncate readdir offsets to signed 32 bit values + * Linux 2.6.28.1 + * eCryptfs: Filename Encryption: Tag 70 packets + * eCryptfs: Filename Encryption: Header updates + * eCryptfs: Filename Encryption: Encoding and encryption functions + * eCryptfs: Filename Encryption: filldir, lookup, and readlink + * eCryptfs: Filename Encryption: mount option + * eCryptfs: Replace %Z with %z + * eCryptfs: Fix data types (int/size_t) + * eCryptfs: kerneldoc for ecryptfs_parse_tag_70_packet() + * eCryptfs: Clean up ecryptfs_decode_from_filename() + * fs/ecryptfs/inode.c: cleanup kerneldoc + * staging-p80211: Kill directly reference of netdev->priv + * staging-slicoss: Kill directly reference of netdev->priv + * staging-winbond: Kill directly reference of netdev->priv + * Staging: go7007: fixes due to video_usercopy api change + * Staging: go7007: fixes due v4l2_file_operations api change + * staging: correct dubious use of !x & y + * Staging: w35und: make wb35_probe() and wb35_disconnect() funtions static + * Staging: w35und: remove unused wb35_open() and wb35_close() functions + * Staging: w35und: use msleep() and udelay() + * Staging: w35und: remove the no-op pa_stall_execution macro + * Staging: w35und: purb typedef removal + * Staging: w35und: reg queue struct typedef removal + * Staging: w35und: wb35reg struct typedef removal + * Staging: w35und: padapter struct typedef removal + * Staging: w35und: merge wblinux struct to adapter + * Staging: w35und: wb35_probe() cleanup + * Staging: w35und: remove usb_submit_urb wrapper function + * Staging: w35und: remove usb_alloc_urb wrapper function + * w35und: remove dead code from wbusb_f.h + * Staging: w35und: remove true/false boolean macros + * Staging: w35und: OS_MEMORY_ALLOC wrapper removal + * Staging: w35und: usb_put_dev() is missing from wb35_disconnect() + * Staging: w35und: remove macro magic from MLME_GetNextPacket() + * Staging: w35und: plug memory leak in wbsoft_tx() + * Staging: w35und: move supported band initialization out of wb35_probe() + * Staging: w35und: remove timer wrappers + * Staging: w35und: remove atomic op wrappers + * Staging: w35und: remove memcpy/memcmp wrappers + * Staging: w35und: remove abs() and BIT() macros + * Staging: w35und: remove unused macros from common.h + * Staging: w35und: remove unused link status code + * Staging: w35und: #include cleanup + * Staging: w35und: remove some dead code + * Staging: w35und: move source files to one directory + * Staging: w35und: move struct wbsoft_priv to core.h and use it + * Staging: w35und: remove ->adapter from struct _HW_DATA_T + * Staging: w35und: clean up adapter.h a bit + * Staging: w35und: merge struct wb35_adapter to struct wbsoft_priv + * Staging: w35und: remove global struct ieee80211_hw + * Staging: w35und: inline DRIVER_AUTHOR and DRIVER_DESC macros + * Staging: w35und: clean up wblinux.c a bit + * Staging: w35und: remove unused ->ShutDowned member from struct + LOCAL_PARA + * Staging: w35und: move global wbsoft_enabled to struct wbsoft_priv + * Staging: w35und: move packet_came() to wb35rx.c + * Staging: w35und: remove ->skb_array from struct wbsoft_priv + * Staging: w35und: remove ->shutdown from struct wbsoft_priv + * Staging: w35und: make functions local to mds.c static + * Staging: w35und: make functions local to mlmetxrx.c static + * Staging: w35und: remove dead code from mto.c + * Staging: w35und: make functions local to wb35rx.c static + * Staging: w35und: make functions local to wb35tx.c static + * Staging: w35und: remove dead code from wbhal.c + * Staging: w35und: remove rxisr.c as dead code + * Staging: w35und: fix Kconfig + * Staging: w35und: fix config build warnings + * Staging: wlan-ng: Remove PCI/PLX/PCMCIA files. + * Staging: wlan-ng: Update Help text to mention prism3 devices. + * Staging: wlan-ng: Delete PCI/PLX/PCMCIA-specific code. + * Staging: wlan-ng: Make wlan-ng use WEXT mode by default. + * Staging: wlan-ng: Eliminate more <2.6 kernel support. + * Staging: wlan-ng: Eliminate all backwards-compatibility for <2.6.13 kernels. + * Staging: wlan-ng: Eliminate a boatload of tertiaryAP-only code. + * Staging: wlan-ng: Remove AP-only code from MLME functions. + * Staging: wlan-ng: Get rid of the MTU tests in the rx conversion path. + * Staging: wlan-ng: Eliminate one more rx mtu test. + * Staging: wlan-ng: Eliminate local 'version.h' + * Staging: wlan-ng: Eliminate usage of procfs. + * Staging: wlan-ng: Use standard kernel integer (u32/s32/etc) types. + * Staging: wlan-ng: Eliminate all backwards-compatible kernel code. + * Staging: wlan-ng: Wireless Extension support is mandatory. + * Staging: wlan-ng: use WIRELESS_EXT, not CONFIG_WIRELESS_EXT + * Staging: wlan-ng: Delete a large pile of now-unused code. + * Staging: wlan-ng: Delete a pile of unused mibs. And fix WEXT SET_TXPOWER. + * Staging: wlan-ng: Consolidate wlan-ng into a single module. + * Staging: wlan-ng: Purge all MIBs not used internally. + * Staging: wlan-ng: p80211netdev.c fix netdev alloc to prevent oops on device start + * Staging: wlan-ng: prism2_usb.c always enable the card in probe_usb + * Staging: wlan-ng: hfa384x_usb.c use newest version of 384x_drvr_start + * Staging: wlan-ng: p80211wext.c add latest changes & remove extra nulls from wext_handlers + * Staging: wlan-ng: p80211wext don't set default key id twice + * Staging: wlan-ng: hfa384x_usbin_callback: check for hardware removed + * Staging: wlan-ng: p80211conv.c copy code from wlan-ng-devel branch to not drop packets + * Staging: wlan-ng: remove unused #include + * Staging: wlan-ng: p80211wext.c: use ARRAY_SIZE + * Staging: wlan-ng: fix compiler warnings + * Staging: wlan-ng: skb_p80211_to_ether() - payload_length is unsigned, check before subtraction + * Staging: at76_usb: update drivers/staging/at76_usb w/ mac80211 port + * Staging: at76_usb: fix build breakage + * Staging: at76_usb: remove compiler warnings + * Staging: at76_usb: fix up all remaining checkpatch.pl warnings + * Staging: at76_usb: cleanup dma on stack issues + * Staging: poch: Block size bug fix + * Staging: poch: Update TODO list + * Staging: poch: Correct pages from bytes. + * Staging: poch: minor fixes + * Staging: poch: Fix build warnings + * Staging: poch: Rx control register init + * Staging: poch: Fix user space protocol syncing + * Staging: poch: Fine grained locking + * Staging: sxg: remove typedefs + * Staging: sxg: break the build in a cleaner way when !x86 + * Staging: sxg: update README + * staging: struct device - replace bus_id with dev_name(), dev_set_name() + * Staging: echo: remove typedefs + * Staging: echo: Lindent drivers/staging/echo + * Staging: go7007: saa7134 updates + * Staging: go7007: add sensoray 2250/2251 support + * Staging: go7007: Convert driver to use video_ioctl2 + * Staging: go7007: annotate code pointers + * Staging: go7007: fix minor build warnings + * Staging: go7007: small cleanup + * Staging: go7007: add some more v4l2 ioctls + * Staging: et131x: Cleanup et131x_debug.h defines + * Staging: et131x: fix build failure + * Staging: et131x: remove unused variable in et1310_tx.c + * Staging: usbip: cleanup kerneldoc + * Staging: slicoss: use kzalloc + * Staging: slicoss: use correct type for memory allcations + * Staging: slicoss: use request_firmware + * Staging: add agnx wireless driver + * Staging: agnx: fix build errors due to ssid removal + * Staging: agnx: fix build errors due to rate control API changes + * Staging: agnx: fix build warnings + * Staging: add otus Atheros wireless network driver + * Staging: otus: fix netdev->priv usage + * Staging: otus: fix name clash + * Staging: otus: fix urb callback function type + * Staging: otus: remove dependence on kernel version + * Staging: add rt2860 wireless driver + * Staging: rt2860: disable root hack for reading files + * Staging: rt2860: fix up netdev->priv usage + * Staging: rt2860: use standard bit-reverse function + * Staging: rt2860: Fix minor compiler warnings + * Staging: rt2860: enable WPA_SUPPLICANT support + * Staging: Add ServerEngines benet 10Gb ethernet driver + * Staging: benet: fix netif api breakage + * Staging: benet: fix up netdev->priv change + * Staging: benet: build is broken unless CONFIG_NETPOLL is enabled + * Staging: benet: patch to remove subdirectories + * Staging: benet: fix build errors when CONFIG_NETPOLL is off + * Staging: benet: fix build error. + * Staging: benet: patch to use offsetof() instead of AMAP_BYTE_OFFSET() + * Staging: benet: fix problems reported by checkpatch + * Staging: benet: cleanup a check while posting rx buffers + * Staging: add comedi core + * Staging: comedi: fix up a lot of checkpatch.pl warnings + * Staging: comedi: fix checkpatch.pl errors in comedi_fops.c + * Staging: comedi: fix build error in comedilib.h + * Staging: comedi: add kcomedilib to the tree + * Staging: comedi: set up infrastructure for individual drivers + * Staging: comedi: add local copy of interrupt.h + * Staging: comedi: add pci and usb wrapper header files + * Staging: comedi: comedi driver common function module + * Staging: comedi: add mite comedi pci driver + * Staging: comedi: add usb usbdux driver + * Staging: comedi: add usb usbduxfast driver + * Staging: comedi: add usb dt9812 driver + * Staging: comedi: add comedi_bond driver + * Staging: comedi: add comedi_test driver + * Staging: comedi: add comedi_parport driver + * Staging: comedi: dt9812: fix up a lot of coding style issues + * Staging: comedi: dt9812: remove dt9812.h + * Staging: comedi: dt9812: remove typedefs + * Staging: comedi: dt9812: fix sparse warnings + * Staging: comedi: usbdux: remove kernel version checks + * Staging: comedi: usbdux: code style cleanups + * Staging: comedi: usbdux: remove // comments + * Staging: comedi: usbdux: fix up printk calls + * Staging: comedi: usbdux: remove checkpatch.pl warnings + * Staging: comedi: usbdux: remove typedef + * Staging: comedi: usbdux: remove comedi usb wrappers + * Staging: comedi: usbduxfast: remove comedi usb wrappers + * Staging: comedi: dt9812: remove #ifdef that is not needed + * Staging: comedi: remove usb wrappers + * Staging: comedi: remove PCI wrappers + * Staging: comedi: add icp_multi driver + * Staging: comedi: add me4000 driver + * Staging: comedi: fix checkpatch.pl issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_fc.c + * Staging: comedi: remove typedefs from comedi_bond.c + * Staging: comedi: fix sparse issues in comedi_bond.c + * Staging: comedi: fix checkpatch.pl issues in comedi_test.c + * Staging: comedi: fix sparse issues in comedi_test.c + * Staging: comedi: remove typedefs from comedi_test.c + * Staging: comedi: fix comedi_parport.c checkpatch.pl issues. + * Staging: comedi: fix comedi_fc.h checkpatch.pl issues. + * Staging: comedi: fix comedi_pci.h checkpatch.pl issues. + * Staging: comedi: comedi_pci.h: remove unneeded wrapper + * Staging: comedi: comedi_pci.h: remove comedi_pci_enable_no_regions + * Staging: comedi: comedi_pci.h: remove comedi_pci_disable_no_regions + * Staging: comedi: add s626 driver + * Staging: comedi: add rtd520 driver + * Staging: comedi: add me_daq driver + * Staging: comedi: me_daq: fix checkpatch.pl issues + * Staging: comedi: me_daq: remove typedefs + * Staging: comedi: me_daq: fix sparse issues + * Staging: comedi: fix checkpatch.pl warning in interrupt.h + * Staging: comedi: fix build if CONFIG_PROC_FS is not set + * Staging: add asus_oled driver + * Staging: asus_oled: fix build dependancy + * Staging: Add the Meilhaus ME-IDS driver package + * Staging: meilhaus: fix __symbol_get problems + * Staging: add lcd-panel driver + * Staging: panel: major checkpatch cleanup + * Staging: panel: remove ifdefs and code for pre-2.6 kernels + * Staging: panel: remove support for smartcards + * Staging: add Driver for Altera PCI Express Chaining DMA reference design + * Staging: add rtl8187se driver + * Staging: rtl8187se: remove unneeded files + * Staging: rtl8187se: make the built module be the proper name + * Staging: rtl8187se: remove duplicate pci ids + * Staging: me4000: switch to list_for_each*() + * Staging: usbip: switch to list_for_each_entry() + * Staging: add princeton instruments usb camera driver + * Staging: add mimio xi driver + * Staging: add rt2870 wireless driver + * Staging: rt2870: disable root hack for reading files + * Staging: rt2870: fix up netdev->priv usage + * Staging: add frontier tranzport and alphatrack drivers + * Staging: frontier: remove unused alphatrack_sysfs.c file + * Staging: frontier: fix compiler warnings + * Staging: add epl stack + * Staging: epl: run Lindent on all kernel/*.h files + * Staging: epl: run Lindent on all user/*.h files + * Staging: epl: run Lindent on *.h files + * Staging: epl: run Lindent on *.c files + * Staging: epl: hr timers all run in hard irq context now + * Staging: epl: fix netdev->priv b0rkage + * Staging: add android framework + * Staging: android: add binder driver + * Staging: android: binder: Fix gcc warnings about improper format specifiers for size_t in printk + * staging: android: binder: Fix use of euid + * Staging: android: add logging driver + * Staging: android: add ram_console driver + * Staging: android: add timed_gpio driver + * Staging: android: timed_gpio: Rename android_timed_gpio to timed_gpio + * Staging: android: remove dummy android.c driver + * Staging: android: add lowmemorykiller driver + * Staging: android: binder: fix build errors + * staging: __FUNCTION__ is gcc-specific, use __func__ + * V4L/DVB (10176a): Switch remaining clear_user_page users over to + clear_user_highpage + + [ Zhenyu Wang ] + + * agp/intel: add support for G41 chipset + + -- Tim Gardner Sun, 18 Jan 2009 20:22:54 -0700 + +linux (2.6.28-4.11) jaunty; urgency=low + + [ Mario Limonciello ] + + * SAUCE: Enable HDMI audio codec on Studio XPS 1340 + - LP: #309508 + + [ Tim Gardner ] + + * Fix armel d-i FTBSs + + [ Upstream Kernel Changes ] + + * USB: re-enable interface after driver unbinds + + -- Tim Gardner Tue, 13 Jan 2009 16:33:08 -0700 + +linux (2.6.28-4.10) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update kernel bootloader recommends: to prefer grub + - LP: #314004 + * SAUCE: don't use buggy _BCL/_BCM/_BQC for backlight control + - LP: #311716 + * SAUCE: test-suspend -- add the suspend test scripts + - LP: #316419 + + [ Colin Watson ] + + * Enable udebs for armel + + [ Tim Gardner ] + + * SAUCE: Dell laptop digital mic does not work, PCI 1028:0271 + - LP: #309508 + * Enable CIFS_XATTR=y and CONFIG_CIFS_POSIX=y + - LP: #220658 + + -- Tim Gardner Thu, 08 Jan 2009 10:38:22 -0700 + +linux (2.6.28-4.9) jaunty; urgency=low + + [ Tim Gardner ] + + * Restore DM_CRYPT, AES, ECB, and CBC as modules. This fixes + some installer issues with encrypted /home and Private directories. + * Take one more stab at building armel without module or ABI errors. + + -- Tim Gardner Tue, 06 Jan 2009 08:38:23 -0700 + +linux (2.6.28-4.8) jaunty; urgency=low + + * Fix i386/amd64 FTBS by ignoring all module and ABI changes, + not something you would normally do, but I'm sure the ABI + has not changed. This will probably also allow the ARM builds to complete. + + -- Tim Gardner Mon, 05 Jan 2009 14:42:58 -0700 + +linux (2.6.28-4.7) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_ATH5K=m for i386/amd64 + - LP: #306719 + * Build all i386/amd64 AGP/DRM components as modules. + - LP: #312721 + * git commands are now installed outside the default $PATH + Use 'git CMD' instead of 'git-CMD'. + * Build in most PATA/SATA drivers. This should allow most i386/amd64 systems to boot + without an initramfs, though some support work is still required in initramfs-tools + and grub. + - LP: #311730 + + -- Tim Gardner Fri, 02 Jan 2009 07:33:09 -0700 + +linux (2.6.28-4.6) jaunty; urgency=low + + [ Tim Gardner ] + + * Enable CONFIG_X86_E_POWERSAVER=m for i386 generic + - LP: #237405 + * Build i386 AGP drivers as modules + - LP: #312721 + * Build i386 DRM as a module + - LP: #312721 + + [ Upstream Kernel Changes ] + + * drm/i915: Add missing userland definitions for gem init/execbuffer. + - LP: #308387 + + -- Tim Gardner Mon, 29 Dec 2008 09:16:47 -0700 + +linux (2.6.28-4.5) jaunty; urgency=low + + [ Andy Whitcroft ] + + * clean up module dependancy information on package removal/purge + - LP: #300773 + + [ Tim Gardner ] + + * Update iscsitarget to 0.4.17 + * Build in ext{234} + * Build in Crypto modules AES, CBC, ECB + * Build in ACPI AC,BATTERY,BUTTON,FAN,PCI_SLOT,PROCESSOR,SBS,THERMAL,WMI + * Build in AGP intel,via,sis,ali,amd,amd64,efficeon,nvidia,sworks + * Build in ata,dev_dm,dev_loop,dev_md,dev_sd,dev_sr + * Build in BT l2cap,rfcomm,sco + * Reduce CONFIG_LEGACY_PTY_COUNT to 0 + * Build in CDROM_PKTCDVD and CHR_DEV_SG + * Build in CPU_FREQ + GOV_CONSERVATIVE,GOV_ONDEMAND,GOV_POWERSAVE,GOV_USERSPACE,STAT,TABLE + * Build in DM CRYPT,MIRROR,MULTIPATH,SNAPSHOT + * Build in DRM + * Build in HID + * Build in HOTPLUG PCI,PCIE + * Build in I2C + * Build in IEEE1394 OHCI1394 + * Build in INPUT EVDEV + * Build in IPV6 + * Build in MMC + * Build in PACKET + * Enable both IEEE1394 (Firewire) stacks as modules + - LP: #276463 + * Disable SUNRPC_REGISTER_V4 + - LP: #306016 + * Enable dm-raid4-5 + - LP: #309378 + * Build in PPP + * Build in RFKILL + * Build in USB SERIAL + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28 + + -- Tim Gardner Thu, 18 Dec 2008 21:18:44 -0700 + +linux (2.6.28-3.4) jaunty; urgency=low + + [ Tim Gardner ] + + * Build ecryptfs into the kernel + - LP: #302870 + * Deprecated gnbd + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc8 + + -- Tim Gardner Wed, 10 Dec 2008 22:45:13 -0700 + +linux (2.6.28-2.3) jaunty; urgency=low + + [ Andy Whitcroft ] + + * update the templates so that we have spaces following the title line + + [ Tim Gardner ] + + * Add upload number to kernel version signature. This has the side effect + of renaming kernel packages back to the original way, e.g., without '-ub' + in the name. + + -- Tim Gardner Thu, 04 Dec 2008 12:18:31 -0700 + +linux (2.6.28-2.2) jaunty; urgency=low + + [ Andy Whitcroft ] + + * Revert "SAUCE: (no-up) version: Implement version_signature proc file." + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: serial: RS485 ioctl structure uses __u32 include linux/types.h + - LP: #303711 + + [ Tim Gardner ] + + * UBUNTU: Removed CONFIG_DRM_VIA_CHROME9 since it is upstream. + * UBUNTU: Removed ubuntu/via_chrome9 + + [ Upstream Kernel Changes ] + + * Rebased to v2.6.28-rc7 + + -- Tim Gardner Tue, 02 Dec 2008 07:33:32 -0700 + +linux (2.6.28-1.1) jaunty; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + * SAUCE: Adds support for COMPAL JHL90 webcam + * Map armel to arm to all editconfigs to work correctly + * Add armel to getabis for completeness sake + * Add -ub to our versioning to allow kerneloops.org to identify us + + [ Andy Whitcroft ] + + * Fix Vcs-Git path for the kernel repository. + - LP: #296915 + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + - LP: #159241 + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * SAUCE: (no-up) Export lookup_has for aufs + * SAUCE: (no-up) Modularize vesafb + * ubuntu: Config files + * Disable some modules that need porting to 2.6.28 + * ubuntu: Fixup headers creation to include arch/*/include + * ubuntu/module-check: Ignore comment lines + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ cking ] + + * SAUCE: Enable speedstep for sonoma processors. + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: cx88: Support Leadtek WinFast DTV2000 H version J. + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + * SAUCE: appleir: Enable driver for new MacBook Pro + + [ Colin Watson ] + + * Enable configfs, fuse, jfs, reiserfs, and xfs for armel + * Extend debian/d-i/ modules handling to make armel easier to support + * Create udebs for armel + + [ Fabio M. Di Nitto ] + + * ubuntu: update GFS Cluster File System + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + * Add Dell Dimension 9200 reboot quirk + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + * SAUCE: Revert aufs changes from AppArmor merge + + [ Mohamed Abbas ] + + * SAUCE: iwlagn -- fix rfkill when on when driver loaded + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * gfs1: GFS1 can't create more than 4kb file + * uvcvideo: Commit streaming parameters when enabling the video stream. + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + * SAUCE: Update Wacom tablet driver to 1.49 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + * SAUCE: ipw2200: change default policy for auto-associate + * Dell Wireless 365 needs BTUSB_RESET quirk. + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + * Disabled ubuntu/e1000e config + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * Revert "x86, early_ioremap: fix fencepost error" + * mac80211: fix two issues in debugfs + * iwl3945: do not send scan command if channel count zero + + -- Ben Collins Fri, 07 Nov 2008 09:37:42 -0700 + +linux (2.6.27-8.17) intrepid-proposed; urgency=low + + [ John W. Linville ] + + * SAUCE: iwlagn: avoid sleep in softirq context + -LP: #286285 + + [ Tim Gardner ] + + * Dell Wireless 365 needs BTUSB_RESET quirk. + - LP: #293670 + * SAUCE: ALSA: hda: make a STAC_DELL_EQ option (version 2) + - LP: #293271 + + [ Upstream Kernel Changes ] + + * iwlagn: downgrade BUG_ON in interrupt + * Input: atkbd - expand Latitude's force release quirk to other Dells + * fbcon_set_all_vcs: fix kernel crash when switching the rotated consoles + * modules: fix module "notes" kobject leak + * Driver core: Fix cleanup in device_create_vargs(). + * Driver core: Clarify device cleanup. + * ath9k/mac80211: disallow fragmentation in ath9k, report to userspace + * md: Fix rdev_size_store with size == 0 + * xfs: fix remount rw with unrecognized options + * OHCI: Allow broken controllers to auto-stop + * USB: OHCI: fix endless polling behavior + * USB: Fix s3c2410_udc usb speed handling + * USB: EHCI: log a warning if ehci-hcd is not loaded first + * usb gadget: cdc ethernet notification bugfix + * usb: musb_hdrc build fixes + * drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831) + * DVB: au0828: add support for another USB id for Hauppauge HVR950Q + * DVB: sms1xxx: support two new revisions of the Hauppauge WinTV + MiniStick + * security: avoid calling a NULL function pointer in + drivers/video/tvaudio.c + * Linux 2.6.27.3 + -LP: #294152 + + * gpiolib: fix oops in gpio_get_value_cansleep() + * edac cell: fix incorrect edac_mode + * x86 ACPI: fix breakage of resume on 64-bit UP systems with SMP kernel + * sched: fix the wrong mask_len + * USB: cdc-wdm: make module autoload work + * USB: don't rebind drivers after failed resume or reset + * USB: fix memory leak in cdc-acm + * USB: Speedtouch: add pre_reset and post_reset routines + * dm kcopyd: avoid queue shuffle + * dm snapshot: fix primary_pe race + * amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errors + * CIFS: fix saving of resume key before CIFSFindNext + * netfilter: xt_iprange: fix range inversion match + * netfilter: snmp nat leaks memory in case of failure + * netfilter: restore lost ifdef guarding defrag exception + * anon_vma_prepare: properly lock even newly allocated entries + * hvc_console: Fix free_irq in spinlocked section + * ACPI Suspend: Enable ACPI during resume if SCI_EN is not set + * ACPI suspend: Blacklist HP xw4600 Workstation for old code ordering + * ACPI suspend: Always use the 32-bit waking vector + * proc: fix vma display mismatch between /proc/pid/{maps,smaps} + * SCSI: scsi_dh: add Dell product information into rdac device handler + * PCI hotplug: cpqphp: fix kernel NULL pointer dereference + * V4L/DVB (9300): pvrusb2: Fix deadlock problem + * Linux 2.6.27.4 + -LP: #294155 + + -- Tim Gardner Tue, 04 Nov 2008 12:16:07 -0700 + +linux (2.6.27-7.16) intrepid-security; urgency=low + + [ Tim Gardner ] + + * ndiswrapper remote buffer overflows on long ESSIDs (CVE 2008-4395) + - LP: #275860 + + [ Upstream Kernel Changes ] + + * ext[234]: Avoid printk floods in the face of directory corruption + (CVE-2008-3528) + + -- Tim Gardner Mon, 03 Nov 2008 13:34:42 -0700 + +linux (2.6.27-7.15) intrepid-security; urgency=low + + [ Upstream Kernel Changes ] + + * tcp: Restore ordering of TCP options for the sake of inter-operability + - LP: #264019 + + -- Tim Gardner Mon, 27 Oct 2008 19:28:06 -0600 + +linux (2.6.27-7.14) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable ath5k in 2.6.27 + - LP: #288148 + + -- Tim Gardner Thu, 23 Oct 2008 07:40:43 -0600 + +linux (2.6.27-7.13) intrepid; urgency=low + + [ Stefan Bader ] + + * gfs1: GFS1 can't create more than 4kb file + + [ Tim Gardner ] + + * Revert "SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors + bitmap.". Use upstream commit to avoid future conflicts. + * Revert "STABLE queue: mac80211: fix two issues in debugfs". + Use upstream commit to avoid future conflicts. + * Revert "x86, early_ioremap: fix fencepost error" + Use upstream commit to avoid future conflicts. + + [ Upstream Kernel Changes ] + + * sched_rt.c: resch needed in rt_rq_enqueue() for the root rt_rq + * x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + * mac80211: fix two issues in debugfs + * Fix barrier fail detection in XFS + * tty: Termios locking - sort out real_tty confusions and lock reads + * CIFS: make sure we have the right resume info before calling + CIFSFindNext + * rfkill: update LEDs for all state changes + * libertas: clear current command on card removal + * b43legacy: Fix failure in rate-adjustment mechanism + * x86, early_ioremap: fix fencepost error + * x86: SB450: skip IRQ0 override if it is not routed to INT2 of IOAPIC + * x86: improve UP kernel when CPU-hotplug and SMP is enabled + * sky2: Fix WOL regression + * netdrvr: atl1e: Don't take the mdio_lock in atl1e_probe + * Linux 2.6.27.2 + + [ Amit Kucheria ] + + * Ubuntu: agp: Fix stolen memory counting on G4X. + -LP: 285572 + + [ Scott Remnant ] + + * add MODULE_ALIAS to load ipmi_devintf with ipmi_si + + -- Tim Gardner Sun, 19 Oct 2008 10:06:21 -0600 + +linux (2.6.27-7.12) intrepid; urgency=low + + [ Chuck Short ] + + * xen: Add xen modules to virtual flavours. + + [ Mario Limonciello ] + + * SAUCE: Add back in lost commit for Apple BT Wireless Keyboard + - LP: #162083 + + [ Tim Gardner ] + + * Remove depmod created files from packages. + - LP: #250511 + * Changed default TCP congestion algorithm to 'cubic' (again) + - LP: #278801 + * Update configs for 'disable CONFIG_DYNAMIC_FTRACE' + - LP: #263555 + + [ Upstream Kernel Changes ] + + * x86: register a platform RTC device if PNP doesn't describe it + * disable CONFIG_DYNAMIC_FTRACE due to possible memory corruption on + module unload + + -- Tim Gardner Fri, 17 Oct 2008 11:25:39 -0600 + +linux (2.6.27-7.11) intrepid; urgency=low + + [ Amit Kucheria ] + + * STABLE queue: mac80211: fix two issues in debugfs + - LP: #275227 + * SAUCE: Adds support for COMPAL JHL90 webcam + + [ Ben Collins ] + + * SAUCE: (no-up) x86: Quiet "Kernel alive" messages + - LP: #39985 + * SAUCE: (no-up) Modularize vesafb + * build/config: Enable vesafb module + * build: Switch to vesafb as preferred. + + [ Leann Ogasawara ] + + * Add Dell Dimension 9200 reboot quirk + - LP: #271370 + + [ Michael Haas ] + + * SAUCE: Revert aufs changes from AppArmor merge + + [ Tim Gardner ] + + * fix virtio udeb layout + - LP: #257739 + * Enabled CONFIG_EXT4DEV_FS=m + * Changed default TCP congestion algorithm to 'cubic' + - LP: #278801 + * SAUCE: ipw2200: change default policy for auto-associate + - LP: #264104 + + [ Upstream Kernel Changes ] + + * x86, early_ioremap: fix fencepost error + - LP: #263543 + + -- Tim Gardner Sat, 11 Oct 2008 08:07:42 -0600 + +linux (2.6.27-7.10) intrepid; urgency=low + + [ Alexey Starikovskiy ] + + * SAUCE: ACPI: EC: do transaction from interrupt context + - LP: #277802 + + [ Ben Collins ] + + * build/d-i: Change virtio-modules udeb to prio standard + + [ Colin Ian King ] + + * SAUCE: Blacklist IBM 2656 in serio/i8042 + - LP: #21558 + + [ Henrik Rydberg ] + + * Revert "SAUCE: applesmc: Add MacBookAir" + * SAUCE: [PATCH 1/5] hwmon: applesmc: Specified number of bytes to read + should match actual + * SAUCE: [PATCH 2/5] hwmon: applesmc: Fix the 'wait status failed: c != + 8' problem + * SAUCE: [PATCH 3/5] hwmon: applesmc: Prolong status wait + * SAUCE: [PATCH 4/5] hwmon: applesmc: Allow for variable ALV0 and ALV1 + package length + * SAUCE: [PATCH 5/5] hwmon: applesmc: Add support for Macbook Air + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 4 + * SAUCE: hwmon: applesmc: Add support for Macbook Pro 3 + * SAUCE: hwmon: applesmc: Lighter wait mechanism, drastic improvement + + [ Leann Ogasawara ] + + * Add automatic model setting for Samsung Q45 + - LP: #200210 + + [ Tim Gardner ] + + * SAUCE: Correctly blacklist Thinkpad r40e in ACPI + - LP: #278794 + * SAUCE: Update Wacom tablet driver to 1.49 + - LP: #260675 + * SAUCE: ALPS touchpad for Dell Latitude E6500/E6400 + - LP: #270643 + * SAUCE: Fix Wacom tablet 1.49 porting errors + * SAUCE: Enable an e1000e Intel Corporation 82567 Gigabit controller + * SAUCE: Fix Oops in wlan_setup + - LP: #263309 + + [ Upstream Kernel Changes ] + + * ath9k: fix oops on trying to hold the wrong spinlock + * [Bluetooth] Fix double frees on error paths of btusb and bpa10x drivers + * [Bluetooth] Add reset quirk for new Targus and Belkin dongles + * [Bluetooth] Add reset quirk for A-Link BlueUSB21 dongle + * Revert "ax25: Fix std timer socket destroy handling." + * ax25: Quick fix for making sure unaccepted sockets get destroyed. + * netrom: Fix sock_orphan() use in nr_release + * Revert "V4L/DVB (8904): cx88: add missing unlock_kernel" + * SLOB: fix bogus ksize calculation + * net: only invoke dev->change_rx_flags when device is UP + * tcp: Fix possible double-ack w/ user dma + * net: Fix netdev_run_todo dead-lock + * tcp: Fix tcp_hybla zero congestion window growth with small rho and large cwnd. + * [MIPS] Sibyte: Register PIO PATA device only for Swarm and Litte Sur + * eeepc-laptop: Fix hwmon interface + * hwmon: (it87) Prevent power-off on Shuttle SN68PT + * hwmon: Define sysfs interface for energy consumption register + * hwmon: (adt7473) Fix some bogosity in documentation file + * hwmon: (abituguru3) Enable reading from AUX3 fan on Abit AT8 32X + * hwmon: (abituguru3) Enable DMI probing feature on Abit AT8 32X + * [CPUFREQ] correct broken links and email addresses + * SLOB: fix bogus ksize calculation fix + * Don't allow splice() to files opened with O_APPEND + * Linux 2.6.27 + + -- Tim Gardner Wed, 08 Oct 2008 21:19:34 -0600 + +linux (2.6.27-6.9) intrepid; urgency=low + + [ Kees Cook ] + + * SAUCE: AppArmor: update to upstream subversion r1302 + - LP: #269921 + + [ Stefan Bader ] + + * Update configuration files to be compliant to desktop specs + - LP: #279019 + + [ Tim Gardner ] + + * Add support in e1000e for a couple of ICH10 PCI IDs + * Enable CONFIG_INPUT_PCSPKR=m + - LP: #275453 + + [ Upstream Kernel Changes ] + + * V4L/DVB (8559a): Fix a merge conflict at gspca/sonixb + * V4L/DVB (8789): wm8739: remove wrong kfree + * V4L/DVB (8883): w9968cf: Fix order of usb_alloc_urb validation + * V4L/DVB (8884): em28xx-audio: fix memory leak + * V4L/DVB (8885): cpia2_usb: fix memory leak + * V4L/DVB (8886): ov511: fix memory leak + * V4L/DVB (8887): gspca: fix memory leak + * V4L/DVB (8892): pvrusb2: Handle USB ID 2040:2950 same as 2040:2900 + * V4L/DVB (8904): cx88: add missing unlock_kernel + * V4L/DVB (8905): ov511: fix exposure sysfs attribute bug + * V4L/DVB (8909): gspca: PAC 7302 webcam 093a:262a added. + * hrtimer: migrate pending list on cpu offline + * hrtimer: fix migration of CB_IRQSAFE_NO_SOFTIRQ hrtimers + * hrtimer: mark migration state + * hrtimer: prevent migration of per CPU hrtimers + * [IA64] Put the space for cpu0 per-cpu area into .data section + * powerpc: Fix PCI in Holly device tree + * powerpc: Fix failure to shutdown with CPU hotplug + * mfd: Fix Kconfig accroding to the new gpiolib symbols + * mfd: Fix asic3 compilation + * x86: fix typo in enable_mtrr_cleanup early parameter + * ipsec: Fix pskb_expand_head corruption in xfrm_state_check_space + * iucv: Fix mismerge again. + * ALSA: ASoC: Fix cs4270 error path + * ALSA: hda - Fix model for Dell Inspiron 1525 + * sctp: Fix kernel panic while process protocol violation parameter + * x86: Fix broken LDT access in VMI + * x86, vmi: fix broken LDT access + * tcp: Fix NULL dereference in tcp_4_send_ack() + * ipv6: NULL pointer dereferrence in tcp_v6_send_ack + * XFRM,IPv6: initialize ip6_dst_blackhole_ops.kmem_cachep + * af_key: Free dumping state on socket close + * dm: always allow one page in dm_merge_bvec + * dm: cope with access beyond end of device in dm_merge_bvec + * dm mpath: add missing path switching locking + * MN10300: Fix IRQ handling + * pxa2xx_spi: fix build breakage + * e1000e: write protect ICHx NVM to prevent malicious write/erase + * powerpc: Fix boot hang regression on MPC8544DS + * ASoC: Set correct name for WM8753 rec mixer output + * ALSA: snd-powermac: mixers for PowerMac G4 AGP + * ALSA: snd-powermac: HP detection for 1st iMac G3 SL + * fbcon: fix monochrome color value calculation + * inotify: fix lock ordering wrt do_page_fault's mmap_sem + * braille_console: only register notifiers when the braille console is used + * fix error-path NULL deref in alloc_posix_timer() + * memory hotplug: missing zone->lock in test_pages_isolated() + * mm: tiny-shmem nommu fix + * mm: handle initialising compound pages at orders greater than MAX_ORDER + * e1000e: reset swflag after resetting hardware + * e1000e: do not ever sleep in interrupt context + * e1000e: remove phy read from inside spinlock + * e1000e: drop stats lock + * e1000e: debug contention on NVM SWFLAG + * e1000e: update version from k4 to k6 + * Check mapped ranges on sysfs resource files + * e1000e: Fix incorrect debug warning + * [MIPS] Build fix: Fix irq flags type + * [MIPS] SMTC: Build fix: Fix filename in Makefile + * [MIPS] SMTC: Fix holes in SMTC and FPU affinity support. + * [MIPS] SMTC: Close tiny holes in the SMTC IPI replay system. + * [MIPS] SMTC: Fix SMTC dyntick support. + * [S390] nohz: Fix __udelay. + * [S390] qdio: prevent stack clobber + * Fix init/main.c to use regular printk with '%pF' for initcall fn + * x86 setup: correct segfault in generation of 32-bit reloc kernel + * selinux: Fix an uninitialized variable BUG/panic in selinux_secattr_to_sid() + * rtc: fix kernel panic on second use of SIGIO nofitication + * fbdev: fix recursive notifier and locking when fbdev console is blanked + * orion_spi: fix handling of default transfer speed + * include/linux/stacktrace.h: declare struct task_struct + * cpusets: remove pj from cpuset maintainers + * MAINTAINERS: add mailing list for man-pages + * SubmitChecklist: interfaces changes should CC linux-api@ + * Documentation/HOWTO: info about interface changes should CC linux-api@vger + * dw_dmac: fix copy/paste bug in tasklet + * leds-fsg: change order of initialization and deinitialization + * leds-pca955x: add proper error handling and fix bogus memory handling + * ACPI: Make /proc/acpi/wakeup interface handle PCI devices (again) + * clockevents: check broadcast tick device not the clock events device + * V4L/DVB (8919): cx18: Fix tuner audio input for Compro H900 cards + * V4L/DVB (8926): gspca: Bad fix of leak memory (changeset 43d2ead315b1). + * V4L/DVB (8933): gspca: Disable light frquency for zc3xx cs2102 Kokom. + * V4L/DVB (8935): em28xx-cards: Remove duplicate entry (EM2800_BOARD_KWORLD_USB2800) + * V4L/DVB (8955): bttv: Prevent NULL pointer dereference in radio_open + * V4L/DVB (8957): zr36067: Restore the default pixel format + * V4L/DVB (8958): zr36067: Return proper bytes-per-line value + * V4L/DVB (8960): drivers/media/video/cafe_ccic.c needs mm.h + * V4L/DVB (8961): zr36067: Fix RGBR pixel format + * V4L/DVB (8963): s2255drv field count fix + * V4L/DVB (8967): Use correct XC3028L firmware for AMD ATI TV Wonder 600 + * V4L/DVB (8978): sms1xxx: fix product name for Hauppauge WinTV MiniStick + * V4L/DVB (8979): sms1xxx: Add new USB product ID for Hauppauge WinTV MiniStick + * V4L/DVB (9029): Fix deadlock in demux code + * V4L/DVB (9037): Fix support for Hauppauge Nova-S SE + * V4L/DVB (9043): S5H1420: Fix size of shadow-array to avoid overflow + * V4L/DVB (9053): fix buffer overflow in uvc-video + * V4L/DVB (9075): gspca: Bad check of returned status in i2c_read() spca561. + * V4L/DVB (9080): gspca: Add a delay after writing to the sonixj sensors. + * V4L/DVB (9092): gspca: Bad init values for sonixj ov7660. + * V4L/DVB (9099): em28xx: Add detection for K-WORLD DVB-T 310U + * V4L/DVB (9103): em28xx: HVR-900 B3C0 - fix audio clicking issue + * x86: gart iommu have direct mapping when agp is present too + * ide-cd: temporary tray close fix + * ide-dma: fix ide_build_dmatable() for TRM290 + * IDE: Fix platform device registration in Swarm IDE driver (v2) + * ide-cd: Optiarc DVD RW AD-7200A does play audio + * ide: workaround for bogus gcc warning in ide_sysfs_register_port() + * [MIPS] Fix CMP Kconfig configuration and mark as broken. + * [MIPS] IP27: Fix build errors if CONFIG_MAPPED_KERNEL=y + * x86 ACPI: Blacklist two HP machines with buggy BIOSes + * kgdb, x86: Avoid invoking kgdb_nmicallback twice per NMI + * kgdb: call touch_softlockup_watchdog on resume + * atmel-mci: Initialize BLKR before sending data transfer command + * Marker depmod fix core kernel list + * Linux 2.6.27-rc9 + + -- Tim Gardner Sun, 05 Oct 2008 21:27:49 -0600 + +linux (2.6.27-5.8) intrepid; urgency=low + + [ Amit Kucheria ] + + * Update AUFS-related Kconfig + - LP: #264048 + + [ Michael Haas ] + + * add proper aufs source tree from 20080922 + * Fix AUFS compilation in vfsub.c + * Add splice-2.6.23.patch from AUFS to export a symbol needed by AUFS + * Add put_filp.patch from AUFS to export a symbol needed by AUFS + * apply (modified) lhash.patch from AUFS to export __lookup_hash() + * Add deny_write_access.patch from AUFS - export deny_write_access + * Add sec_perm-2.6.24.patch from AUFS - export security_inode_permission + * make sure TMPFS_MAGIC is defined in AUFS Makefile + + [ Tim Gardner ] + + * Enabled CONFIG_IPWIRELESS + - LP: #274748 + * Enabled CONFIG_E1000E, disabled CONFIG_E1000E_NEW + This takes advantage of the upstream NVM protection fix in + commit 4a7703582836f55a1cbad0e2c1c6ebbee3f9b3a7. + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + * [SCSI] qla2xxx: Defer enablement of RISC interrupts until ISP + initialization completes. + * PCI: Fix pcie_aspm=force + * PCI: fix compiler warnings in pci_get_subsys() + * UBIFS: create the name of the background thread in every case + * UBIFS: TNC / GC race fixes + * UBIFS: remove incorrect assert + * UBIFS: fix printk format warnings + * AMD IOMMU: set iommu sunc flag after command queuing + * AMD IOMMU: protect completion wait loop with iommu lock + * sparc64: Fix disappearing PCI devices on e3500. + * x86, oprofile: BUG scheduling while atomic + * ALSA: ASoC: Fix at32-pcm build breakage with PM enabled + * ath9k: connectivity is lost after Group rekeying is done + * wireless: zd1211rw: add device ID fix wifi dongle "trust nw-3100" + * [IA64] Ski simulator doesn't need check_sal_cache_flush + * [IA64] kexec fails on systems with blocks of uncached memory + * ath9k: Fix IRQ nobody cared issue with ath9k + * [Bluetooth] Fix I/O errors on MacBooks with Broadcom chips + * [Bluetooth] Fix wrong URB handling of btusb driver + * [Bluetooth] Fix USB disconnect handling of btusb driver + * sparc64: Fix missing devices due to PCI bridge test in + of_create_pci_dev(). + * [WATCHDOG] ibmasr: remove unnecessary spin_unlock() + * [WATCHDOG] wdt285: fix sparse warnings + * [WATCHDOG] unlocked_ioctl changes + * x86: fix 27-rc crash on vsmp due to paravirt during module load + * sched: fix init_hrtick() section mismatch warning + * clockevents: prevent cpu online to interfere with nohz + * x86: prevent stale state of c1e_mask across CPU offline/online + * clockevents: prevent stale tick_next_period for onlining CPUs + * clockevents: check broadcast device not tick device + * clockevents: prevent mode mismatch on cpu online + * x86: prevent C-states hang on AMD C1E enabled machines + * x86: c1e_idle: don't mark TSC unstable if CPU has invariant TSC + * timers: fix build error in !oneshot case + * ALSA: ASoC: maintainers - update email address for Liam Girdwood + * ibmasr: remove unnecessary spin_unlock() + * smb.h: do not include linux/time.h in userspace + * kernel-doc: allow structs whose members are all private + * kexec: fix segmentation fault in kimage_add_entry + * Documentation/DMA-mapping.txt: update for pci_dma_mapping_error() + changes + * sys_paccept: disable paccept() until API design is resolved + * mm: tiny-shmem fix lock ordering: mmap_sem vs i_mutex + * Documentation/sysctl/kernel.txt: fix softlockup_thresh description + * memcg: check under limit at shrink_usage + * atmel_serial: update the powersave handler to match serial core + * [SCSI] Fix hang with split requests + * USB Storage: Sierra: Non-configurable TRU-Install + * USB Serial: Sierra: Device addition & version rev + * USB: ehci: fix some ehci hangs and crashes + * USB: Fix the Nokia 6300 storage-mode. + * USB: Correct Sierra Wireless USB EVDO Modem Device ID + * USB: fix hcd interrupt disabling + * USB: update of Documentation/usb/anchors.txt + * usb gadget: fix omap_udc DMA regression + * USB: Fixing Nokia 3310c in storage mode + * usb: musb: fix include path + * USB: fix EHCI periodic transfers + * usb-serial: Add Siemens EF81 to PL-2303 hack triggers + * USB: SERIAL CP2101 add device IDs + * USB: unusual_devs addition for RockChip MP3 player + * USB: fsl_usb2_udc: fix VDBG() format string + * usb serial: ti_usb_3410_5052 obviously broken by firmware changes + * USB: ftdi_sio: Add 0x5050/0x0900 USB IDs (Papouch Quido USB 4/4) + * USB: serial: add ZTE CDMA Tech id to option driver + * USB Serial: Sierra: Add MC8785 VID/PID + * USB: drivers/usb/musb/: disable it on SuperH + * usb: ftdi_sio: add support for Domintell devices + * usb: unusual devs patch for Nokia 5310 Music Xpress + * USB: revert recovery from transient errors + * [MIPS] au1000: Fix gpio direction + * [MIPS] Fixe the definition of PTRS_PER_PGD + * x86: prevent stale state of c1e_mask across CPU offline/online, fix + * x86: disable apm on the olpc + * i2c-powermac: Fix section for probe and remove functions + * i2c-dev: Return correct error code on class_create() failure + * i2c: Fix mailing lists in two MAINTAINERS entries + * ath9k: disable MIB interrupts to fix interrupt storm + * 9p: implement proper trans module refcounting and unregistration + * 9p-trans_fd: fix trans_fd::p9_conn_destroy() + * 9p-trans_fd: clean up p9_conn_create() + * 9p-trans_fd: don't do fs segment mangling in p9_fd_poll() + * 9p-trans_fd: fix and clean up module init/exit paths + * 9p: introduce missing kfree + * 9p: use an IS_ERR test rather than a NULL test + * 9p: fix put_data error handling + * netfilter: ip6t_{hbh,dst}: Rejects not-strict mode on rule insertion + * MN10300: Move asm-arm/cnt32_to_63.h to include/linux/ + * MN10300: Make sched_clock() report time since boot + * ALSA: fix locking in snd_pcm_open*() and snd_rawmidi_open*() + * ALSA: remove unneeded power_mutex lock in snd_pcm_drop + * IPoIB: Fix crash when path record fails after path flush + * [XFS] Fix extent list corruption in xfs_iext_irec_compact_full(). + * [XFS] Remove xfs_iext_irec_compact_full() + * kgdb: could not write to the last of valid memory with kgdb + * kgdb, x86, arm, mips, powerpc: ignore user space single stepping + * kgdb, x86_64: gdb serial has BX and DX reversed + * kgdb, x86_64: fix PS CS SS registers in gdb serial + * kgdboc,tty: Fix tty polling search to use name correctly + * ARM: Delete ARM's own cnt32_to_63.h + * m32r: remove the unused NOHIGHMEM option + * m32r: don't offer CONFIG_ISA + * m32r: export empty_zero_page + * m32r: export __ndelay + * m32r/kernel/: cleanups + * [MIPS] au1000: Make sure GPIO value is zero or one + * [MIPS] IP27: Switch to dynamic interrupt routing avoding panic on + error. + * [MIPS] BCM47xx: Fix build error due to missing PCI functions + * [SSB] Initialise dma_mask for SSB_BUSTYPE_SSB devices + * Swarm: Fix crash due to missing initialization + * ide-tape: fix vendor strings + * ide: note that IDE generic may prevent other drivers from attaching + * cdrom: update ioctl documentation + * [SCSI] qlogicpti: fix sg list traversal error in continuation entries + * sata_nv: reinstate nv_hardreset() for non generic controllers + * scsi: fix fall out of sg-chaining patch in qlogicpti + * ALSA: make the CS4270 driver a new-style I2C driver + * ALSA: ASoC: Fix another cs4270 error path + * Fix NULL pointer dereference in proc_sys_compare + * kconfig: fix silentoldconfig + * kconfig: readd lost change count + * mm owner: fix race between swapoff and exit + * Linux 2.6.27-rc8 + * e1000e: write protect ICHx NVM to prevent malicious write/erase + + -- Amit Kucheria Tue, 30 Sep 2008 18:22:35 +0300 + +linux (2.6.27-4.7) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add gfs1 to perm blacklist + * build/abi: Ignored changes in gfs2 symbols + + [ Fabio M. Di Nitto ] + + * Revert "SAUCE: Export gfs2 symbols required for gfs1 kernel module" + * ubuntu: update GFS Cluster File System + + [ Stefan Bader ] + + * SAUCE: x86: Reserve FIRST_DEVICE_VECTOR in used_vectors bitmap. + - LP: #276334 + + [ Tim Gardner ] + + * Revert "Disable e1000e until the NVRAM corruption problem is found." + * Add atl1e and atl2 to Debian installer bits + - LP: #273904 + * SAUCE: e1000e: Map NV RAM dynamically only when needed. + - LP: #263555 + + -- Tim Gardner Fri, 26 Sep 2008 20:51:22 -0600 + +linux (2.6.27-4.6) intrepid; urgency=low + + [ Tim Gardner ] + + * Disable e1000e until the NVRAM corruption problem is found. + - LP: #263555 + + [ Upstream Kernel Changes ] + + * Revert "[Bluetooth] Eliminate checks for impossible conditions in IRQ + handler" + + -- Ben Collins Tue, 23 Sep 2008 09:53:57 -0400 + +linux (2.6.27-4.5) intrepid; urgency=low + + [ Upstream Kernel Changes ] + + * Revert "b43/b43legacy: add RFKILL_STATE_HARD_BLOCKED support" + * udf: Fix lock inversion between iprune_mutex and alloc_mutex (v2) + * udf: Fix error paths in udf_new_inode() + * [SCSI] sd: select CRC_T10DIF only when necessary + * [SCSI] zfcp: Fix request queue locking + * [SCSI] zfcp: Correctly query end flag in gpn_ft response + * [SCSI] zfcp: Simplify ccw notify handler + * [SCSI] zfcp: Fix reference counter for remote ports + * [SCSI] zfcp: channel cannot be detached due to refcount imbalance + * [SCSI] zfcp: Remove duplicated unlikely() macros. + * [SCSI] scsi_dh: make check_sense return ADD_TO_MLQUEUE + * [SCSI] make scsi_check_sense HARDWARE_ERROR return ADD_TO_MLQUEUE on + retry + * [SCSI] fix check of PQ and PDT bits for WLUNs + * pcm037: add rts/cts support for serial port + * i.MX serial: fix init failure + * imx serial: set RXD mux bit on i.MX27 and i.MX31 + * imx serial: fix rts handling for non imx1 based hardware + * mlx4_core: Set RAE and init mtt_sz field in FRMR MPT entries + * udf: add llseek method + * PCI/iommu: blacklist DMAR on Intel G31/G33 chipsets + * PCI: Fix printk warnings in probe.c + * PCI: Fix printk warnings in setup-bus.c + * PCI Hotplug: fakephp: fix deadlock... again + * clockevents: remove WARN_ON which was used to gather information + * ocfs2: Fix a bug in direct IO read. + * arch/x86/kernel/kdebugfs.c: introduce missing kfree + * [IA64] fix compile failure with non modular builds + * [IA64] fix up bte.h + * [IA64] arch/ia64/sn/pci/tioca_provider.c: introduce missing kfree + * PCI: fix pciehp_free_irq() + * [IA64] prevent ia64 from invoking irq handlers on offline CPUs + * ide: Fix pointer arithmetic in hpt3xx driver code (3rd try) + * add deprecated ide-scsi to feature-removal-schedule.txt + * swiotlb: fix back-off path when memory allocation fails + * sparc64: Fix interrupt register calculations on Psycho and Sabre. + * VIDEO_SH_MOBILE_CEU should depend on HAS_DMA + * m68k: Update defconfigs for 2.6.27-rc6 + * sparc32: Fix function signature of of_bus_sbus_get_flags(). + * sched: fix 2.6.27-rc5 couldn't boot on tulsa machine randomly + * sched: fix deadlock in setting scheduler parameter to zero + * KVM: SVM: fix random segfaults with NPT enabled + * KVM: SVM: fix guest global tlb flushes with NPT + * KVM: VMX: Always return old for clear_flush_young() when using EPT + * clocksource, acpi_pm.c: fix check for monotonicity + * [ARM] OMAP: Fix MMC device data + * block: disable sysfs parts of the disk command filter + * ath9k: Assign seq# when mac80211 requests this + * sg: disable interrupts inside sg_copy_buffer + * MN10300: Change the fault handler to check in_atomic() not + in_interrupt() + * [Bluetooth] Fix regression from using default link policy + * netlink: fix overrun in attribute iteration + * x86: fix possible x86_64 and EFI regression + * sparc64: Fix PCI error interrupt registry on PSYCHO. + * sparc: Fix user_regset 'n' field values. + * niu: panic on reset + * PCI: re-add debug prints for unmodified BARs + * [ARM] 5245/1: Fix warning about unused return value in drivers/pcmcia + * [ARM] 5246/1: tosa: add proper clock alias for tc6393xb clock + * [ARM] 5247/1: tosa: SW_EAR_IN support + * [ARM] Fix PCI_DMA_BUS_IS_PHYS for ARM + * ata: duplicate variable sparse warning + * sata_inic162x: enable LED blinking + * [libata] LBA28/LBA48 off-by-one bug in ata.h + * proc: more debugging for "already registered" case + * include/linux/ioport.h: add missing macro argument for devm_release_* + family + * cpuset: avoid changing cpuset's cpus when -errno returned + * cpuset: hotplug documentation fix + * coredump_filter: add description of bit 4 + * bfs: fix Lockdep warning + * mm: ifdef Quicklists in /proc/meminfo + * spi_mpc83xx: fix clockrate calculation for low speed + * spi_mpc83xx: reject invalid transfer sizes + * pxa2xx_spi: chipselect bugfixes + * pxa2xx_spi: dma bugfixes + * mm: mark the correct zone as full when scanning zonelists + * Documentation/ABI: /sys/class/gpio + * MAINTAINERS: fix USB VIDEO CLASS mail list address + * ia64: fix panic during `modprobe -r xpc' + * atmel_lcdfb: disable LCD and DMA engines when suspending + * spi_s3c24xx: fix section warning + * rescan_partitions(): make device capacity errors non-fatal + * memstick: fix MSProHG 8-bit interface mode support + * Add Uwe Kleine-König to .mailmap + * xen: fix for xen guest with mem > 3.7G + * x86/paravirt: Remove duplicate paravirt_pagetable_setup_{start, done}() + * crypto: talitos - Avoid consecutive packets going out with same IV + * slub: fixed uninitialized counter in struct kmem_cache_node + * udp: Fix rcv socket locking + * IB/mlx4: Fix up fast register page list format + * [MIPS] VR41xx: unsigned irq cannot be negative + * x86: completely disable NOPL on 32 bits + * [S390] cio: Fix driver_data handling for ccwgroup devices. + * [S390] cio: fix orb initialization in cio_start_key + * sparc64: Fix OOPS in psycho_pcierr_intr_other(). + * sparc64: Fix SMP bootup with CONFIG_STACK_DEBUG or ftrace. + * RDMA/nes: Fix client side QP destroy + * IPoIB: Fix deadlock on RTNL between bcast join comp and ipoib_stop() + * clockevents: make device shutdown robust + * powerpc: Fix interrupt values for DMA2 in MPC8610 HPCD device tree + * hpplus: fix build regression + * Fix PNP build failure, bugzilla #11276 + * warn: Turn the netdev timeout WARN_ON() into a WARN() + * [XFS] Move memory allocations for log tracing out of the critical path + * [XFS] Fix regression introduced by remount fixup + * [XFS] Prevent direct I/O from mapping extents beyond eof + * [XFS] Fix barrier status change detection. + * [XFS] Prevent lockdep false positives when locking two inodes. + * [XFS] Fix use-after-free with buffers + * [XFS] Don't do I/O beyond eof when unreserving space + * powerpc: Holly board needs dtbImage target + * Fix compile failure with non modular builds + * [ARM] 5249/1: davinci: remove redundant check in davinci_psc_config() + * [ARM] omap: back out 'internal_clock' support + * sctp: set the skb->ip_summed correctly when sending over loopback. + * [ARM] 5255/1: Update jornada ssp to remove build errors/warnings + * sctp: do not enable peer features if we can't do them. + * sctp: Fix oops when INIT-ACK indicates that peer doesn't support AUTH + * bnx2: Promote vector field in bnx2_irq structure from u16 to unsigned + int + * forcedeth: call restore mac addr in nv_shutdown path + * e1000: prevent corruption of EEPROM/NVM + * e100: Use pci_pme_active to clear PME_Status and disable PME# + * md: Don't wait UNINTERRUPTIBLE for other resync to finish + * atstk1000: fix build breakage with BOARD_ATSTK100X_SW2_CUSTOM=y + * avr32: add .gitignore files + * avr32: add generic_find_next_le_bit bit function + * avr32: fix sys_sync_file_range() call convention + * avr32: nmi_enter() without nmi_exit() + * KVM: ia64: 'struct fdesc' build fix + * hwmon: (atxp1) Fix device detection logic + * hwmon: (it87) Fix fan tachometer reading in IT8712F rev 0x7 (I) + * hwmon: (ad7414) Make ad7414_update_device() static + * tmio_mmc: fix compilation with debug enabled + * atmel-mci: debugfs: enable clock before dumping regs + * atmel-mci: Fix memory leak in atmci_regs_show + * atmel-mci: Fix bogus debugfs file size + * atmel-mci: Set MMC_CAP_NEEDS_POLL if no detect_pin + * mmc_block: handle error from mmc_register_driver() + * mmc_test: initialize mmc_test_lock statically + * [MIPS] Fix 64-bit IP checksum code + * [MIPS] SMTC: Clear TIF_FPUBOUND on clone / fork. + * [MIPS] Fix potential latency problem due to non-atomic cpu_wait. + * [MIPS] vmlinux.lds.S: handle .text.* + * MAINTAINERS: Trivial whitespace cleanups + * MAINTAINERS: Various fixes + * Linux 2.6.27-rc7 + + -- Tim Gardner Sun, 21 Sep 2008 21:49:28 -0600 + +linux (2.6.27-3.4) intrepid; urgency=low + + [ Colin Ian King ] + + * SAUCE: fix kernel oops in VirtualBox during paravirt patching + - LP: #246067 + * SAUCE: qc-usb: Enable Logitech QuickCam Messenger + - LP: #209901 + * SAUCE: appleir: Enable driver for new MacBook Pro + - LP: #157919 + + [ Tim Gardner ] + + * Enabled CONFIG_DEBUG_RODATA=y + + [ Upstream Kernel Changes ] + + * Revert "ALSA: hda - Added model selection for iMac 24"" + * Revert "x86: fix HPET regression in 2.6.26 versus 2.6.25, check hpet + against BAR, v3" + * Revert "[ARM] use the new byteorder headers" + * Revert "mac80211: Use IWEVASSOCREQIE instead of IWEVCUSTOM" + * Revert "crypto: camellia - Use kernel-provided bitops, unaligned access + helpers" + * svcrdma: Fix race between svc_rdma_recvfrom thread and the dto_tasklet + * sched, cpuset: rework sched domains and CPU hotplug handling (v4) + * ACPI: Fix now signed module parameter. + * ACPI: Change package length error to warning + * ACPI: Fix now signed module parameter. + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * acpi: add checking for NULL early param + * UBIFS: fix zero-length truncations + * Input: bcm5974 - add maintainer entry + * sh64: re-add the __strnlen_user() prototype + * sh: fix ptrace_64.c:user_disable_single_step() + * PNPACPI: ignore the producer/consumer bit for extended IRQ descriptors + * UBIFS: always read hashed-key nodes under TNC mutex + * UBIFS: allow for racing between GC and TNC + * [CIFS] Fix plaintext authentication + * sparc32: Implement smp_call_function_single(). + * sh: crash kernel resource fix + * sh: fix kexec entry point for crash kernels + * sh: fix platform_resource_setup_memory() section mismatch + * sh: update Migo-R defconfig + * sh: update AP325RXA defconfig + * sh: fix semtimedop syscall + * cifs: fix O_APPEND on directio mounts + * [CIFS] update cifs change log + * [CIFS] Turn off Unicode during session establishment for plaintext + authentication + * ACPI: thinkpad-acpi: wan radio control is not experimental + * sparc: Fix resource flags for PCI children in OF device tree. + * remove blk_register_filter and blk_unregister_filter in gendisk + * ALSA: oxygen: fix distorted output on AK4396-based cards + * ipv6: When we droped a packet, we should return NET_RX_DROP instead of + 0 + * pkt_sched: Fix locking of qdisc_root with qdisc_root_sleeping_lock() + * net: Unbreak userspace usage of linux/mroute.h + * Don't trigger softlockup detector on network fs blocked tasks + * Resource handling: add 'insert_resource_expand_to_fit()' function + * sparc64: setup_valid_addr_bitmap_from_pavail() should be __init + * UBIFS: do not update min_idx_lebs in stafs + * UBIFS: push empty flash hack down + * UBIFS: remove incorrect index space check + * UBIFS: improve statfs reporting + * UBIFS: fix assertion + * UBIFS: add forgotten gc_idx_lebs component + * UBIFS: introduce LEB overhead + * UBIFS: improve statfs reporting even more + * UBIFS: fill f_fsid + * drm/radeon: downgrade debug message from info to debug. + * Remove invalidate_partition call from do_md_stop. + * Fix problem with waiting while holding rcu read lock in md/bitmap.c + * ALSA: hda: Distortion fix for dell_m6_core_init + * ALSA: ASoC: fix pxa2xx-i2s clk_get call + * block: restore original behavior of /proc/partition when there's no + partition + * debugobjects: fix lockdep warning + * avr32: Fix lockup after Java stack underflow in user mode + * avr32: pm_standby low-power ram bug fix + * nfsd: fix compound state allocation error handling + * sunrpc: fix possible overrun on read of /proc/sys/sunrpc/transports + * nfsd: fix buffer overrun decoding NFSv4 acl + * audit: Moved variable declaration to beginning of function + * Fix modules_install on RO nfs-exported trees. + * Remove '#include ' from mm/page_isolation.c + * dabusb_fpga_download(): fix a memory leak + * [MTD] mtdchar.c: Fix regression in MEMGETREGIONINFO ioctl() + * ALSA: hda - Fix ALC663 auto-probe + * ALSA: hda - Add mic-boost controls to ALC662/663 auto configuration + * Un-break printk strings in x86 PCI probing code + * kernel/resource.c: fix new kernel-doc warning + * softlockup: minor cleanup, don't check task->state twice + * fix typo in arch/parisc/hpux/fs.c + * m68k: atari_keyb_init operator precedence fix + * ACPI: Fix typo in "Disable MWAIT via DMI on broken Compal board" + * don't diff generated firmware files + * IDE: compile fix for sff_dma_ops + * IDE: palm_bk3710: fix compile warning for unused variable + * ide: fix hwif_to_node() + * palm_bk3710: improve IDE registration + * ide-disk: remove stale init_idedisk_capacity() documentation + * ide/Kconfig: mark ide-scsi as deprecated + * net/wireless/Kconfig: clarify the description for + CONFIG_WIRELESS_EXT_SYSFS + * iwlwifi: do not use GFP_DMA in iwl_tx_queue_init + * iwlwifi: workaround interrupt handling no some platforms + * iwlwifi: fix apm_stop (wrong bit polarity for FLAG_INIT_DONE) + * iwlwifi: fix 64bit platform firmware loading + * orinoco: Multicast to the specified addresses + * wireless/libertas/if_cs.c: fix memory leaks + * mac80211: Fix debugfs union misuse and pointer corruption + * rt2x00: Compiler warning unmasked by fix of BUILD_BUG_ON + * ath9k: Incorrect key used when group and pairwise ciphers are + different. + * ath9: Fix ath_rx_flush_tid() for IRQs disabled kernel warning message. + * net/xfrm: Use an IS_ERR test rather than a NULL test + * ipv: Re-enable IP when MTU > 68 + * NTFS: update homepage + * mm: make setup_zone_migrate_reserve() aware of overlapping nodes + * VFS: fix dio write returning EIO when try_to_release_page fails + * acer-wmi: remove debugfs entries upon unloading + * mm/bootmem: silence section mismatch warning - + contig_page_data/bootmem_node_data + * MAINTAINERS: add a maintainer for the BCM5974 multitouch driver + * 8250: improve workaround for UARTs that don't re-assert THRE correctly + * mmc: at91_mci: don't use coherent dma buffers + * pid_ns: zap_pid_ns_processes: fix the ->child_reaper changing + * pid_ns: (BUG 11391) change ->child_reaper when init->group_leader exits + * cirrusfb: check_par fixes + * devcgroup: fix race against rmdir() + * mm: show quicklist usage in /proc/meminfo + * mm: size of quicklists shouldn't be proportional to the number of CPUs + * ipc: document the new auto_msgmni proc file + * hp-wmi: update to match current rfkill semantics + * hp-wmi: add proper hotkey support + * tdfxfb: fix SDRAM memory size detection + * tdfxfb: fix frame buffer name overrun + * rtc_time_to_tm: fix signed/unsigned arithmetic + * ibft: fix target info parsing in ibft module + * sysfs: document files in /sys/firmware/sgi_uv/ + * rtc-cmos: wake again from S5 + * pm_qos_requirement might sleep + * drivers/char/random.c: fix a race which can lead to a bogus BUG() + * ipsec: Fix deadlock in xfrm_state management. + * [x86] Fix TSC calibration issues + * tipc: Don't use structure names which easily globally conflict. + * sparc64: Fix IPI call locking. + * [ARM] omap: fix gpio.c build error + * sparc64: Prevent sparc64 from invoking irq handlers on offline CPUs + * powerpc: Fix uninitialised variable in VSX alignment code + * powerpc: Only make kernel text pages of linear mapping executable + * powerpc: Make sure _etext is after all kernel text + * powerpc: Work around gcc's -fno-omit-frame-pointer bug + * powerpc: Fix build error with 64K pages and !hugetlbfs + * powerpc: Fix for getting CPU number in power_save_ppc32_restore() + * UBIFS: amend f_fsid + * net/usb/pegasus: avoid hundreds of diagnostics + * ixgbe: initialize interrupt throttle rate + * pcnet-cs, axnet_cs: add new IDs, remove dup ID with less info + * netxen: Remove workaround for chipset quirk + * Split up PIT part of TSC calibration from native_calibrate_tsc + * iwlwifi: W/A for the TSF correction in IBSS + * iwlwifi: fix hidden ssid discovery in passive channels + * iwlwifi: remove false rxon if rx chain changes + * iwlwifi: fix station mimo power save values + * iwlwifi: fix rx_chain computation + * iwlwifi: fix Tx cmd memory allocation failure handling + * iwlwifi: call apm stop on exit + * iwlwifi: fix STATUS_EXIT_PENDING is not set on pci_remove + * ath9k: Fix TX status reporting + * ath9k: Fix TX control flag use for no ACK and RTS/CTS + * V4L/DVB (8555): au8522: add mechanism to configure IF frequency for vsb + and qam + * V4L/DVB (8556): au0828: add support for Hauppauge Woodbury + * V4L/DVB (8598): au8522: clean up function au8522_set_if + * V4L/DVB (8599): au8522: remove if frequency settings from vsb/qam + modulation tables + * V4L/DVB (8600): au0828: explicitly set 6 MHz IF frequency in + hauppauge_hvr950q_config + * V4L/DVB (8629): v4l2-ioctl: do not try to handle private V4L1 ioctls + * V4L/DVB (8633): ivtv: update ivtv version number + * V4L/DVB (8648): ivtv: improve CC support + * V4L/DVB (8660): gspca: Simplify the scan of URB packets in pac7311. + * V4L/DVB (8661): gspca: Bug in the previous changeset about pac7311. + * V4L/DVB (8663): gspca: Webcam 0c45:6128 added in sonixj. + * V4L/DVB (8664): gspca: The bridge/sensor of the webcam 093a:2621 is a + PAC 7302. + * V4L/DVB (8665): gspca: Fix the 640x480 resolution of the webcam + 093a:2621. + * V4L/DVB (8666): gspca: Bad scanning of frames in pac7311. + * V4L/DVB (8667): gspca: Bad probe of Z-Star/Vimicro webcams with pas106 + sensor. + * V4L/DVB (8668): gspca: Conflict GSPCA / ET61X251 for the webcam + 102c:6251. + * V4L/DVB (8669): gspca: Add white balance control for spca561 rev 012A. + * V4L/DVB (8671): gspca: Remove the unused field 'dev_name' of the device + structure. + * V4L/DVB (8672): gspca: Big rewrite of spca561. + * V4L/DVB (8673): gspca: Bad frame scanning again and bad init in + pac7311. + * V4L/DVB (8674): gspca: Webcam 0c45:612e added in sonixj. + * V4L/DVB (8675): gspca: Pixmap PJPG (Pixart 73xx JPEG) added, generated + by pac7311. + * V4L/DVB (8678): Remove the dead CONFIG_RADIO_MIROPCM20{,_RDS} code + * V4L/DVB (8681): v4l2-ioctl.c: fix warning + * V4L/DVB (8682): V4L: fix return value of register video func + * V4L/DVB (8701): cx18: Add missing lock for when the irq handler + manipulates the queues + * V4L/DVB (8703): gspca: Do controls work for spca561 revision 12a. + * V4L/DVB (8705): gspca: Adjust some control limits in spca561. + * V4L/DVB (8706): Make contrast and brightness work for pac7302. + * V4L/DVB (8707): gspca: Colors, hflip and vflip controls added for + pac7302. + * V4L/DVB (8709): gspca: Fix initialization and controls of sn9x110 - + ov7630. + * V4L/DVB (8710): gspca: Bad color control in sonixj. + * V4L/DVB (8711): gspca: Bad controls and quantization table of pac7311. + * V4L/DVB (8712): gspca: Bad start of sonixj webcams since changeset + a8779025e7e8. + * V4L/DVB (8713): gspca: Bad color control again in sonixj. + * V4L/DVB (8714): gspca: Bad start of sn9c110 and sensor om6802. + * V4L/DVB (8715): gspca: Change the name of some webcam in the gspca doc. + * V4L/DVB (8716): gspca: Bad start of sn9c110 and sensor ov7630. + * V4L/DVB (8717): gspca: Frame buffer too small for small resolutions + (sonixj and t613). + * V4L/DVB (8718): gspca: suspend/resume added. + * V4L/DVB (8719): gspca: Have VIDIOC_QUERYCTRL more compliant to the + spec. + * V4L/DVB (8720): gspca: V4L2_CAP_SENSOR_UPSIDE_DOWN added as a cap for + some webcams. + * V4L/DVB (8722): sms1xxx: fix typo in license header + * V4L/DVB (8726): link tuner before saa7134 + * V4L/DVB (8727): V4L1: make PMS not autoprobe when builtin. + * V4L/DVB (8728): 1-make-pms-not-autoprobe-when-builtin update + * V4L/DVB (8749): Fix error code, when camera is not turned on by sonypi + * V4L/DVB (8750): V4L: check inval in video_register_device_index() + * V4L/DVB (8751): vivi: Fix some issues at vivi register routine + * V4L/DVB (8757): v4l-dvb: fix a bunch of sparse warnings + * V4L/DVB (8769): cx18: Simplify queue flush logic to prevent oops in + cx18_flush_queues() + * V4L/DVB (8778): radio: fix incorrect video_register_device result check + * V4L/DVB (8779): v4l: fix more incorrect video_register_device result + checks + * V4L/DVB (8790): saa7115: call i2c_set_clientdata only when state != + NULL + * V4L/DVB (8803): s5h1409: Enable QAM_AUTO mode + * V4L/DVB (8804): s5h1411: Enable QAM_AUTO mode + * V4L/DVB (8805): Steven Toth email address change + * V4L/DVB (8809): gspca: Revert commit + 9a9335776548d01525141c6e8f0c12e86bbde982 + * V4L/DVB (8810): gspca: Compile error when CONFIG_PM not defined. + * V4L/DVB (8812): gspca: Do pac73xx webcams work. + * V4L/DVB (8813): gspca: Adjust SOF detection for pac73xx. + * V4L/DVB (8814): gspca: Set DISABLED the disabled controls at query + control time. + * V4L/DVB (8815): gspca: Fix problems with disabled controls. + * V4L/DVB (8816): gspca: Set disabled ctrls and fix a register pb with + ovxxxx in sonixb. + * V4L/DVB (8817): gspca: LED and proble changes in sonixb. + * V4L/DVB (8818): gspca: Reinitialize the device on resume. + * V4L/DVB (8819): gspca: Initialize the ov519 at open time and source + cleanup. + * V4L/DVB (8820): gspca: Change initialization and gamma of zc3xx - + pas106. + * V4L/DVB (8822): gspca: Change some subdriver functions for + suspend/resume. + * V4L/DVB (8823): gspca: H and V flips work for ov7670 only in ov519. + * V4L/DVB (8824): gspca: Too much code removed in the suspend/resume + changeset. + * V4L/DVB (8825): gspca: More controls for pac73xx and new webcam + 093a:2624. + * V4L/DVB (8826): gspca: Webcam Labtec 2200 (093a:2626) added in pac7311. + * V4L/DVB (8827): gspca: Stop pac7302 autogain oscillation. + * V4L/DVB (8828): gspca: Set the clock at the end of initialization in + sonixj. + * V4L/DVB (8829): gspca: Have a clean kmalloc-ated buffer for USB + exchanges. + * V4L/DVB (8830): gspca: Move some probe code to the new init function. + * V4L/DVB (8831): gspca: Resolve webcam conflicts between some drivers. + * V4L/DVB (8832): gspca: Bad pixelformat of vc0321 webcams. + * V4L/DVB (8833): gspca: Cleanup the sonixb code. + * V4L/DVB (8834): gspca: Have a bigger buffer for sn9c10x compressed + images. + * V4L/DVB (8835): gspca: Same pixfmt as the sn9c102 driver and raw Bayer + added in sonixb. + * V4L/DVB (8837): dvb: fix I2C adapters name size + * V4L/DVB (8839): dib0700: add comment to identify 35th USB id pair + * V4L/DVB (8840): dib0700: add basic support for Hauppauge Nova-TD-500 + (84xxx) + * V4L/DVB (8842): vivi_release(): fix use-after-free + * V4L/DVB (8843): tda10048_firmware_upload(): fix a memory leak + * V4L/DVB (8844): dabusb_fpga_download(): fix a memory leak + * bnx2x: Accessing un-mapped page + * SELinux: memory leak in security_context_to_sid_core + * x86: add io delay quirk for Presario F700 + * mmap: fix petty bug in anonymous shared mmap offset handling + * x86: Change warning message in TSC calibration. + * PCI: fix pbus_size_mem() resource alignment for CardBus controllers + * [ARM] omap: fix build error in ohci-omap.c + * [ARM] remove unused #include + * ACPI: Make Len Brown the ACPI maintainer again + * fujitsu-laptop: fix regression for P8010 in 2.6.27-rc + * ACPI: Avoid bogus timeout about SMbus check + * acer-wmi: remove debugfs entries upon unloading + * forgotten refcount on sysctl root table + * V4L/DVB (8868): gspca: Support for vga modes with sif sensors in + sonixb. + * V4L/DVB (8869): gspca: Move the Sonix webcams with TAS5110C1B from + sn9c102 to gspca. + * V4L/DVB (8870): gspca: Fix dark room problem with sonixb. + * V4L/DVB (8872): gspca: Bad image format and offset with rev072a of + spca561. + * V4L/DVB (8873): gspca: Bad image offset with rev012a of spca561 and + adjust exposure. + * V4L/DVB (8874): gspca: Adjust hstart for sn9c103/ov7630 and update + usb-id's. + * [ARM] omap: fix virtual vs physical address space confusions + * V4L/DVB (8876): budget: udelay changed to mdelay + * V4L/DVB (8877): b2c2 and bt8xx: udelay to mdelay + * V4L/DVB (8880): PATCH: Fix parents on some webcam drivers + * V4L/DVB (8881): gspca: After 'while (retry--) {...}', retry will be -1 + but not 0. + * powerpc/spufs: Fix multiple get_spu_context() + * powerpc/spufs: Fix race for a free SPU + * Input: bcm5974 - small formatting cleanup + * Input: bcm5974 - improve finger tracking and counting + * Input: bcm5974 - add BTN_TOUCH event for mousedev benefit + * Input: i8042 - make Lenovo 3000 N100 blacklist entry more specific + * sh: resume_kernel fix for kernel oops built with CONFIG_BKL_PREEMPT=y. + * sh64: resume_kernel fix for kernel oops built with + CONFIG_BKL_PREEMPT=y. + * i2c: fix i2c-sh_mobile timing issues + * clockevents: prevent clockevent event_handler ending up handler_noop + * clockevents: prevent endless loop in periodic broadcast handler + * clockevents: enforce reprogram in oneshot setup + * clockevents: prevent multiple init/shutdown + * clockevents: prevent endless loop lockup + * HPET: make minimum reprogramming delta useful + * [MTD] [NAND] tmio_nand: fix base address programming + * Fix conditional export of kvh.h and a.out.h to userspace. + * async_tx: fix the bug in async_tx_run_dependencies + * sched_clock: fix NOHZ interaction + * sched: fix process time monotonicity + * UBIFS: fix division by zero + * UBIFS: make minimum fanout 3 + * [MIPS] Fix data bus error recovery + * [MIPS] Fix WARNING: at kernel/smp.c:290 + * [MIPS] TXx9: Fix txx9_pcode initialization + * [MIPS] TX39xx: Add missing local_flush_icache_range initialization + * [MIPS] Probe initrd header only if explicitly specified + * res_counter: fix off-by-one bug in setting limit + * forcedeth: fix kexec regression + * atmel_lcdfb: fix oops in rmmod when framebuffer fails to register + * tracehook: comment pasto fixes + * drivers/mmc/card/block.c: fix refcount leak in mmc_block_open() + * x86: boot: stub out unimplemented CPU feature words + * x86: add NOPL as a synthetic CPU feature bit + * x86: use X86_FEATURE_NOPL in alternatives + * clockevents: broadcast fixup possible waiters + * x86: HPET fix moronic 32/64bit thinko + * x86: HPET: read back compare register before reading counter + * Fix CONFIG_AC97_BUS dependency + * [ARM] 5241/1: provide ioremap_wc() + * ntp: fix calculation of the next jiffie to trigger RTC sync + * clocksource, acpi_pm.c: use proper read function also in errata mode + * clocksource, acpi_pm.c: check for monotonicity + * x86: delay early cpu initialization until cpuid is done + * x86: move mtrr cpu cap setting early in early_init_xxxx + * sched: arch_reinit_sched_domains() must destroy domains to force + rebuild + * x86, xen: Use native_pte_flags instead of native_pte_val for .pte_flags + * x86: pda_init(): fix memory leak when using CPU hotplug + * x86: cpu_init(): fix memory leak when using CPU hotplug + * powerpc/spufs: Fix possible scheduling of a context to multiple SPEs + * netfilter: nf_conntrack_sip: de-static helper pointers + * netfilter: nf_conntrack_gre: more locking around keymap list + * netfilter: nf_conntrack_gre: nf_ct_gre_keymap_flush() fixlet + * netfilter: nf_conntrack_irc: make sure string is terminated before + calling simple_strtoul + * pkt_sched: Fix qdisc state in net_tx_action() + * powerpc: Fix rare boot build breakage + * ahci, pata_marvell: play nicely together + * sata_mv: add RocketRaid 1720 PCI ID to driver + * ahci: disable PMP for marvell ahcis + * sata_nv: disable hardreset for generic + * libata-sff: kill spurious WARN_ON() in ata_hsm_move() + * pata_sil680: remove duplicate pcim_enable_device + * ahci: RAID mode SATA patch for Intel Ibex Peak DeviceIDs + * [MIPS] IP22: Fix detection of second HPC3 on Challenge S + * xen: fix 2.6.27-rc5 xen balloon driver warnings + * x86: disable static NOPLs on 32 bits + * netns : fix kernel panic in timewait socket destruction + * bridge: don't allow setting hello time to zero + * NFS: Restore missing hunk in NFS mount option parser + * usb: fix null deferences in low level usb serial + * Fix format of MAINTAINERS + * sparc64: Disable timer interrupts in fixup_irqs(). + * [Bluetooth] Fix reference counting during ACL config stage + * [Bluetooth] Enforce correct authentication requirements + * [Bluetooth] Reject L2CAP connections on an insecure ACL link + * [S390] CVE-2008-1514: prevent ptrace padding area read/write in 31-bit + mode + * [S390] cio: Correct cleanup on error. + * [S390] cio: handle ssch() return codes correctly. + * [S390] cio: allow offline processing for disconnected devices + * ipsec: Restore larval states and socket policies in dump + * update Documentation/filesystems/Locking for 2.6.27 changes + * MAINTAINERS: add Atheros maintainer for atlx + * lib: Correct printk %pF to work on all architectures + * x86: fix memmap=exactmap boot argument + * clockevents: remove WARN_ON which was used to gather information + * ipv6: Fix OOPS in ip6_dst_lookup_tail(). + * Linux 2.6.27-rc6 + + -- Ben Collins Tue, 02 Sep 2008 12:45:56 -0400 + +linux (2.6.27-2.3) intrepid; urgency=low + + [ Ben Collins ] + + * build/retag: Make script save .orig of tags for later use + * ubuntu/lirc: Fix device_create call + * build/firmware: Put in-kernel firmware into version specific subdir + - LP: #262115 + * Rebase on linux-2.6 git. + * ABI bump + + [ Herton Ronaldo Krzesinski ] + + * SAUCE: (no-up) Apparmor warning fixes + + [ John Johansen ] + + * SAUCE: (no-up) Proper AppArmor ptrace updates for newer lsm API + + [ Mackenzie Morgan ] + + * SAUCE: Add quirk for ASUS Z37E to make sound audible after resume + - LP: #25896 + + -- Ben Collins Wed, 27 Aug 2008 14:03:05 -0400 + +linux (2.6.27-1.2) intrepid; urgency=low + + [ Amit Kucheria ] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [ Ben Collins ] + + * SAUCE: Lower warning level of some PCI messages + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: (no-up) version: Implement version_signature proc file. + * SAUCE: (no-up) connector.h: Add idx/val for drbd + * SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache + * SAUCE: drivers: Remove some duplicate device entries in various modules + * SAUCE: (no-up) [AppArmor] merge with upstream subversion r1291 + * SAUCE: apparmor: Update for changes to ptrace lsm hooks + * SAUCE: (no-up) Enable ubuntu extra subdirectory + * SAUCE: applesmc: Add MacBookAir + * SAUCE: (no-up) ACPI: initramfs DSDT override support + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add BOM for iscsitarget + * ubuntu: Add squashfs driver + * SAUCE: (no-up) Check for squashfs superblock in initramfs mounting. + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Added et131x driver + * ubuntu: Add dm-raid4-5 driver + * ubuntu: Add ndiswrapper driver + * ubuntu: Added ram backed compressed swap module (compcache) + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add ov511 and bt-sco drivers + * ubuntu: Add acx, prism2_usb wireless drivers + * ubuntu: Add at76 driver to build + * ubuntu: Add fsam7400 sw kill switch driver + * ubuntu: Added qc-usb driver + * ubuntu: e1000e: Upgraded module to 0.4.1.7 + * ubuntu: Added rfkill drivers + * ubuntu: VIA - Add VIA DRM Chrome9 3D engine + * ubuntu: unionfs: Added v1.4 module from hardy + * ubuntu: Add LIRC driver + * ubuntu: Add GFS driver + * ubuntu: New tlsup driver for toshiba laptops + * Update config files + * build/d-i: Remove obsolete dm modules + + [ Chuck Short ] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + + [ Colin Ian King ] + + * ubuntu: Add dm-loop + * SAUCE: Enable speedstep for sonoma processors. + + [ Dennis Noordsij ] + + * SAUCE: Work around ACPI corruption upon suspend on some Dell machines. + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Matthew Garrett ] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + + [ Phillip Lougher ] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [ Stefan Bader ] + + * SAUCE: (no-up) Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: mmc: Increase power_up deleay to fix TI readers + + [ Tim Gardner ] + + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: (no-up) Take care of orinoco_cs overlap with hostap_cs + * ubuntu: Add GNBD driver + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.27-0.0) intrepid; urgency=low + + * Not uploaded, placeholder for new release + + -- Ben Collins Sat, 23 Aug 2008 15:48:35 -0400 + +linux (2.6.26-5.17) intrepid; urgency=low + + [ Ben Collins ] + + * build/abi: Add tosh_smm symbol to blacklist + + -- Ben Collins Fri, 15 Aug 2008 09:29:34 -0400 + +linux (2.6.26-5.16) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: toshiba_acpi: Rewrote most of the proc entry bits." + * Revert "SAUCE: Update toshiba_acpi.c to version 0.19a" + * build/config: Disable in-kernel toshiba driver(s) + * ubuntu/tlsup: New driver for toshiba laptops + * build/config: Enable TLSUP driver + * SAUCE: e1000e: Fix E1000E_ENABLED logic to check for our E1000E_NEW + driver as well + * ubuntu/e1000e: Remove E1000E_ENABLED option in local config + * build/config: Update configs to have E1000E_ENABLED set + * ubuntu/prism2: Remove duplicate device + + [ Fabio M. Di Nitto ] + + * SAUCE: Export gfs2 symbols required for gfs1 kernel module + + [ Stefan Bader ] + + * SAUCE: x86: HPET rework for SB700 + - LP: #255910 + + [ Tim Gardner ] + + * Add GNBD driver + * Enable GNBD driver + * SAUCE: Add GFS driver + * SAUCE: Enable gfs driver configs + * b43: Linksys WMP54G (BCM4306/3) card in a PCI format has an SPROM + coding + + [ Upstream Kernel Changes ] + + * KVM: x86 emulator: emulate clflush + * USB: quirk PLL power down mode + + -- Ben Collins Mon, 11 Aug 2008 13:19:28 -0400 + +linux (2.6.26-5.15) intrepid; urgency=low + + [ Ben Collins ] + + * Revert "SAUCE: Add blacklist support to fix Belkin bluetooth dongle." + - Superceded by upstream changes. + * build/config: New option enabled for uvcvideo + * build/control: Add Vcs-Git meta data to control file + * SAUCE: toshiba_acpi: Rewrote most of the new code + * abi/perm-blacklist: Add emu10k1 driver to blacklist + + [ Upstream Kernel Changes ] + + * pxamci: trivial fix of DMA alignment register bit clearing + * udplite: Protection against coverage value wrap-around + * ipv6: use timer pending + * ipv6: __KERNEL__ ifdef struct ipv6_devconf + * hdlcdrv: Fix CRC calculation. + * quota: fix possible infinite loop in quota code + * isofs: fix minor filesystem corruption + * KVM: VMX: Fix a wrong usage of vmcs_config + * KVM: SVM: fix suspend/resume support + * KVM: mmu_shrink: kvm_mmu_zap_page requires slots_lock to be held + * KVM: VMX: Add ept_sync_context in flush_tlb + * KVM: x86 emulator: Fix HLT instruction + * KVM: MMU: nuke shadowed pgtable pages and ptes on memslot destruction + * KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts + * Patch Upstream: x86 ptrace: fix PTRACE_GETFPXREGS error + * rcu: fix rcu_try_flip_waitack_needed() to prevent grace-period stall + * Fix typos from signal_32/64.h merge + * x86 reboot quirks: add Dell Precision WorkStation T5400 + * USB: fix usb serial pm counter decrement for disconnected interfaces + * x86, suspend, acpi: enter Big Real Mode + * markers: fix duplicate modpost entry + * Fix build on COMPAT platforms when CONFIG_EPOLL is disabled + * proc: fix /proc/*/pagemap some more + * cpusets: fix wrong domain attr updates + * x86: fix crash due to missing debugctlmsr on AMD K6-3 + * ide-cd: fix oops when using growisofs + * rtc-at91rm9200: avoid spurious irqs + * vmlinux.lds: move __attribute__((__cold__)) functions back into final + .text section + * ARM: fix fls() for 64-bit arguments + * tcp: Clear probes_out more aggressively in tcp_ack(). + * sparc64: Fix lockdep issues in LDC protocol layer. + * sparc64: Fix cpufreq notifier registry. + * sparc64: Do not define BIO_VMERGE_BOUNDARY. + * iop-adma: fix platform driver hotplug/coldplug + * myri10ge: do not forget to setup the single slice pointers + * myri10ge: do not use mgp->max_intr_slots before loading the firmware + * ALSA: trident - pause s/pdif output + * V4L: cx18: Upgrade to newer firmware & update documentation + * DVB: dib0700: add support for Hauppauge Nova-TD Stick 52009 + * V4L: uvcvideo: Fix a buffer overflow in format descriptor parsing + * V4L: uvcvideo: Use GFP_NOIO when allocating memory during resume + * V4L: uvcvideo: Don't free URB buffers on suspend + * V4L: uvcvideo: Make input device support optional + * V4L: uvcvideo: Add support for Medion Akoya Mini E1210 integrated + webcam + * V4L: saa7134: Copy tuner data earlier to avoid overwriting manual tuner + type + * V4L: cx23885: Bugfix for concurrent use of /dev/video0 and /dev/video1 + * DVB: cx23885: Ensure PAD_CTRL is always reset to a sensible default + * DVB: cx23885: DVB Transport cards using DVB port VIDB/TS1 did not + stream + * DVB: cx23885: Reallocated the sram to avoid concurrent VIDB/C issues + * DVB: cx23885: SRAM changes for the 885 and 887 silicon parts + * x86: fix kernel_physical_mapping_init() for large x86 systems + * eCryptfs: use page_alloc not kmalloc to get a page of memory + * UML - Fix boot crash + * ixgbe: remove device ID for unsupported device + * mpc52xx_psc_spi: fix block transfer + * tmpfs: fix kernel BUG in shmem_delete_inode + * markers: fix markers read barrier for multiple probes + * VFS: increase pseudo-filesystem block size to PAGE_SIZE + * cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called + already + * b43legacy: Release mutex in error handling code + * ath5k: don't enable MSI, we cannot handle it yet + * Fix off-by-one error in iov_iter_advance() + * Linux 2.6.26.1 + * ftrace: remove unneeded documentation + * romfs_readpage: don't report errors for pages beyond i_size + * netfilter: nf_nat_sip: c= is optional for session + * SCSI: bsg: fix bsg_mutex hang with device removal + * x86: idle process - add checking for NULL early param + * x86: io delay - add checking for NULL early param + * Close race in md_probe + * Kprobe smoke test lockdep warning + * netfilter: xt_time: fix time's time_mt()'s use of do_div() + * linear: correct disk numbering error check + * SCSI: ch: fix ch_remove oops + * NFS: Ensure we zap only the access and acl caches when setting new acls + * jbd: fix race between free buffer and commit transaction + * Input: i8042 - add Intel D845PESV to nopnp list + * Input: i8042 - add Gericom Bellagio to nomux blacklist + * Input: i8042 - add Acer Aspire 1360 to nomux blacklist + * Bluetooth: Signal user-space for HIDP and BNEP socket errors + * Add compat handler for PTRACE_GETSIGINFO + * ALSA: hda - Fix wrong volumes in AD1988 auto-probe mode + * ALSA: hda - Fix DMA position inaccuracy + * ALSA: hda - Add missing Thinkpad Z60m support + * ALSA: emu10k1 - Fix inverted Analog/Digital mixer switch on Audigy2 + * vfs: fix lookup on deleted directory + * Ath5k: fix memory corruption + * Ath5k: kill tasklets on shutdown + * sound: ensure device number is valid in snd_seq_oss_synth_make_info + * Linux 2.6.26.2 + + -- Ben Collins Sun, 03 Aug 2008 13:25:02 -0400 + +linux (2.6.26-5.14) intrepid; urgency=low + + [ Ben Collins ] + + * SAUCE: applesmc: Add MacBookAir + * build: Do not build ddeb unless we are on the buildd + * build: control: Consistency in arch fields. + * SAUCE: Update toshiba_acpi.c to version 0.19a + - LP: #77026 + * build: Added perm blacklist support and per-module support to abi-check + - Blacklist p80211 module from abi checks + * ubuntu/lirc: Get rid of drivers symlink and use real include stuff + + + [ Colin Ian King ] + + * SAUCE: acerhk module - add support for Amilo A1650g keyboard + - LP: #84159 + * SAUCE: rt2x00: Fix OOPS on failed creation of rt2x00lib workqueue + - LP: #249242 + + [ Mario Limonciello ] + + * Add LIRC back in + + [ Tim Gardner ] + + * Makefile race condition can lead to ndiswrapper build failure + - LP: #241547 + * update linux-wlan-ng (prism2_usb) to upstream version 1861 + - LP: #245026 + + [ Upstream Kernel Changes ] + + * Fix typos from signal_32/64.h merge + + -- Ben Collins Fri, 01 Aug 2008 00:05:01 -0400 + +linux (2.6.26-5.13) intrepid; urgency=low + + [ Ben Collins ] + + * build: Make makedumpfile an amd64/i386 only build-dep + * ubuntu/acerhk: Fixup assembly to compile with newer binutils + + -- Ben Collins Sat, 26 Jul 2008 16:41:50 -0400 + +linux (2.6.26-4.12) intrepid; urgency=low + + [ Ben Collins ] + + * e1000e: Upgraded module to 0.4.1.7 upstream. Placed in ubuntu/, + in-kernel driver disabled + * config: Disable e1000e in-kernel, and enable newer driver in ubuntu/ + * rfkill: Update to 1.3 drivers, and move to common location + * ubuntu: Actually link kconfig/kbuild into rfkill subdir + * config: Enable loading dsdt from initramfs + - LP: #246222 + * ubuntu: [compcache] Update to fix crashes in improper BUG() + * build: Create a retag scripts to recover tags from rebases + * build: Updates for dbg pkg + * build: Make sure no empty lines show up in debian/files + * ubuntu: atl1e: Add new driver from 2.6.27-pre-rc1 + - LP: #243894 + * sys_getcwd: Fix some brokeness introduced by AppArmor __d_path + changes + - LP: #251223 + * ubuntu: unionfs: Added v1.4 module from hardy + * build: Add sub-flavour infrastructure, and virtual subflav + + [ Eric Piel ] + + * ACPI: Allow custom DSDT tables to be loaded from initramfs + + [ Kees Cook ] + + * AppArmor: Smack VFS patches + + [ Mario Limonciello ] + + * Work around ACPI corruption upon suspend on some Dell machines. + - LP: #183033 + + [ Tim Gardner ] + + * Export usbhid_modify_dquirk for LBM module bcm5974 + - LP: #250838 + * VIA - Add VIA DRM Chrome9 3D engine + - LP: #251862 + * Define TRUE/FALSE for VIA DRM driver. + + -- Ben Collins Tue, 15 Jul 2008 12:51:39 -0400 + +linux (2.6.26-4.11) intrepid; urgency=low + + [ Ben Collins ] + + * config: Enable bcm5974 driver in all configs + + [ 2.6.26-4.10 ] + + [ Amit Kucheria ] + + * Fix typo in GSPCA Makefile and make it compile + + [ Ben Collins ] + + * ubuntu: Remove UVC driver in favor of in-kernel one (-rc9) + * config: Updates for -rc9 + * ubuntu: Add acx, prism2_usb wireless drivers + * config: Enable prism2_usb and acx drivers. + * ubuntu: Add at76 driver to build + * config: Enable at76_usb driver. + * iscsitarget: Fix prototype for bi_end_io callback. + * acx: Fix section type mismatch warnings + * fsam7400: Add sw kill switch driver + * config: Enable fsam7400 driver + * qc-usb: Added new driver + * config: Enable qc-usb driver + * drbd: Remove built-in connector usage + * drbd: Do not define idx/val for connector here + * connector.h: Add idx/val for drbd + * bcm5974: Added new driver + + [ Kees Cook ] + + * SAUCE: [AppArmor] merge with upstream subversion r1291 + * SAUCE: [AppArmor] fix typo in selinux_inode_link + * SAUCE: [AppArmor] aufs patches + + [ Michael Frey (Senior Manager, MID ] + + * SAUCE: Send HCI_RESET for Broadcomm 2046 + - LP: #241749 + + [ Tim Gardner ] + + * SAUCE: Medion Akoya Mini E1210 + + [ Upstream Kernel Changes ] + + * Revert "BAST: Remove old IDE driver" + * ARM: OMAP: DMA: Don't mark channel active in omap_enable_channel_irq + * ARM: OMAP: Correcting the gpmc prefetch control register address + * debugobjects: fix lockdep warning + * [ARM] 5115/1: pxafb: fix ifdef for command line option handling + * [ARM] 5116/1: pxafb: cleanup and fix order of failure handling + * [ARM] 5109/1: Mark rtc sa1100 driver as wakeup source before + registering it + * [ARM] Export dma_sync_sg_for_device() + * fix cgroup-inflicted breakage in block_dev.c + * [patch for 2.6.26 2/4] vfs: utimensat(): be consistent with utime() for + immutable and append-only files + * [patch for 2.6.26 1/4] vfs: utimensat(): ignore tv_sec if tv_nsec == + UTIME_OMIT or UTIME_NOW + * [patch for 2.6.26 3/4] vfs: utimensat(): fix error checking for + {UTIME_NOW,UTIME_OMIT} case + * [patch for 2.6.26 4/4] vfs: utimensat(): fix write access check for + futimens() + * [patch 1/4] vfs: path_{get,put}() cleanups + * [patch 2/4] fs: make struct file arg to d_path const + * [patch 3/4] vfs: fix ERR_PTR abuse in generic_readlink + * [patch 4/4] flock: remove unused fields from file_lock_operations + * [patch 3/3] vfs: make d_path() consistent across mount operations + * [patch 1/3] vfs: dcache sparse fixes + * [patch 2/3] vfs: dcache cleanups + * udf: Fix regression in UDF anchor block detection + * [SCSI] ses: Fix timeout + * netfilter: ip6table_mangle: don't reroute in LOCAL_IN + * [SCSI] esp: Fix OOPS in esp_reset_cleanup(). + * kernel/audit.c: nlh->nlmsg_type is gotten more than once + * audit: fix kernel-doc parameter notation + * remove useless argument type in audit_filter_user() + * Blackfin arch: fix bug - kernel boot fails when Spinlock and rw-lock + debugging enabled + * Blackfin arch: fix up section mismatch warning + * mac80211: implement EU regulatory domain + * b43: Do not return TX_BUSY from op_tx + * b43legacy: Do not return TX_BUSY from op_tx + * b43: Fix possible MMIO access while device is down + * b43legacy: Fix possible NULL pointer dereference in DMA code + * rt2x00: Fix unbalanced mutex locking + * iwlwifi: improve scanning band selection management + * [SCSI] esp: tidy up target reference counting + * [ARM] 5117/1: pxafb: fix __devinit/exit annotations + * thermal: Create CONFIG_THERMAL_HWMON=n + * ACPI: don't walk tables if ACPI was disabled + * dock: bay: Don't call acpi_walk_namespace() when ACPI is disabled. + * x86: shift bits the right way in native_read_tscp + * x86: section/warning fixes + * V4L/DVB (8004): Fix INPUT dependency at budget-ci + * V4L/DVB (8005): Fix OOPS if frontend is null + * V4L/DVB (8007): cx18/cx25840: the S-Video LUMA input can use all + In1-In8 inputs + * V4L/DVB (8008): cx18: remove duplicate audio and video input enums + * V4L/DVB (8010): em28xx: Properly register extensions for already + attached devices + * V4L/DVB (8011): em28xx: enable DVB for HVR-900 + * V4L/DVB (8012): gl861: sleep a little to avoid I2C errors + * V4L/DVB (8013): gl861: remove useless identify_state + * V4L/DVB (8015): gl861: replace non critical msleep(0) with msleep(1) to + be on the safe side + * V4L/DVB (8017): Ensure em28xx extensions only get run against devs that + support them + * V4L/DVB (8018): Add em2860 chip ID + * V4L/DVB (8020): Fix callbacks functions of saa7134_empress + * V4L/DVB (8022): saa7134: fix race between opening and closing the + device + * V4L/DVB (8026): Avoids an OOPS if dev struct can't be successfully + recovered + * V4L/DVB (8027): saa7134: Avermedia A700: only s-video and composite + input are working + * V4L/DVB (8028): Improve error messages for tda1004x attach + * V4L/DVB (8029): Improve error message at tda1004x_attach + * V4L/DVB (8034): tda18271: fix IF notch frequency handling + * V4L/DVB (8035): tda18271: dont touch EB14 if rf_cal lookup is out of + range + * V4L/DVB (8036): tda18271: toggle rf agc speed mode on TDA18271HD/C2 + only + * V4L/DVB (8037): tda18271: ensure that the thermometer is off during + channel configuration + * V4L/DVB (8039): pxa-camera: fix platform_get_irq() error handling. + * V4L/DVB (8040): soc-camera: remove soc_camera_host_class class + * V4L/DVB (8042): DVB-USB UMT-010 channel scan oops + * V4L/DVB (8043): au0828: add support for additional USB device id's + * V4L/DVB (8044): au8522: tuning optimizations + * V4L/DVB (8048): saa7134: Fix entries for Avermedia A16d and Avermedia + E506 + * V4L/DVB (8061): cx18: only select tuner / frontend modules if + !DVB_FE_CUSTOMISE + * V4L/DVB (8063): cx18: Fix unintended auto configurations in + cx18-av-core + * V4L/DVB (8066): cx18: Fix audio mux input definitions for HVR-1600 Line + In 2 and FM radio + * V4L/DVB (8067): cx18: Fix firmware load for case when digital capture + happens first + * V4L/DVB (8068): cx18: Add I2C slave reset via GPIO upon initialization + * V4L/DVB (8069): cx18: Fix S-Video and Compsite inputs for the Yuan + MPC718 and enable card entry + * V4L/DVB (8071): tda10023: Fix possible kernel oops during + initialisation + * V4L/DVB (8073): av7110: Catch another type of ARM crash + * V4L/DVB (8074): av7110: OSD transfers should not be interrupted + * V4L/DVB (8075): stv0299: Uncorrected block count and bit error rate + fixed + * V4L/DVB (8092): videodev: simplify and fix standard enumeration + * V4L/DVB (8096): au8522: prevent false-positive lock status + * V4L/DVB (8097): xc5000: check device hardware state to determine if + firmware download is needed + * V4L/DVB (8100): V4L/vivi: fix possible memory leak in vivi_fillbuff + * V4L/DVB (8108): Fix open/close race in saa7134 + * s2io: fix documentation about intr_type + * tc35815: Mark carrier-off before starting PHY + * tc35815: Fix receiver hangup on Rx FIFO overflow + * ixgbe: fix EEH recovery during reset on PPC + * igb: fix EEH recovery during reset on PPC + * e1000e: fix EEH recovery during reset on PPC + * pcnet_cs, axnet_cs: clear bogus interrupt before request_irq + * drivers/net/r6040.c: Eliminate double sizeof + * ipg: fix jumbo frame compilation + * ipg: use NULL, not zero, for pointers + * [netdrvr] 3c59x: remove irqs_disabled warning from local_bh_enable + * [netdrvr] netxen: fix netxen_pci_tbl[] breakage + * e100: Do pci_dma_sync after skb_alloc for proper operation on ixp4xx + * e1000: only enable TSO6 via ethtool when using correct hardware + * [netdrvr] Fix IOMMU overflow checking in s2io.c + * qla3xxx: Hold RTNL while calling dev_close() + * Hold RTNL while calling dev_close() + * sata_uli: hardreset is broken + * rt2x00: Fix lock dependency errror + * prism: islpci_eth.c endianness fix + * mac80211: fix an oops in several failure paths in key allocation + * firewire: fw-sbp2: fix parsing of logical unit directories + * kbuild: fix a.out.h export to userspace with O= build. + * Ensure interrupted recovery completed properly (v1 metadata plus + bitmap) + * Don't acknowlege that stripe-expand is complete until it really is. + * Fix error paths if md_probe fails. + * hamradio: remove unused variable + * tcp: calculate tcp_mem based on low memory instead of all memory + * tcp: fix for splice receive when used with software LRO + * af_unix: fix 'poll for write'/connected DGRAM sockets + * netdevice: Fix typo of dev_unicast_add() comment + * pkt_sched: ERR_PTR() ususally encodes an negative errno, not positive. + * pkt_sched: Remove CONFIG_NET_SCH_RR + * include/linux/netdevice.h: don't export MAX_HEADER to userspace + * tcp: /proc/net/tcp rto,ato values not scaled properly (v2) + * netlink: Fix some doc comments in net/netlink/attr.c + * CONNECTOR: add a proc entry to list connectors + * inet fragments: fix race between inet_frag_find and + inet_frag_secret_rebuild + * net/inet_lro: remove setting skb->ip_summed when not LRO-able + * netlabel: Fix a problem when dumping the default IPv6 static labels + * ipv6 route: Convert rt6_device_match() to use RT6_LOOKUP_F_xxx flags. + * sched: fix cpu hotplug + * Fix and clean top .gitignore + * x86: fix cpu hotplug crash + * ptrace GET/SET FPXREGS broken + * Input: add KEY_MEDIA_REPEAT definition + * Input: fix locking in force-feedback core + * [ARM] 5131/1: Annotate platform_secondary_init with trace_hardirqs_off + * ide: fix /proc/ide/ide?/mate reporting + * netfilter: nf_conntrack_tcp: fixing to check the lower bound of valid + ACK + * textsearch: fix Boyer-Moore text search bug + * hostap: don't report useless WDS frames by default + * hostap: fix sparse warnings + * mac80211: don't accept WEP keys other than WEP40 and WEP104 + * V4L/DVB (8145a): USB Video Class driver + * [IA64] Bugfix for system with 32 cpus + * [IA64] export account_system_vtime + * sched: fix divide error when trying to configure rt_period to zero + * x86: fix NODES_SHIFT Kconfig range + * block: Fix the starving writes bug in the anticipatory IO scheduler + * Properly notify block layer of sync writes + * rcu: fix hotplug vs rcu race + * I2C: S3C2410: Check ACK on byte transmission + * I2C: S3C2410: Fixup error codes returned rom a transfer. + * I2C: S3C2410: Add MODULE_ALIAS() for s3c2440 device. + * PCI: Restrict VPD read permission to root + * powerpc/bootwrapper: update for initrd with simpleImage + * i2c: Documentation: fix device matching description + * i2c: Fix bad hint about irqs in i2c.h + * powerpc/legacy_serial: Bail if reg-offset/shift properties are present + * powerpc/mpc5200: Fix lite5200b suspend/resume + * ipv4: fix sysctl documentation of time related values + * net-sched: change tcf_destroy_chain() to clear start of filter list + * net-sched: fix filter destruction in atm/hfsc qdisc destruction + * netlink: Unneeded local variable + * net: Tyop of sk_filter() comment + * netdevice: Fix wrong string handle in kernel command line parsing + * net: fib_rules: fix error code for unsupported families + * dm crypt: use cond_resched + * V4L/DVB (8178): uvc: Fix compilation breakage for the other drivers, if + uvc is selected + * PCI: Limit VPD read/write lengths for Broadcom 5706, 5708, 5709 rev. + * PCI: acpiphp: cleanup notify handler on all root bridges + * drivers/input/ff-core.c needs + * DRM/i915: only use tiled blits on 965+ + * tty: Fix inverted logic in send_break + * x86: fix Intel Mac booting with EFI + * arch/x86/mm/init_64.c: early_memtest(): fix types + * 9p: fix O_APPEND in legacy mode + * slub: Do not use 192 byte sized cache if minimum alignment is 128 byte + * Do not overwrite nr_zones on !NUMA when initialising zlcache_ptr + * [MIPS] IP32: Fix unexpected irq 71 + * [MIPS] IP22: Fix crashes due to wrong L1_CACHE_BYTES + * [MIPS] cevt-txx9: Reset timer counter on initialization + * hrtimer: prevent migration for raising softirq + * svcrpc: fix handling of garbage args + * OHCI: Fix problem if SM501 and another platform driver is selected + * USB: fix cdc-acm resume() + * USB: ehci - fix timer regression + * USB: ohci - record data toggle after unlink + * USB: mass storage: new id for US_SC_CYP_ATACB + * sisusbvga: Fix oops on disconnect. + * USB: New device ID for ftdi_sio driver + * USB: fix interrupt disabling for HCDs with shared interrupt handlers + * USB: don't lose disconnections during suspend + * USB: another option device id + * USB: add a pl2303 device id + * USB: fix Oops on loading ipaq module since 2.6.26 + * USB: adding comment for ipaq forcing number of ports + * [MIPS] Fix bug in atomic_sub_if_positive. + * xen: fix address truncation in pte mfn<->pfn conversion + * sata_sil24: add DID for another adaptec flavor + * ahci: always clear all bits in irq_stat + * libata-sff: improve HSM violation reporting + * sata_mv: safer logic for limit_warnings + * Update maintainers for powerpc + * Christoph has moved + * mm: dirty page accounting vs VM_MIXEDMAP + * rtc: rtc_read_alarm() handles wraparound + * firmware: fix the request_firmware() dummy + * serial: fix serial_match_port() for dynamic major tty-device numbers + * get_user_pages(): fix possible page leak on oom + * rtc-x1205: Fix alarm set + * rtc: fix CMOS time error after writing /proc/acpi/alarm + * pci: VT3336 can't do MSI either + * Miguel Ojeda has moved + * ext3: add missing unlock to error path in ext3_quota_write() + * ext4: add missing unlock to an error path in ext4_quota_write() + * reiserfs: add missing unlock to an error path in reiserfs_quota_write() + * ecryptfs: remove unnecessary mux from ecryptfs_init_ecryptfs_miscdev() + * lib: taint kernel in common report_bug() WARN path. + * gpio: pca953x (i2c) handles max7310 too + * fsl_diu_fb: fix build with CONFIG_PM=y, plus fix some warnings + * Update taskstats-struct document for scaled time accounting + * cciss: fix regression that no device nodes are created if no logical + drives are configured. + * delay accounting: maintainer update + * Doc*/kernel-parameters.txt: fix stale references + * hdaps: add support for various newer Lenovo thinkpads + * mn10300: export certain arch symbols required to build allmodconfig + * mn10300: provide __ucmpdi2() for MN10300 + * Introduce rculist.h + * man-pages is supported + * ntfs: update help text + * add kernel-doc for simple_read_from_buffer and memory_read_from_buffer + * w100fb: do not depend on SHARPSL + * w100fb: add 80 MHz modeline + * MFD maintainer + * cgroups: document the effect of attaching PID 0 to a cgroup + * spi: fix the read path in spidev + * doc: doc maintainers + * security: filesystem capabilities: fix fragile setuid fixup code + * security: filesystem capabilities: fix CAP_SETPCAP handling + * Alpha Linux kernel fails with inconsistent kallsyms data + * cpusets: document proc status cpus and mems allowed lists + * MAINTAINERS: update the email address of Andreas Dilger + * cciss: read config to obtain max outstanding commands per controller + * olpc: sdhci: add quirk for the Marvell CaFe's vdd/powerup issue + * olpc: sdhci: add quirk for the Marvell CaFe's interrupt timeout + * cpumask: introduce new APIs + * mm: switch node meminfo Active & Inactive pages to Kbytes + * Update MAINTAINERS file for the TPM device driver + * devcgroup: fix odd behaviour when writing 'a' to devices.allow + * doc: document the relax_domain_level kernel boot argument + * mmc: don't use DMA on newer ENE controllers + * mempolicy: mask off internal flags for userspace API + * x86 ACPI: normalize segment descriptor register on resume + * x86 ACPI: fix resume from suspend to RAM on uniprocessor x86-64 + * softlockup: print a module list on being stuck + * ide: fix hwif->gendev refcounting + * ide: ide_unregister() warm-plug bugfix + * ide: ide_unregister() locking bugfix + * ahci: give another shot at clearing all bits in irq_stat + * Fix clear_refs_write() use of struct mm_walk + * Move _RET_IP_ and _THIS_IP_ to include/linux/kernel.h + * Fix pagemap_read() use of struct mm_walk + * Linux 2.6.26-rc9 + * Revert "USB: don't explicitly reenable root-hub status interrupts" + * Revert "PCI: Correct last two HP entries in the bfsort whitelist" + * iwlwifi: fix incorrect 5GHz rates reported in monitor mode + * iwlwifi: drop skb silently for Tx request in monitor mode + * libertas: support USB persistence on suspend/resume (resend) + * tcp: net/ipv4/tcp.c needs linux/scatterlist.h + * tcp: fix a size_t < 0 comparison in tcp_read_sock + * bridge: fix use-after-free in br_cleanup_bridges() + * Add missing skb->dev assignment in Frame Relay RX code + * forcedeth: fix lockdep warning on ethtool -s + * ehea: fix might sleep problem + * ehea: add MODULE_DEVICE_TABLE + * ehea: fix race condition + * ehea: Access iph->tot_len with correct endianness + * pasemi_mac: Access iph->tot_len with correct endianness + * ibm_newemac: Fixes kernel crashes when speed of cable connected changes + * ibm_newemac: Fixes entry of short packets + * fs_enet: restore promiscuous and multicast settings in restart() + * can: add sanity checks + * x86: KVM guest: Add memory clobber to hypercalls + * KVM: IOAPIC: Fix level-triggered irq injection hang + * [SCSI] erase invalid data returned by device + * pxamci: fix byte aligned DMA transfers + * vsprintf: split out '%s' handling logic + * vsprintf: split out '%p' handling logic + * vsprintf: add infrastructure support for extended '%p' specifiers + * vsprintf: add support for '%pS' and '%pF' pointer formats + * powerpc: Fix unterminated of_device_id array in legacy_serial.c + * [UML] fix gcc ICEs and unresolved externs + * ocfs2/dlm: Fixes oops in dlm_new_lockres() + * hostap_cs: correct poor NULL checks in suspend/resume routines + * drivers/net/wireless/iwlwifi/iwl-3945.c Fix type issue on 64bit + * mac80211: move netif_carrier_on to after + ieee80211_bss_info_change_notify + * mac80211: Only flush workqueue when last interface was removed + * zd1211rw: add ID for AirTies WUS-201 + * ssb-pcicore: Fix IRQ-vector init on embedded devices + * mac80211: don't report selected IBSS when not found + * crypto: tcrypt - Fix memory leak in test_cipher + * sctp: Mark the tsn as received after all allocations finish + * [S390] protect _PAGE_SPECIAL bit against mprotect + * irda: via-ircc proper dma freeing + * irda: New device ID for nsc-ircc + * irda: Fix netlink error path return value + * [SCSI] mptspi: fix oops in mptspi_dv_renegotiate_work() + * Correct hash flushing from huge_ptep_set_wrprotect() + * ide: add __ide_default_irq() inline helper + * palm_bk3710: fix IDECLK period calculation + * it8213: fix return value in it8213_init_one() + * [MIPS] Atlas, decstation: Fix section mismatches triggered by + defconfigs + * [MIPS] Fix 32bit kernels on R4k with 128 byte cache line size + * NFS: Fix readdir cache invalidation + * SUNRPC: Fix a double-free in rpcbind + * SUNRPC: Fix an rpcbind breakage for the case of IPv6 lookups + * reiserfs: discard prealloc in reiserfs_delete_inode + * Fix broken fix for fsl-diu-db + * RDMA/cxgb3: Fix regression caused by class_device -> device conversion + * ipv6: fix race between ipv6_del_addr and DAD timer + * sctp: Add documentation for sctp sysctl variable + * kernel/printk.c: Made printk_recursion_bug_msg static. + * powerpc: Add missing reference to coherent_dma_mask + * rc80211_pid: Fix fast_start parameter handling + * rt2x00: Disable synchronization during initialization + * zd1211rw: stop beacons on remove_interface + * libertas: fix memory alignment problems on the blackfin + * netfilter: nf_conntrack_tcp: fix endless loop + * netfilter: nf_nat_snmp_basic: fix a range check in NAT for SNMP + * md: ensure all blocks are uptodate or locked when syncing + * sched: fix cpu hotplug + * x86: fix /dev/mem compatibility under PAT + * crypto: chainiv - Invoke completion function + * ocfs2: Fix flags in ocfs2_file_lock + * kernel/kprobes.c: Made kprobe_blacklist static. + * arch/x86/kernel/.gitignore: Added vmlinux.lds to .gitignore file + because it shouldn't be tracked. + * ftrace: Documentation + * Fix PREEMPT_RCU without HOTPLUG_CPU + * sched: fix cpu hotplug, cleanup + * exec: fix stack excutability without PT_GNU_STACK + * slub: Fix use-after-preempt of per-CPU data structure + * Documentation: clarify tcp_{r,w}mem sysctl docs + * ip: sysctl documentation cleanup + * tcp: correct kcalloc usage + * ipv4: fib_trie: Fix lookup error return + * netlabel: netlink_unicast calls kfree_skb on error path by itself + * ipv6: missed namespace context in ipv6_rthdr_rcv + * xfrm: Add a XFRM_STATE_AF_UNSPEC flag to xfrm_usersa_info + * tun: Persistent devices can get stuck in xoff state + * tpm: add Intel TPM TIS device HID + * rapidio: fix device reference counting + * Fix name of Russell King in various comments + * rtc: fix reported IRQ rate for when HPET is enabled + * libata-acpi: filter out DIPM enable + * Added Targa Visionary 1000 IDE adapter to pata_sis.c + * libata-acpi: don't call sleeping function from invalid context + * Fix reference counting race on log buffers + * [SCSI] ipr: Fix HDIO_GET_IDENTITY oops for SATA devices + * IPMI: return correct value from ipmi_write + * x86: fix ldt limit for 64 bit + * [SCSI] fusion: default MSI to disabled for SPI and FC controllers + * [SCSI] bsg: fix oops on remove + * drivers/char/pcmcia/ipwireless/hardware.c fix resource leak + * drivers/isdn/i4l/isdn_common.c fix small resource leak + * fbdev: bugfix for multiprocess defio + * serial8250: sanity check nr_uarts on all paths. + * ov7670: clean up ov7670_read semantics + * rtc-fm3130: fix chip naming + * rtc-pcf8563: add chip id + * OProfile kernel maintainership changes + * frv: fix irqs_disabled() to return an int, not an unsigned long + * cifs: fix inode leak in cifs_get_inode_info_unix + * cifs: fix wksidarr declaration to be big-endian friendly + * cpusets, hotplug, scheduler: fix scheduler domain breakage + * Documentation/HOWTO: correct wrong kernel bugzilla FAQ URL + * devcgroup: always show positive major/minor num + * devcgroup: fix permission check when adding entry to child cgroup + * Linux 2.6.26 + + -- Ben Collins Mon, 14 Jul 2008 13:41:50 -0400 + +linux (2.6.26-3.9) intrepid; urgency=low + + * abi: Add dca and ioatdma to modules.ignore + + [ 2.6.26-3.8 ] + + [ Ben Collins ] + + * ubuntu: Add heci driver 3.2.0.24 + * ubuntu: Add heci to kconfig/kbuild + * config: Enable heci module on all flavours + * dm-bbr: Update to get it to compile with 2.6.26 + * config: Enable dm-bbr + * ubuntu: Add some media drivers + * config: Enable misc media drivers + * udeb: Switch to uvesafb in fb-modules + * abi: Add more modules to ignore (known) + + [ 2.6.26-3.7 ] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + - LP: #163075 + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Cleanup arches + * build: Remove remnants of unused binary-custom infrastructure + * build: Remove disable_d_i (not needed) and cleanup ppa build stuff + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * acer-acpi: Fix makefile + * x86/Kconfig: Fix missing quote for ubuntu Kconfig source + * ubuntu: Add iscsitarget module + * ubuntu: Added Amiga FS driver + * ubuntu: Add squashfs driver + * ubuntu: Remove asfs (Amiga FS). Need to be in linux-ports instead + * squashfs: Move headers to real include directory + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Move third-party includes to ubuntu/include + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * ubuntu/Makefile: Fixup dm-raid4-5 and add kludge for kbuild + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + * build: Disable xd block device (ancient) + * ndiswrapper: Fixup makefile + * d-i: Remove efi-modules. The only module, efivars, is built-in + * build: Remove install-source, obsolete and caused build failure + * Ubuntu-2.6.26-1.3 + * build: linux-doc rules got broken when disabling html side. Fixed now. + * Ubuntu-2.6.26-1.4 + * x86: Update to -rc6 allows CONFIG_PCI_OLPC to work with PCI_GOANY + * d-i: Make virtio-ring optional (it's built-in on i386) + * Ubuntu-2.6.26-1.4 + * Ubuntu-2.6.26-1.5 + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + * Ubuntu-2.6.26-2.6 + * Use makedumpfile to generate a vmcoreinfo file. + * build: Build-Depend on makedumpfile for vmcoreinfo generation + * build: Remove debug print from git-ubuntu-log + * Updated configs for -rc7 + * build: postinst, do not call depmod with -F + * config: Enable rtc-cmos as a built-in driver. + * control: Provide ndiswrapper-modules-1.9 + * build: Generate vmcoreinfo in image build for crashdumps without debug + image + * config: Disable vesafb, since we'll prefer uvesafb + * build: Copy uvesafb module to initrd mod directory + * abi-check: New, more robust script + * config: Enable heap randomization by default + * abi-check: Cleanup output and call with perl (not $SHELL) + * abi: Ignore missing vesafb (known) + * config: Disable pcspkr (in favor of snd-pcsp) + * swap: Add notify_swap_entry_free callback for compcache + * compcache: Added ram backed compressed swap module + * ubuntu: Enable kbuild and kconfig for compcache + * config: Enable compcache and tlsf allocator as modules + * config: Updated for -rc8. Disables XEN on i386 + * config: Switch i386-server to 64G, enable PAE, 64-bit res, and XEN + * ubuntu: Add misc drivers from hardy lum + * ubuntu: Enable build of misc/ subdir + * config: Enable misc drivers + * aufs: Fix warning about single non-string-literal arg to printf style + function + * drivers: Remove some duplicate device entries in various modules + * config: Disable some duplicate drivers + * keyspan: Remove duplicate device ID's + * check-aliases: Cleanup output, and fix rolling checks + * ubuntu: Disable dm-bbr for now + * dm-bbr: First cut at forward portiong. Still needs work. + * ubuntu: Disable dm-bbr in kbuild/kconfig + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + - LP: #175834 + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: airprime.c supports more devices + - LP: #208250 + * SAUCE: Enable speedstep for sonoma processors. + - LP: #132271 + * Add dm-loop + * Add dm-loop BOM + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers OriginalAuthor: + Pascal Terjan Bug: #137686 + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. Bug: + #140511 + * SAUCE: Lower warning level of pci resource allocation messages. Bug: + 159241 + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * Added the debian directory. Ignore: yes + * Add support for UBUNTUINCLUDE Ignore: yes + * LUM headers go in /usr/src Ignore: yes + * First pass at 2.6.25 configs Ignore: yes + * i386 -generic builds. Ignore: yes + * SAUCE: Increase CONFIG_IDE_MAX_HWIFS to 8 (from 4) + * SAUCE: Add extra headers to linux-libc-dev OriginalAuthor: Soren Hansen + OriginalLocation: + https://lists.ubuntu.com/archives/kernel-team/2007-November/001891.html + * Set CONFIG_DEVKMEM=n Ignore: yes + * Enabled ALSA and CGROUPS for i386 Ignore: yes + * Enabled amd64 configs. Ignore: yes + * CONFIG_STANDALONE=n Ignore: yes + * CONFIG_BLK_DEV_4DRIVES=n for i386 Ignore: yes + * CONFIG: CONFIG_DEFAULT_RELATIME=y for all flavours. Ignore: yes + * Set CONFIG_EDD_OFF=y Ignore: yes + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + OriginalAuthor: Mario Limonciello Bug: + #209715 + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch OriginalAuthor: Matthew Garrett + Bug: #201591 + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + OriginalAuthor: Klaus S. Madsen + OriginalAuthor: Chuck Short + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: orinoco_cs.ko missing + * Set CONFIG_FB_VESA=m for i386/amd64 Ignore: yes + * Set CONFIG_PM_DISABLE_CONSOLE=y for all flavours Ignore: yes + * Thorough review of amd64 -generic config Ignore: yes + * Build PPA packages for Hardy until the Intrepid archive is opened. + * Deleted obsolete flavours Ignore: yes + * Don't build docs for PPA Ignore: yes + * Build all standard packages in PPA. Ignore: yes + * Remove duplicate USB ids + * SAUCE: DVB-USB UMT-010 driver oops on install Bug: #115284 + * Update configs after rebase to 2.6.26-rc1 Ignore: yes + * Update configs after rebase Ignore: yes + * Disable V4L until the build issues get ironed out. Ignore: yes + * Update configs after rebase. Ignore: yes + * Another device enable pass Ignore: yes + * Update configs after merge. Ignore: yes + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + * Enabled CONFIG_CIFS_DFS_UPCALL=y and CONFIG_CIFS_UPCALL=y + - LP: #236830 + + [Upstream Kernel Changes] + + * Revert "[WATCHDOG] hpwdt: Add CFLAGS to get driver working" + * mac80211: detect driver tx bugs + * hwmon: (lm85) Fix function RANGE_TO_REG() + * hwmon: (adt7473) Initialize max_duty_at_overheat before use + * hwmon: Update the sysfs interface documentation + * hwmon: (abituguru3) Identify Abit AW8D board as such + * hwmon: (w83791d) new maintainer + * hwmon: (abituguru3) update driver detection + * hwmon: (lm75) sensor reading bugfix + * ipv6: Remove options header when setsockopt's optlen is 0 + * ipv6: Drop packets for loopback address from outside of the box. + * sched: rt: dont stop the period timer when there are tasks wanting to + run + * sched: fix wait_for_completion_timeout() spurious failure under heavy + load + * x86: fix NULL pointer deref in __switch_to + * xen: Use wmb instead of rmb in xen_evtchn_do_upcall(). + * xen: mask unwanted pte bits in __supported_pte_mask + * xen: don't drop NX bit + * sched: refactor wait_for_completion_timeout() + * Ext4: Fix online resize block group descriptor corruption + * [IA64] SN2: security hole in sn2_ptc_proc_write + * alpha: fix module load failures on smp (bug #10926) + * alpha: link failure fix + * alpha: fix compile failures with gcc-4.3 (bug #10438) + * alpha: resurrect Cypress IDE quirk + * pppoe: warning fix + * sctp: Make sure N * sizeof(union sctp_addr) does not overflow. + * netns: Don't receive new packets in a dead network namespace. + * Add return value to reserve_bootmem_node() + * Slab: Fix memory leak in fallback_alloc() + * Fix performance regression on lmbench select benchmark + * ALSA: aw2 - Fix Oops at initialization + * ALSA: sb - Fix wrong assertions + * futexes: fix fault handling in futex_lock_pi + * IB/mthca: Clear ICM pages before handing to FW + * tty_driver: Update required method documentation + * removed unused var real_tty on n_tty_ioctl() + * Fix ZERO_PAGE breakage with vmware + * mm: fix race in COW logic + * NFS: Reduce the NFS mount code stack usage. + * NFS: Fix filehandle size comparisons in the mount code + * NFS: nfs_updatepage(): don't mark page as dirty if an error occurred + * alpha: fix compile error in arch/alpha/mm/init.c + * KVM: Fix race between timer migration and vcpu migration + * KVM: close timer injection race window in __vcpu_run + * KVM: MMU: Fix rmap_write_protect() hugepage iteration bug + * KVM: MMU: large page update_pte issue with non-PAE 32-bit guests + (resend) + * KVM: MMU: Fix oops on guest userspace access to guest pagetable + * KVM: ioapic: fix lost interrupt when changing a device's irq + * KVM: VMX: Fix host msr corruption with preemption enabled + * [GFS2] BUG: unable to handle kernel paging request at ffff81002690e000 + * xen: remove support for non-PAE 32-bit + * kgdb: documentation update - remove kgdboe + * kgdb: sparse fix + * [IA64] Fix boot failure on ia64/sn2 + * [IA64] Handle count==0 in sn2_ptc_proc_write() + * [IA64] Eliminate NULL test after alloc_bootmem in iosapic_alloc_rte() + * [GFS2] fix gfs2 block allocation (cleaned up) + * x86: Add structs and functions for paravirt clocksource + * x86: Make xen use the paravirt clocksource structs and functions + * KVM: Make kvm host use the paravirt clocksource structs + * x86: KVM guest: Use the paravirt clocksource structs and functions + * KVM: Remove now unused structs from kvm_para.h + * enable bus mastering on i915 at resume time + * Linux 2.6.26-rc8 + * # Ubuntu external driver commit. + * # Ubuntu commit template. + + -- Ben Collins Sat, 21 Jun 2008 09:05:15 -0400 + +linux (2.6.26-2.6) intrepid; urgency=low + + [Ben Collins] + + * Revert "SAUCE: Export symbols for aufs (in lum) (not needed) + * config: Enable DVB devices + * ubuntu/aufs: Make aufs a bool config, since it needs to be built-in + * config: Build aufs into the kernels + * build: Fix arguments passed to link-headers script + * config: Disable early printk + * d-i: Move isofs to storage-core and kill st (scsi tape) from list + * config: Enable non-promiscuous access to /dev/mem + * x86: Add option to disable decompression info messages + * config: Enable no-bz-chatter config options + * build: Re-add linux-source package + * d-i: Re-add socket-modules. Accidentally removed + - LP: #241295 + + [Colin Ian King] + + * Add dm-loop + + [Tim Gardner] + + * Revert "SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to + syslog (merged upstream) + + -- Ben Collins Mon, 16 Jun 2008 10:56:01 -0400 + +linux (2.6.26-1.5) intrepid; urgency=low + + * d-i: Make virtio-ring optional (it's built-in on i386) + * Rebased on 2.6.26-rc6 + + [Ubuntu-2.6.26-1.4 Changes below] + + * build: linux-doc rules got broken when disabling html side. Fixed now. + + [Ubuntu-2.6.26-1.3 Changes below] + + * build: Remove install-source, obsolete and caused build failure + + [Ubuntu-2.6.26-1.2 Changes below] + + * Remove efi-modules from d-i module list (efivars is built-in). Caused a + build failure. + * Patch to arch/x86/xen/time.c to remove __divdi3 usage (build failure on + i386). + + [Ubuntu-2.6.26-1.1 Changes below] + + [Amit Kucheria] + + * SAUCE: make fc transport removal of target configurable + * SAUCE: Add AGP support for Radeon Mobility 9000 chipset + * SAUCE: pm: Config option to disable handling of console during + suspend/resume + + [Ben Collins] + + * SAUCE: input/mouse/alps: Do not call psmouse_reset() for alps + * SAUCE: irda: Default to dongle type 9 on IBM hardware + * SAUCE: tulip: Let dmfe handle davicom on non-sparc + * SAUCE: tulip: Define ULI PCI ID's + * SAUCE: version: Implement version_signature proc file. + * build: Remove remnants of unused binary-custom infrastructure + * mmc_block: Fix bad allocation on 64-bit (zero len array) + * ubuntu: New modules, acer-acpi + * build: Remove -virtual, and rebuild configs + * ubuntu: Add drbd module + * ubuntu: Add iscsitarget module + * ubuntu: Add squashfs driver + * build/configs: The Great Config Consistency Check of 2008 + * ubuntu: Add aufs module + * ubuntu: Added atl2 driver + * ubuntu: Add dm-radi4-5 driver + * build: Add CONFIG_DEBUG_SECTION_MISMATCH=y to get old style warnings + from build + * squashfs: Fixes for VFS changes + * ubuntu/dm-raid4-5: Fixups for moved/renamed headers/functions in core + md + * ubuntu: Add ndiswrapper driver + * d-i: Update module listings + + [Chuck Short] + + * SAUCE: ata: blacklist FUJITSU MHW2160BH PL + * SAUCE: [USB]: add ASUS LCM to the blacklist + + [Colin Ian King] + + * SAUCE: Enable speedstep for sonoma processors. + * SAUCE: airprime.c supports more devices + + [Kyle McMartin] + + * SAUCE: fix orinoco_cs oops + + [Mario Limonciello] + + * SAUCE: Enable Reset and SCO workaround on Dell 410 BT adapter + + [Matthew Garrett] + + * SAUCE: hostap: send events on data interface as well as master + interface + + [Phillip Lougher] + + * SAUCE: r8169: disable TSO by default for RTL8111/8168B chipsets. + + [Stefan Bader] + + * SAUCE: Export dm_disk function of device-mapper + * SAUCE: Restore VT fonts on switch + * SAUCE: Always use SCO protocol (disable eSCO support) Bug: #39414 + * SAUCE: mmc: Increase power_up deleay to fix TI readers + * SAUCE: Add blacklist support to fix Belkin bluetooth dongle. + * SAUCE: Lower warning level of pci resource allocation messages. + * SAUCE: Lower message level for PCI memory and I/O allocation. + - LP: #159241 + * Modify log generation to catch bug numbers when adding with git-am. + + [Tim Gardner] + + * SAUCE: hdaps module does not load on Thinkpad T61P + * SAUCE: Add extra headers to linux-libc-dev + * SAUCE: Export symbols for aufs (in lum). + * SAUCE: USB bluetooth device 0x0e5e:0x6622 floods errors to syslog + * SAUCE: Blacklist Bluetooth Dell Wireless 370 for SCO MTU + * SAUCE: Catch nonsense keycodes and silently ignore + * SAUCE: frame buffer regression - screen blank except for blinking + cursor after fbcon vtswitch + * SAUCE: Added support for HDAPS on various ThinkPads from Lenovo and IBM + * SAUCE: Guest OS does not recognize a lun with non zero target id on + Vmware ESX Server + * SAUCE: Modualrize vesafb + * SAUCE: DVB-USB UMT-010 driver oops on install + * SAUCE: fn key doesn't work in hardy with macbook pro fourth generation + (4,1) + - LP: #207127 + + -- Ben Collins Wed, 11 Jun 2008 05:28:35 -0400 --- linux-ec2-2.6.32.orig/debian.ec2/control.stub +++ linux-ec2-2.6.32/debian.ec2/control.stub @@ -0,0 +1,112 @@ +Source: linux-ec2 +Section: devel +Priority: optional +Maintainer: Ubuntu Kernel Team +Standards-Version: 3.8.4.0 +Build-Depends: debhelper (>= 5), cpio, module-init-tools, kernel-wedge (>= 2.24ubuntu1), makedumpfile [amd64 i386], gawk +Build-Depends-Indep: xmlto, docbook-utils, ghostscript, transfig, bzip2, sharutils +Build-Conflicts: findutils (= 4.4.1-1ubuntu1) +Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-karmic.git + +Package: linux-ec2-source-2.6.32 +Architecture: all +Section: devel +Priority: optional +Provides: linux-ec2-source, linux-ec2-source-2.6 +Depends: ${misc:Depends}, binutils, bzip2, coreutils | fileutils (>= 4.0) +Recommends: libc-dev, gcc, make +Suggests: libncurses-dev | ncurses-dev, kernel-package, libqt3-dev +Description: Linux kernel source for version 2.6.32 with Ubuntu patches + This package provides the source code for the Linux kernel version + 2.6.32. + . + This package is mainly meant for other packages to use, in order to build + custom flavours. + . + If you wish to use this package to create a custom Linux kernel, then it + is suggested that you investigate the package kernel-package, which has + been designed to ease the task of creating kernel image packages. + . + If you are simply trying to build third-party modules for your kernel, + you do not want this package. Install the appropriate linux-headers + package instead. + +Package: linux-ec2-doc +Architecture: all +Section: doc +Priority: optional +Depends: ${misc:Depends} +Conflicts: linux-ec2-doc-2.6 +Replaces: linux-ec2-doc-2.6 +Description: Linux kernel specific documentation for version 2.6.32 + This package provides the various documents in the 2.6.32 kernel + Documentation/ subdirectory. These document kernel subsystems, APIs, device + drivers, and so on. See + /usr/share/doc/linux-ec2-doc/00-INDEX for a list of what is + contained in each file. + +Package: linux-headers-2.6.32-368 +Architecture: all +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0) +#Provides: linux-headers, linux-headers-2.6 +Description: Header files related to Linux kernel version 2.6.32 + This package provides kernel header files for version 2.6.32, for sites + that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-368/debian.README.gz for details + + +Package: linux-image-2.6.32-368-ec2 +Architecture: i386 amd64 +Section: admin +Priority: optional +Pre-Depends: dpkg (>= 1.10.24) +Provides: linux-image, linux-image-2.6, fuse-module, kvm-api-4, redhat-cluster-modules, ivtv-modules, ndiswrapper-modules-1.9 +Depends: ${misc:Depends}, initramfs-tools (>= 0.36ubuntu6), coreutils | fileutils (>= 4.0), module-init-tools (>= 3.3-pre11-4ubuntu3) +Conflicts: hotplug (<< 0.0.20040105-1) +Recommends: +Suggests: fdutils, linux-ec2-doc-2.6.32 | linux-ec2-source-2.6.32 +Description: Linux kernel image for version 2.6.32 on x86/x86_64 + This package contains the Linux kernel image for version 2.6.32 on + x86/x86_64. + . + Also includes the corresponding System.map file, the modules built by the + packager, and scripts that try to ensure that the system is not left in an + unbootable state after an update. + . + Supports Generic processors. + . + Geared toward desktop systems. + . + You likely do not want to install this package directly. Instead, install + the linux-ec2 meta-package, which will ensure that upgrades work + correctly, and that supporting packages are also installed. + +Package: linux-headers-2.6.32-368-ec2 +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends}, coreutils | fileutils (>= 4.0), linux-headers-2.6.32-368, ${shlibs:Depends} +Description: Linux kernel headers for version 2.6.32 on x86/x86_64 + This package provides kernel header files for version 2.6.32 on + x86/x86_64. + . + This is for sites that want the latest kernel headers. Please read + /usr/share/doc/linux-headers-2.6.32-368/debian.README.gz for details. + +Package: linux-image-2.6.32-368-ec2-dbgsym +Architecture: i386 amd64 +Section: devel +Priority: optional +Depends: ${misc:Depends} +Provides: linux-debug +Description: Linux kernel debug image for version 2.6.32 on x86/x86_64 + This package provides a kernel debug image for version 2.6.32 on + x86/x86_64. + . + This is for sites that wish to debug the kernel. + . + The kernel image contained in this package is NOT meant to boot from. It + is uncompressed, and unstripped. This package also includes the + unstripped modules. --- linux-ec2-2.6.32.orig/debian.ec2/deviations.txt +++ linux-ec2-2.6.32/debian.ec2/deviations.txt @@ -0,0 +1,97 @@ +XEN PATCHSET +F: drivers/pci/msi.c +F: drivers/hwmon/coretemp.c +F: lib/swiotlb.c +F: arch/x86/kernel/pci-dma.c +F: arch/x86/kernel/ioport.c +F: arch/x86/kernel/smp.c +F: arch/x86/kernel/process_32.c +F: arch/x86/kernel/setup.c +F: arch/x86/kernel/quirks.c +F: arch/x86/kernel/entry_64.S +F: arch/x86/kernel/process.c +F: arch/x86/kernel/pci-nommu.c +F: arch/x86/kernel/head64.c +F: arch/x86/kernel/head.c +F: arch/x86/kernel/head_32.S +F: arch/x86/kernel/irq.c +F: arch/x86/kernel/early_printk.c +F: arch/x86/kernel/process_64.c +F: arch/x86/kernel/mpparse.c +F: arch/x86/kernel/acpi/sleep.c +F: arch/x86/kernel/entry_32.S +F: arch/x86/kernel/traps.c +F: arch/x86/kernel/apic/ipi.c +F: arch/x86/kernel/apic/probe_32.c +F: arch/x86/kernel/apic/io_apic.c +F: arch/x86/kernel/apic/apic.c +F: arch/x86/kernel/microcode_core.c +F: arch/x86/kernel/head_64.S +F: arch/x86/kernel/x86_init.c +F: arch/x86/kernel/ldt.c +F: arch/x86/kernel/head32.c +F: arch/x86/kernel/vsyscall_64.c +F: arch/x86/kernel/cpu/common.c +F: arch/x86/kernel/cpu/mtrr/main.c +F: arch/x86/kernel/e820.c +F: arch/x86/kernel/time.c +F: arch/x86/pci/irq.c +F: arch/x86/mm/init.c +F: arch/x86/mm/iomap_32.c +F: arch/x86/mm/highmem_32.c +F: arch/x86/mm/init_32.c +F: arch/x86/mm/pgtable.c +F: arch/x86/mm/pgtable_32.c +F: arch/x86/mm/ioremap.c +F: arch/x86/mm/pageattr.c +F: arch/x86/mm/pat.c +F: arch/x86/mm/init_64.c +F: arch/x86/mm/fault.c +F: arch/x86/vdso/vdso32-setup.c +F: arch/x86/ia32/ia32entry.S +F: mm/tmem.c +F: arch/x86/include/asm/agp.h +F: arch/x86/include/asm/desc.h +F: arch/x86/include/asm/dma-mapping.h +F: arch/x86/include/asm/fixmap.h +F: arch/x86/include/asm/gnttab_dma.h +F: arch/x86/include/asm/highmem.h +F: arch/x86/include/asm/hypercall_32.h +F: arch/x86/include/asm/hypercall_64.h +F: arch/x86/include/asm/hypercall.h +F: arch/x86/include/asm/hypervisor.h +F: arch/x86/include/asm/io.h +F: arch/x86/include/asm/ipi.h +F: arch/x86/include/asm/irqflags.h +F: arch/x86/include/asm/irq_vectors.h +F: arch/x86/include/asm/mach_traps.h +F: arch/x86/include/asm/maddr_32.h +F: arch/x86/include/asm/maddr_64.h +F: arch/x86/include/asm/maddr.h +F: arch/x86/include/asm/mmu_context.h +F: arch/x86/include/asm/pci.h +F: arch/x86/include/asm/pgalloc.h +F: arch/x86/include/asm/pgtable_32.h +F: arch/x86/include/asm/pgtable-3level.h +F: arch/x86/include/asm/pgtable-3level_types.h +F: arch/x86/include/asm/pgtable_64.h +F: arch/x86/include/asm/pgtable_64_types.h +F: arch/x86/include/asm/pgtable.h +F: arch/x86/include/asm/pgtable_types.h +F: arch/x86/include/asm/processor.h +F: arch/x86/include/asm/setup.h +F: arch/x86/include/asm/smp.h +F: arch/x86/include/asm/smp-processor-id.h +F: arch/x86/include/asm/spinlock.h +F: arch/x86/include/asm/swiotlb.h +F: arch/x86/include/asm/synch_bitops.h +F: arch/x86/include/asm/system_64.h +F: arch/x86/include/asm/system.h +F: arch/x86/include/asm/tlbflush.h +F: arch/x86/include/asm/vga.h +F: arch/x86/include/asm/xenoprof.h +F: arch/x86/include/asm/xor_64.h +F: arch/x86/include/asm/xor.h +F: drivers/xen/* +F: drivers/block/xen-blkfront.c +F: drivers/net/xen-netfront.c --- linux-ec2-2.6.32.orig/debian.ec2/copyright +++ linux-ec2-2.6.32/debian.ec2/copyright @@ -0,0 +1,30 @@ +This is the Ubuntu prepackaged version of the Linux kernel. +Linux was written by Linus Torvalds +and others. + +This package was put together by the Ubuntu Kernel Team, from +sources retrieved from upstream linux git. +The sources may be found at most Linux ftp sites, including +ftp://ftp.kernel.org/pub/linux/kernel/ + +This package is currently maintained by the +Ubuntu Kernel Team + +Linux is copyrighted by Linus Torvalds and others. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 dated June, 1991. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. + +On Ubuntu Linux systems, the complete text of the GNU General +Public License v2 can be found in `/usr/share/common-licenses/GPL-2'. --- linux-ec2-2.6.32.orig/debian.ec2/NOTES +++ linux-ec2-2.6.32/debian.ec2/NOTES @@ -0,0 +1,4 @@ +eSCO patch removed. Replaced upstream with a disable_esco module parm. +airprime: Module gone, use option driver instead +AppArmor: Patch is all there and ported. Ooops when enabled, so default + off (still can be enabled apparmor=1) --- linux-ec2-2.6.32.orig/debian.ec2/rules +++ linux-ec2-2.6.32/debian.ec2/rules @@ -0,0 +1,222 @@ +#!/usr/bin/make -f +# +# $(DEBIAN)/rules for Ubuntu linux +# +# Use this however you want, just give credit where credit is due. +# +# Copyright (c) 2007 Ben Collins +# + +ifeq ($(DEBIAN),) +DEBIAN=debian.master +endif + +# dpkg-buildpackage passes options that are incomptatible +# with the kernel build. +unexport CFLAGS +unexport LDFLAGS + +# This is the debhelper compatability version to use. +export DH_COMPAT=4 +export LC_ALL=C +export SHELL=/bin/bash -e + +# Common variables for all architectures +include $(DEBIAN)/rules.d/0-common-vars.mk + +# Pull in some arch specific stuff +include $(DEBIAN)/rules.d/$(arch).mk + +# Maintainer targets +include $(DEBIAN)/rules.d/1-maintainer.mk + +# Debian Build System targets +binary: binary-indep binary-arch + +build: build-arch build-indep + +clean: debian/control + dh_testdir + dh_testroot + dh_clean + + # d-i stuff + rm -rf $(DEBIAN)/d-i-$(arch) + + # normal build junk + rm -rf $(DEBIAN)/abi/$(release)-$(revision) + rm -rf $(builddir) + rm -f $(stampdir)/stamp-* + rm -rf $(DEBIAN)/linux-* + + # This gets rid of the d-i packages in control + cp -f $(DEBIAN)/control.stub $(DEBIAN)/control + cp $(DEBIAN)/changelog debian/changelog + + # Install the copyright information. + cp $(DEBIAN)/copyright debian/copyright + +# Builds the image, arch headers and debug packages +include $(DEBIAN)/rules.d/2-binary-arch.mk + +# Rules for building the udebs ($(DEBIAN)-installer) +include $(DEBIAN)/rules.d/5-udebs.mk + +# Builds the source, doc and linux-headers indep packages +include $(DEBIAN)/rules.d/3-binary-indep.mk + +# Various checks to be performed on builds +include $(DEBIAN)/rules.d/4-checks.mk + +# Misc stuff +$(DEBIAN)/control.stub: $(DEBIAN)/d-i/kernel-versions.in \ + $(DEBIAN)/scripts/control-create \ + $(DEBIAN)/control.stub.in \ + $(DEBIAN)/changelog \ + $(wildcard $(DEBIAN)/control.d/* $(DEBIAN)/sub-flavours/*.vars) + for i in $(DEBIAN)/d-i/kernel-versions.in $(DEBIAN)/control.stub.in; do \ + new=`echo $$i | sed 's/\.in$$//'`; \ + cat $$i | sed -e 's/PKGVER/$(release)/g' \ + -e 's/ABINUM/$(abinum)/g' \ + -e 's/SRCPKGNAME/$(src_pkg_name)/g' \ + > $$new; \ + done + flavours="$(wildcard $(DEBIAN)/control.d/vars.* $(DEBIAN)/sub-flavours/*.vars)";\ + for i in $$flavours; do \ + $(SHELL) $(DEBIAN)/scripts/control-create $$i | \ + sed -e 's/PKGVER/$(release)/g' \ + -e 's/ABINUM/$(abinum)/g' \ + -e 's/SRCPKGNAME/$(src_pkg_name)/g' \ + >> $(DEBIAN)/control.stub; \ + done + cp $(DEBIAN)/control.stub $(DEBIAN)/control + +.PHONY: debian/control +debian/control: $(DEBIAN)/control.stub + rm -rf $(builddir)/modules $(builddir)/firmware \ + $(builddir)/kernel-versions $(builddir)/package-list \ + $(builddir)/$(DEBIAN) + mkdir -p $(builddir)/modules/$(arch)/ + cp $(DEBIAN)/d-i/modules/* $(builddir)/modules/$(arch)/ + mkdir -p $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/firmware/* $(builddir)/firmware/$(arch)/ + cp $(DEBIAN)/d-i/package-list $(DEBIAN)/d-i/kernel-versions $(builddir)/ + touch $(builddir)/modules/$(arch)/kernel-image + # kernel-wedge needs to poke around in $(DEBIAN)/ + ln -nsf $(CURDIR)/debian $(builddir)/debian + + # Some files may need to differ between architectures + if [ -d $(DEBIAN)/d-i/modules-$(arch) ]; then \ + cp $(DEBIAN)/d-i/modules-$(arch)/* \ + $(builddir)/modules/$(arch)/; \ + fi + if [ -d $(DEBIAN)/d-i/firmware-$(arch) ]; then \ + cp $(DEBIAN)/d-i/firmware-$(arch)/* \ + $(builddir)/firmware/$(arch)/; \ + fi + + # Remove unwanted stuff for this architecture + if [ -r "$(DEBIAN)/d-i/exclude-modules.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-modules.$(arch); \ + ls $(builddir)/modules/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)/; xargs rm -f); \ + fi + if [ -r "$(DEBIAN)/d-i/exclude-firmware.$(arch)" ]; then \ + (cat $(DEBIAN)/d-i/exclude-firmware.$(arch); \ + ls $(builddir)/firmware/$(arch)/) | sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)/; xargs rm -f); \ + fi + + # Per flavour module lists + flavour_modules=`ls $(DEBIAN)/d-i/modules.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_modules" != "" ]; then \ + for flav in $$flavour_modules; do \ + name=`echo $$flav | sed 's/.*\/modules.$(arch)-//'`; \ + mkdir $(builddir)/modules/$(arch)-$$name; \ + (cd $(builddir)/modules/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/modules/$(arch)-$$name/; tar xf -); \ + touch $(builddir)/modules/$(arch)-$$name/kernel-image; \ + done; \ + fi + flavour_firmware=`ls $(DEBIAN)/d-i/firmware.$(arch)-* 2>/dev/null` \ + || true; \ + if [ "$$flavour_firmware" != "" ]; then \ + for flav in $$flavour_firmware; do \ + name=`echo $$flav | sed 's/.*\/firmware.$(arch)-//'`; \ + mkdir $(builddir)/firmware/$(arch)-$$name; \ + (cd $(builddir)/firmware/; tar cf - `cat ../$$flav`) | \ + (cd $(builddir)/firmware/$(arch)-$$name/; tar xf -);\ + touch $(builddir)/firmware/$(arch)-$$name/kernel-image; \ + done; \ + fi + + # Some files may need to differ between flavours + flavour_module_dirs=`ls -d $(DEBIAN)/d-i/modules-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_module_dirs" ]; then \ + for flav in $$flavour_module_dirs; do \ + name=`echo $$flav | sed 's/.*\/modules-$(arch)-//'`; \ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + modules/$(arch)-$$name; \ + cp $$flav/* $(builddir)/modules/$(arch)-$$name/; \ + done; \ + fi + flavour_firmware_dirs=`ls -d $(DEBIAN)/d-i/firmware-$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_firmware_dirs" ]; then \ + for flav in $$flavour_firmware_dirs; do \ + name=`echo $$flav | sed 's/.*\/firmware-$(arch)-//'`; \ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + firmware/$(arch)-$$name; \ + cp $$flav/* $(builddir)/firmware/$(arch)-$$name/; \ + done; \ + fi + + # Remove unwanted stuff for each flavour + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-modules.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-modules.$(arch)-//'`;\ + [ -d $(builddir)/modules/$(arch)-$$name ] || \ + cp -a $(builddir)/modules/$(arch) \ + $(builddir)/modules/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/modules/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/modules/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + flavour_exclude=`ls $(DEBIAN)/d-i/exclude-firmware.$(arch)-* 2>/dev/null`\ + || true; \ + if [ "$$flavour_exclude" ]; then \ + for flav in $$flavour_exclude; do \ + name=`echo $$flav | sed 's/.*\/exclude-firmware.$(arch)-//'`;\ + [ -d $(builddir)/firmware/$(arch)-$$name ] || \ + cp -a $(builddir)/firmware/$(arch) \ + $(builddir)/firmware/$(arch)-$$name; \ + (cat $$flav; \ + ls $(builddir)/firmware/$(arch)-$$name) | \ + sort | uniq -d | \ + (cd $(builddir)/firmware/$(arch)-$$name/; \ + xargs rm -f); \ + done; \ + fi + + if [ ! -d $(builddir)/modules/$(build_arch) ]; then \ + mkdir -p $(builddir)/modules/$(build_arch); \ + cp $(builddir)/modules/$(arch)/* \ + $(builddir)/modules/$(build_arch); \ + fi + if [ ! -d $(builddir)/firmware/$(build_arch) ]; then \ + mkdir -p $(builddir)/firmware/$(build_arch); \ + cp $(builddir)/firmware/$(arch)/* \ + $(builddir)/firmware/$(build_arch); \ + fi + + cp $(DEBIAN)/control.stub debian/control.stub + cd $(builddir) && kernel-wedge gen-control > $(CURDIR)/debian/control --- linux-ec2-2.6.32.orig/debian.ec2/changelog +++ linux-ec2-2.6.32/debian.ec2/changelog @@ -0,0 +1,12356 @@ +linux-ec2 (2.6.32-368.83) lucid; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-64.127 + * Release Tracking Bug + - LP: #1339215 + + [ Ubuntu: 2.6.32-64.127 ] + + * Merged back Ubuntu-2.6.32-62.126 security release + * Revert "x86_64,ptrace: Enforce RIP <= TASK_SIZE_MAX (CVE-2014-4699)" + - LP: #1337339 + * ptrace,x86: force IRET path after a ptrace_stop() + - LP: #1337339 + - CVE-2014-4699 + + -- Stefan Bader Wed, 09 Jul 2014 09:34:30 +0200 + +linux-ec2 (2.6.32-367.82) lucid; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-63.126 + * Release Tracking Bug + - LP: #1336142 + + [ Ubuntu: 2.6.32-63.126 ] + + * net: check net.core.somaxconn sysctl values + - LP: #1321293 + * sysctl net: Keep tcp_syn_retries inside the boundary + - LP: #1321293 + * ethtool: Report link-down while interface is down + - LP: #1335049 + * futex: Prevent attaching to kernel threads + - LP: #1335049 + * auditsc: audit_krule mask accesses need bounds checking + - LP: #1335049 + * net: fix regression introduced in 2.6.32.62 by sysctl fixes + - LP: #1335049 + * Linux 2.6.32.63 + - LP: #1335049 + * lib/lzo: Rename lzo1x_decompress.c to lzo1x_decompress_safe.c + - LP: #1335313 + - CVE-2014-4608 + * lib/lzo: Update LZO compression to current upstream version + - LP: #1335313 + - CVE-2014-4608 + * lzo: properly check for overruns + - LP: #1335313 + - CVE-2014-4608 + + -- Stefan Bader Tue, 01 Jul 2014 10:14:23 +0200 + +linux-ec2 (2.6.32-366.80) lucid; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-62.125 + * Release Tracking Bug + - LP: #1328287 + + [ Upstream Kernel Changes ] + + * blkfront: fixes for 'xm block-detach ... --force' + - LP: #1326870 + * blkfront: don't access freed struct xenbus_device + - LP: #1326870 + * blkfront: Clean up vbd release + - LP: #1326870 + * blkfront: Lock blkfront_info when closing + - LP: #1326870 + + [ Ubuntu: 2.6.32-62.125 ] + + * SAUCE: (no-up) Fix regression introduced by patch, for CVE-2014-3153 + - LP: #1327300 + * [Config] add debian/gbp.conf + * filter: prevent nla extensions to peek beyond the end of the message + - LP: #1319561, #1319563 + - CVE-2014-3145 + + -- Stefan Bader Wed, 11 Jun 2014 11:13:31 +0200 + +linux-ec2 (2.6.32-365.79) lucid; urgency=low + + [ Brad Figg ] + + * Rebased to Ubuntu-2.6.32-61.124 + + -- Brad Figg Wed, 04 Jun 2014 15:25:02 -0700 + +linux-ec2 (2.6.32-365.78) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-61.123 + * Release Tracking Bug + - LP: #1321928 + + [ Ubuntu: 2.6.32-61.123 ] + + * mm: try_to_unmap_cluster() should lock_page() before mlocking + - LP: #1316268 + - CVE-2014-3122 + * ipc/msg: fix race around refcount + - LP: #1248713 + - CVE-2013-4483 + * scsi: fix missing include linux/types.h in scsi_netlink.h + - LP: #1321293 + * Fix lockup related to stop_machine being stuck in __do_softirq. + - LP: #1321293 + * x86, ptrace: fix build breakage with gcc 4.7 (second try) + - LP: #1321293 + * ipvs: fix CHECKSUM_PARTIAL for TCP, UDP + - LP: #1321293 + * intel-iommu: Flush unmaps at domain_exit + - LP: #1321293 + * staging: comedi: ni_65xx: (bug fix) confine insn_bits to one subdevice + - LP: #1321293 + * kernel/kmod.c: check for NULL in call_usermodehelper_exec() + - LP: #1321293 + * HID: check for NULL field when setting values + - LP: #1321293 + * crypto: api - Fix race condition in larval lookup + - LP: #1321293 + * ipv6: tcp: fix panic in SYN processing + - LP: #1321293 + * tcp: must unclone packets before mangling them + - LP: #1321293 + * net: do not call sock_put() on TIMEWAIT sockets + - LP: #1321293 + * net: heap overflow in __audit_sockaddr() + - LP: #1321293 + * proc connector: fix info leaks + - LP: #1321293 + * can: dev: fix nlmsg size calculation in can_get_size() + - LP: #1321293 + * net: vlan: fix nlmsg size calculation in vlan_get_size() + - LP: #1321293 + * connector: use nlmsg_len() to check message length + - LP: #1321293 + * net: dst: provide accessor function to dst->xfrm + - LP: #1321293 + * sctp: Use software crc32 checksum when xfrm transform will happen. + - LP: #1321293 + * sctp: Perform software checksum if packet has to be fragmented. + - LP: #1321293 + * davinci_emac.c: Fix IFF_ALLMULTI setup + - LP: #1321293 + * resubmit bridge: fix message_age_timer calculation + - LP: #1321293 + * ipv6 mcast: use in6_dev_put in timer handlers instead of __in6_dev_put + - LP: #1321293 + * ipv4 igmp: use in_dev_put in timer handlers instead of __in_dev_put + - LP: #1321293 + * dm9601: fix IFF_ALLMULTI handling + - LP: #1321293 + * bonding: Fix broken promiscuity reference counting issue + - LP: #1321293 + * ll_temac: Reset dma descriptors indexes on ndo_open + - LP: #1321293 + * tcp: fix tcp_md5_hash_skb_data() + - LP: #1321293 + * ipv6: fix possible crashes in ip6_cork_release() + - LP: #1321293 + * ip_tunnel: fix kernel panic with icmp_dest_unreach + - LP: #1321293 + * net: sctp: fix NULL pointer dereference in socket destruction + - LP: #1321293 + * packet: packet_getname_spkt: make sure string is always 0-terminated + - LP: #1321293 + * neighbour: fix a race in neigh_destroy() + - LP: #1321293 + * net: Swap ver and type in pppoe_hdr + - LP: #1321293 + * sunvnet: vnet_port_remove must call unregister_netdev + - LP: #1321293 + * ifb: fix rcu_sched self-detected stalls + - LP: #1321293 + * dummy: fix oops when loading the dummy failed + - LP: #1321293 + * ifb: fix oops when loading the ifb failed + - LP: #1321293 + * vlan: fix a race in egress prio management + - LP: #1321293 + * arcnet: cleanup sizeof parameter + - LP: #1321293 + * sysctl net: Keep tcp_syn_retries inside the boundary + - LP: #1321293 + * sctp: fully initialize sctp_outq in sctp_outq_init + - LP: #1321293 + * net_sched: Fix stack info leak in cbq_dump_wrr(). + - LP: #1321293 + * af_key: more info leaks in pfkey messages + - LP: #1321293 + * net_sched: info leak in atm_tc_dump_class() + - LP: #1321293 + * htb: fix sign extension bug + - LP: #1321293 + * net: check net.core.somaxconn sysctl values + - LP: #1321293 + * tcp: cubic: fix bug in bictcp_acked() + - LP: #1321293 + * ipv6: don't stop backtracking in fib6_lookup_1 if subtree does not + match + - LP: #1321293 + * ipv6: drop packets with multiple fragmentation headers + - LP: #1321293 + * ipv6: Don't depend on per socket memory for neighbour discovery + messages + - LP: #1321293 + * ICMPv6: treat dest unreachable codes 5 and 6 as EACCES, not EPROTO + - LP: #1321293 + * tipc: fix lockdep warning during bearer initialization + - LP: #1321293 + * net: Fix "ip rule delete table 256" + - LP: #1321293 + * ipv6: use rt6_get_dflt_router to get default router in rt6_route_rcv + - LP: #1321293 + * random32: fix off-by-one in seeding requirement + - LP: #1321293 + * bonding: fix two race conditions in bond_store_updelay/downdelay + - LP: #1321293 + * isdnloop: use strlcpy() instead of strcpy() + - LP: #1321293 + * ipv4: fix possible seqlock deadlock + - LP: #1321293 + * net: add BUG_ON if kernel advertises msg_namelen > sizeof(struct + sockaddr_storage) + - LP: #1321293 + * net: clamp ->msg_namelen instead of returning an error + - LP: #1321293 + * ipv6: fix leaking uninitialized port number of offender sockaddr + - LP: #1321293 + * atm: idt77252: fix dev refcnt leak + - LP: #1321293 + * net: core: Always propagate flag changes to interfaces + - LP: #1321293 + * bridge: flush br's address entry in fdb when remove the bridge dev + - LP: #1321293 + * inet: fix possible seqlock deadlocks + - LP: #1321293 + * ipv6: fix possible seqlock deadlock in ip6_finish_output2 + - LP: #1321293 + * {pktgen, xfrm} Update IPv4 header total len and checksum after + tranformation + - LP: #1321293 + * net: drop_monitor: fix the value of maxattr + - LP: #1321293 + * net: unix: allow bind to fail on mutex lock + - LP: #1321293 + * drivers/net/hamradio: Integer overflow in hdlcdrv_ioctl() + - LP: #1321293 + * net: llc: fix use after free in llc_ui_recvmsg + - LP: #1321293 + * inet_diag: fix inet_diag_dump_icsk() timewait socket state logic + - LP: #1321293 + * net: fix 'ip rule' iif/oif device rename + - LP: #1321293 + * tg3: Fix deadlock in tg3_change_mtu() + - LP: #1321293 + * bonding: 802.3ad: make aggregator_identifier bond-private + - LP: #1321293 + * net: sctp: fix sctp_connectx abi for ia32 emulation/compat mode + - LP: #1321293 + * virtio-net: alloc big buffers also when guest can receive UFO + - LP: #1321293 + * tg3: Don't check undefined error bits in RXBD + - LP: #1321293 + * net: sctp: fix skb leakage in COOKIE ECHO path of chunk->auth_chunk + - LP: #1321293 + * net: socket: error on a negative msg_namelen + - LP: #1321293 + * netlink: don't compare the nul-termination in nla_strcmp + - LP: #1321293 + * isdnloop: several buffer overflows + - LP: #1321293 + * isdnloop: Validate NUL-terminated strings from user. + - LP: #1321293 + * sctp: unbalanced rcu lock in ip_queue_xmit() + - LP: #1321293 + * ipv6: udp packets following an UFO enqueued packet need also be handled + by UFO + - LP: #1321293 + * inet: fix possible memory corruption with UDP_CORK and UFO + - LP: #1321293 + * x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround + - LP: #1321293 + * gianfar: disable TX vlan based on kernel 2.6.x + - LP: #1321293 + * powernow-k6: set transition latency value so ondemand governor can be + used + - LP: #1321293 + * powernow-k6: disable cache when changing frequency + - LP: #1321293 + * powernow-k6: correctly initialize default parameters + - LP: #1321293 + * powernow-k6: reorder frequencies + - LP: #1321293 + * tcp: fix tcp_trim_head() to adjust segment count with skb MSS + - LP: #1321293 + * tcp_cubic: limit delayed_ack ratio to prevent divide error + - LP: #1321293 + * tcp_cubic: fix the range of delayed_ack + - LP: #1321293 + * qeth: avoid buffer overflow in snmp ioctl + - LP: #1321293 + * s390: fix kernel crash due to linkage stack instructions + - LP: #1321293 + * Linux 2.6.32.62 + - LP: #1321293 + + -- Stefan Bader Thu, 22 May 2014 11:35:37 +0200 + +linux-ec2 (2.6.32-364.77) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebase to Ubuntu-2.6.32-60.122 + * Release Tracking Bug + - LP: #1317334 + + [ Ubuntu: 2.6.32-60.122 ] + + * merge CVE release 2.6.32-58.121 + * Revert "n_tty: Fix n_tty_write crash when echoing in raw mode" + - LP: #1314762 + * floppy: ignore kernel-only members in FDRAWCMD ioctl input + - LP: #1316729 + - CVE-2014-1737 + * floppy: don't write kernel-only members to FDRAWCMD ioctl output + - LP: #1316735 + - CVE-2014-1738 + * n_tty: Fix n_tty_write crash when echoing in raw mode + - LP: #1314762 + - CVE-2014-0196 + - switch existing patch for upstream code. + + [ Ubuntu: 2.6.32-59.121 ] + + * rds: prevent dereference of a NULL device in rds_iw_laddr_check + - LP: #1302222 + - CVE-2014-2678 + * rds: prevent dereference of a NULL device + - LP: #1297738 + - CVE-2013-7339 + + [ Ubuntu: 2.6.32-58.121 ] + + * n_tty: Fix n_tty_write crash when echoing in raw mode + + -- Stefan Bader Tue, 06 May 2014 11:05:23 -0500 + +linux-ec2 (2.6.32-363.76) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebase to Ubuntu-2.6.32-58.120 + * Release Tracking Bug + - LP: #1301071 + + [ Ubuntu: 2.6.32-58.120 ] + + * netfilter: nf_conntrack_dccp: fix skb_header_pointer API usages + - LP: #1295090 + - CVE-2014-2523 + * net: sctp: fix sctp_sf_do_5_1D_ce to verify if we/peer is AUTH capable + - LP: #1293714 + - CVE-2014-0101 + + -- Stefan Bader Wed, 02 Apr 2014 13:42:12 +0200 + +linux-ec2 (2.6.32-362.75) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-57.119 + * Release Tracking Bug + - LP: #1281942 + + [ Ubuntu: 2.6.32-57.119 ] + + * ubuntu: AUFS: fsnotify_open() now receives a file + - LP: #1097680 + - CVE-2013-0160 + * KVM: Improve create VCPU parameter (CVE-2013-4587) + - LP: #1261564 + - CVE-2013-4587 + * KVM: x86: Fix potential divide by 0 in lapic (CVE-2013-6367) + - LP: #1261566 + - CVE-2013-6367 + * xfs: underflow bug in xfs_attrlist_by_handle() + - LP: #1256091 + - CVE-2013-6382 + * aacraid: prevent invalid pointer dereference + - LP: #1256083 + - CVE-2013-6380 + * wireless: radiotap: fix parsing buffer overrun + - LP: #1260622 + - CVE-2013-7027 + * net: rework recvmsg handler msg_name and msg_namelen logic + - LP: #1267081 + - CVE-2013-7266 + * net: rose: restore old recvmsg behavior + - LP: #1267081 + - CVE-2013-7266 + * fsnotify: pass a file instead of an inode to open, read, and write + - LP: #1097680 + - CVE-2013-0160 + * vfs: introduce FMODE_NONOTIFY + - LP: #1097680 + - CVE-2013-0160 + * fanotify: FMODE_NONOTIFY and __O_SYNC in sparc conflict + - LP: #1097680 + - CVE-2013-0160 + * TTY: do not update atime/mtime on read/write + - LP: #1097680 + - CVE-2013-0160 + * TTY: fix atime/mtime regression + - LP: #1097680 + - CVE-2013-0160 + * tty: fix up atime/mtime mess, take three + - LP: #1097680 + - CVE-2013-0160 + * farsync: fix info leak in ioctl + - LP: #1271442 + - CVE-2014-1444 + * wanxl: fix info leak in ioctl + - LP: #1271444 + - CVE-2014-1445 + * hamradio/yam: fix info leak in ioctl + - LP: #1271445 + - CVE-2014-1446 + * SELinux: Fix kernel BUG on empty security contexts. + - CVE-2014-1874 + * exec/ptrace: fix get_dumpable() incorrect tests + - LP: #1260610 + - CVE-2013-2929 + + -- Stefan Bader Wed, 19 Feb 2014 16:51:53 +0100 + +linux-ec2 (2.6.32-361.74) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-56.118 + * Release Tracking Bug + - LP: #1266612 + + [ Ubuntu: 2.6.32-56.118 ] + + * inet: prevent leakage of uninitialized memory to user in recv syscalls + - LP: #1256919 + - CVE-2013-6405 + * inet: fix addr_len/msg->msg_namelen assignment in recv_error and rxpmtu + functions + - LP: #1256919 + - CVE-2013-6405 + * aacraid: missing capable() check in compat ioctl + - LP: #1256094 + - CVE-2013-6383 + + -- Stefan Bader Wed, 08 Jan 2014 10:18:44 +0100 + +linux-ec2 (2.6.32-360.73) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-55.117 + * Release Tracking Bug + - LP: #1257527 + + [ Ubuntu: 2.6.32-55.117 ] + + * ipvs: Add boundary check on ioctl arguments + - LP: #1252424 + - CVE-2013-4588 + * vm: add vm_iomap_memory() helper function + - LP: #1252426 + - CVE-2013-6763 + * Fix a few incorrectly checked [io_]remap_pfn_range() calls + - LP: #1252426 + - CVE-2013-6763 + * crypto: ansi_cprng - Fix off by one error in non-block size request + - LP: #1229981 + - CVE-2013-4345 + * libertas: potential oops in debugfs + - LP: #1256080 + - CVE-2013-6378 + + -- Stefan Bader Wed, 04 Dec 2013 14:12:21 +0100 + +linux-ec2 (2.6.32-359.72) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-54.116 + * Release Tracking Bug + - LP: #1250690 + + [ Ubuntu: 2.6.32-54.116 ] + + * SAUCE: ACPI battery: fix compiler warning + - LP: #1247154 + * KVM: unmap pages from the iommu when slots are removed + - LP: #987569 + - CVE-2012-2121 + * uml: check length in exitcode_proc_write() + - LP: #1249271 + - CVE-2013-4512 + + -- Stefan Bader Wed, 13 Nov 2013 11:07:53 +0100 + +linux-ec2 (2.6.32-358.71) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-53.115 + * Release Tracking Bug + - LP: #1243918 + + [ Ubuntu: 2.6.32-53.115 ] + + * HID: provide a helper for validating hid reports + - LP: #1220190 + - CVE-2013-2889 + * HID: zeroplus: validate output report details + - LP: #1220190 + - CVE-2013-2889 + * HID: LG: validate HID output report details + - LP: #1220190 + - CVE-2013-2893 + * cciss: fix info leak in cciss_ioctl32_passthru() + - LP: #1188355 + - CVE-2013-2147 + * cpqarray: fix info leak in ida_locked_ioctl() + - LP: #1188355 + - CVE-2013-2147 + * HID: add usage_index in struct hid_usage. + - LP: #1220205 + - CVE-CVE-2013-2897 + * HID: validate feature and input report details + - LP: #1220205 + - CVE-2013-2897 + * dm snapshot: fix data corruption + - LP: #1241769 + - CVE-2013-4299 + + -- Stefan Bader Thu, 24 Oct 2013 09:00:55 +0100 + +linux-ec2 (2.6.32-357.70) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-52.114 + * Release Tracking Bug + - LP: #1224214 + + [ Ubuntu: 2.6.32-52.114 ] + + * HID: pantherlord: validate output report details + - LP: #1220196 + - CVE-2013-2892 + * HID: validate HID report id size + - LP: #1220185 + - CVE-2013-2888 + * ipv6: remove max_addresses check from ipv6_create_tempaddr + - LP: #1143800 + - CVE-2013-0343 + + -- Stefan Bader Thu, 12 Sep 2013 11:48:17 +0200 + +linux-ec2 (2.6.32-356.69) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-51.113 + * Release Tracking Bug + - LP: #1215239 + + [ Ubuntu: 2.6.32-51.113 ] + + * remove debian/changelog from git + * [Packaging] supply perf with appropriate prefix to ensure use of local + config + - LP: #1206200 + - CVE-2013-1060 + * Start new release + * Revert "x86, ptrace: fix build breakage with gcc 4.7" + - LP: #1199154 + * ipv6: call udp_push_pending_frames when uncorking a socket with AF_INET + pending data + - LP: #1205070 + - CVE-2013-4162 + * sctp: deal with multiple COOKIE_ECHO chunks + - LP: #1194445 + - CVE-2013-2206 + * sctp: Use correct sideffect command in duplicate cookie handling + - LP: #1194445 + - CVE-2013-2206 + * KVM: Validate userspace_addr of memslot when registered + - LP: #1191918 + - CVE-2013-1943 + * KVM: add missing void __user * cast to access_ok() call + - LP: #1191918 + - CVE-2013-1943 + + -- Stefan Bader Mon, 26 Aug 2013 16:33:40 +0200 + +linux-ec2 (2.6.32-355.68) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-50.112 + * Release Tracking Bug + - LP: #1199600 + + [ Ubuntu: 2.6.32-50.112 ] + + * block: do not pass disk names as format strings + - LP: #1189832 + - CVE-2013-2851 + * drivers/cdrom/cdrom.c: use kzalloc() for failing hardware + - LP: #1191463 + - CVE-2013-2164 + * ipv6: ip6_sk_dst_check() must not assume ipv6 dst + - LP: #1198293 + - CVE-2013-2232 + * af_key: fix info leaks in notify messages + - LP: #1198294 + - CVE-2013-2234 + * af_key: initialize satype in key_notify_policy_flush() + - LP: #1198296 + - CVE-2013-2237 + + -- Stefan Bader Wed, 10 Jul 2013 12:39:45 +0200 + +linux-ec2 (2.6.32-354.67) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-49.111 + * SAUCE: ec2: Backport x86/mm: Check if PUD is large when validating a + kernel address + - LP: #1193044 + * SAUCE: ec2: Backport x86, ioapic: initialize nr_ioapic_registers early + in mp_register_ioapic() + - LP: #1193044 + * Release Tracking Bug + - LP: #1193202 + + [ Ubuntu: 2.6.32-49.111 ] + + * Revert "pcdp: use early_ioremap/early_iounmap to access pcdp table" + - LP: #1193044 + * Revert "block: improve queue_should_plug() by looking at IO depths" + - LP: #1193044 + * kernel/signal.c: stop info leak via the tkill and the tgkill syscalls + - LP: #1187732 + - CVE-2013-2141 + * b43: stop format string leaking into error msgs + - LP: #1189833 + - CVE-2013-2852 + * 2.6.32.y: timekeeping: Fix nohz issue with commit + 61b76840ddee647c0c223365378c3f394355b7d7 + - LP: #1193044 + * clockevents: Don't allow dummy broadcast timers + - LP: #1193044 + * posix-cpu-timers: Fix nanosleep task_struct leak + - LP: #1193044 + * timer: Don't reinitialize the cpu base lock during CPU_UP_PREPARE + - LP: #1193044 + * tick: Cleanup NOHZ per cpu data on cpu down + - LP: #1193044 + * kbuild: Fix gcc -x syntax + - LP: #1193044 + * gen_init_cpio: avoid stack overflow when expanding + - LP: #1193044 + * coredump: prevent double-free on an error path in core dumper + - LP: #1193044 + * kernel/sys.c: call disable_nonboot_cpus() in kernel_restart() + - LP: #1193044 + * ring-buffer: Fix race between integrity check and readers + - LP: #1193044 + * genalloc: stop crashing the system when destroying a pool + - LP: #1193044 + * kernel/resource.c: fix stack overflow in __reserve_region_with_split() + - LP: #1193044 + * Driver core: treat unregistered bus_types as having no devices + - LP: #1193044 + * cgroup: remove incorrect dget/dput() pair in cgroup_create_dir() + - LP: #1193044 + * Fix a dead loop in async_synchronize_full() + - LP: #1193044 + * tracing: Don't call page_to_pfn() if page is NULL + - LP: #1193044 + * tracing: Fix double free when function profile init failed + - LP: #1193044 + * mm: Fix PageHead when !CONFIG_PAGEFLAGS_EXTENDED + - LP: #1193044 + * mm: bugfix: set current->reclaim_state to NULL while returning from + kswapd() + - LP: #1193044 + * mm: fix invalidate_complete_page2() lock ordering + - LP: #1193044 + * mempolicy: fix a race in shared_policy_replace() + - LP: #1193044 + * ALSA: hda - More ALC663 fixes and support of compatible chips + - LP: #1193044 + * ALSA: hda - Add a pin-fix for FSC Amilo Pi1505 + - LP: #1193044 + * ALSA: seq: Fix missing error handling in snd_seq_timer_open() + - LP: #1193044 + * ALSA: ac97 - Fix missing NULL check in snd_ac97_cvol_new() + - LP: #1193044 + * x86, ioapic: initialize nr_ioapic_registers early in + mp_register_ioapic() + - LP: #1193044 + * x86: Don't use the EFI reboot method by default + - LP: #1193044 + * x86, random: make ARCH_RANDOM prompt if EMBEDDED, not EXPERT + - LP: #1193044 + * x86/mm: Check if PUD is large when validating a kernel address + - LP: #1193044 + * x86, mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates + - LP: #1193044 + * xen/bootup: allow read_tscp call for Xen PV guests. + - LP: #1193044 + * xen/bootup: allow {read|write}_cr8 pvops call. + - LP: #1193044 + * KVM: x86: relax MSR_KVM_SYSTEM_TIME alignment check + - LP: #1193044 + * KVM: x86: invalid opcode oops on SET_SREGS with OSXSAVE bit set + (CVE-2012-4461) + - LP: #1193044 + * MCE: Fix vm86 handling for 32bit mce handler + - LP: #1193044 + * ACPI / cpuidle: Fix NULL pointer issues when cpuidle is disabled + - LP: #1193044 + * alpha: Add irongate_io to PCI bus resources + - LP: #1193044 + * PARISC: fix user-triggerable panic on parisc + - LP: #1193044 + * serial: 8250, increase PASS_LIMIT + - LP: #1193044 + * drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory + overflow + - LP: #1193044 + * w1: fix oops when w1_search is called from netlink connector + - LP: #1193044 + * staging: comedi: ni_labpc: correct differential channel sequence for AI + commands + - LP: #1193044 + * staging: comedi: ni_labpc: set up command4 register *after* command3 + - LP: #1193044 + * staging: comedi: comedi_test: fix race when cancelling command + - LP: #1193044 + * staging: comedi: fix memory leak for saved channel list + - LP: #1193044 + * staging: comedi: s626: don't dereference insn->data + - LP: #1193044 + * staging: comedi: jr3_pci: fix iomem dereference + - LP: #1193044 + * staging: comedi: don't dereference user memory for INSN_INTTRIG + - LP: #1193044 + * staging: comedi: check s->async for poll(), read() and write() + - LP: #1193044 + * staging: comedi: das08: Correct AO output for das08jr-16-ao + - LP: #1193044 + * staging: vt6656: [BUG] out of bound array reference in RFbSetPower. + - LP: #1193044 + * libata: fix Null pointer dereference on disk error + - LP: #1193044 + * scsi: Silence unnecessary warnings about ioctl to partition + - LP: #1193044 + * scsi: use __uX types for headers exported to user space + - LP: #1193044 + * fix crash in scsi_dispatch_cmd() + - LP: #1193044 + * SCSI: bnx2i: Fixed NULL ptr deference for 1G bnx2 Linux iSCSI offload + - LP: #1193044 + * crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent + data corruption + - LP: #1193044 + * xfrm_user: return error pointer instead of NULL #2 + - LP: #1193044 + * r8169: correct settings of rtl8102e. + - LP: #1193044 + * r8169: remove the obsolete and incorrect AMD workaround + - LP: #1193044 + * r8169: Add support for D-Link 530T rev C1 (Kernel Bug 38862) + - LP: #1193044 + * r8169: incorrect identifier for a 8168dp + - LP: #1193044 + * b43legacy: Fix crash on unload when firmware not available + - LP: #1193044 + * tg3: Avoid null pointer dereference in tg3_interrupt in netconsole mode + - LP: #1193044 + * IPoIB: Fix use-after-free of multicast object + - LP: #1193044 + * telephony: ijx: buffer overflow in ixj_write_cid() + - LP: #1193044 + * Bluetooth: HCI - Fix info leak in getsockopt(HCI_FILTER) + - LP: #1193044 + * xhci: Make handover code more robust + - LP: #1193044 + * USB: whiteheat: fix memory leak in error path + - LP: #1193044 + * USB: serial: Fix memory leak in sierra_release() + - LP: #1193044 + * USB: mos7840: fix urb leak at release + - LP: #1193044 + * USB: mos7840: fix port-device leak in error path + - LP: #1193044 + * USB: garmin_gps: fix memory leak on disconnect + - LP: #1193044 + * USB: serial: ftdi_sio: Handle the old_termios == 0 case e.g. + uart_resume_port() + - LP: #1193044 + * USB: ftdi_sio: Quiet sparse noise about using plain integer was NULL + pointer + - LP: #1193044 + * epoll: prevent missed events on EPOLL_CTL_MOD + - LP: #1193044 + * fs/fscache/stats.c: fix memory leak + - LP: #1193044 + * sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat() + - LP: #1193044 + * jbd: Delay discarding buffers in journal_unmap_buffer + - LP: #1193044 + * jbd: Fix assertion failure in commit code due to lacking transaction + credits + - LP: #1193044 + * jbd: Fix lock ordering bug in journal_unmap_buffer() + - LP: #1193044 + * ext4: Fix fs corruption when make_indexed_dir() fails + - LP: #1193044 + * ext4: don't dereference null pointer when make_indexed_dir() fails + - LP: #1193044 + * ext4: fix memory leak in ext4_xattr_set_acl()'s error path + - LP: #1193044 + * ext4: online defrag is not supported for journaled files + - LP: #1193044 + * ext4: always set i_op in ext4_mknod() + - LP: #1193044 + * ext4: fix fdatasync() for files with only i_size changes + - LP: #1193044 + * ext4: lock i_mutex when truncating orphan inodes + - LP: #1193044 + * ext4: fix race in ext4_mb_add_n_trim() + - LP: #1193044 + * ext4: limit group search loop for non-extent files + - LP: #1193044 + * CVE-2012-4508 kernel: ext4: AIO vs fallocate stale data exposure + - LP: #1193044 + - CVE-2012-4508 kernel: ext4: AIO vs fallocate stale data exposure + * ext4: make orphan functions be no-op in no-journal mode + - LP: #1193044 + * ext4: avoid hang when mounting non-journal filesystems with orphan list + - LP: #1193044 + * udf: fix memory leak while allocating blocks during write + - LP: #1193044 + * udf: Fix bitmap overflow on large filesystems with small block size + - LP: #1193044 + * fs/cifs/cifs_dfs_ref.c: fix potential memory leakage + - LP: #1193044 + * fat: Fix stat->f_namelen + - LP: #1193044 + * hfsplus: fix potential overflow in hfsplus_file_truncate() + - LP: #1193044 + * btrfs: use rcu_barrier() to wait for bdev puts at unmount + - LP: #1193044 + * kernel panic when mount NFSv4 + - LP: #1193044 + * nfsd4: fix oops on unusual readlike compound + - LP: #1193044 + * net/core: Fix potential memory leak in dev_set_alias() + - LP: #1193044 + * net: reduce net_rx_action() latency to 2 HZ + - LP: #1193044 + * softirq: reduce latencies + - LP: #1193044 + * af_packet: remove BUG statement in tpacket_destruct_skb + - LP: #1193044 + * bridge: set priority of STP packets + - LP: #1193044 + * bonding: Fix slave selection bug. + - LP: #1193044 + * ipv4: check rt_genid in dst_check + - LP: #1193044 + * net_sched: gact: Fix potential panic in tcf_gact(). + - LP: #1193044 + * net: sched: integer overflow fix + - LP: #1193044 + * net: prevent setting ttl=0 via IP_TTL + - LP: #1193044 + * net: guard tcp_set_keepalive() to tcp sockets + - LP: #1193044 + * inet: add RCU protection to inet->opt + - LP: #1193044 + * tcp: allow splice() to build full TSO packets + - LP: #1193044 + * tcp: fix MSG_SENDPAGE_NOTLAST logic + - LP: #1193044 + * tcp: preserve ACK clocking in TSO + - LP: #1193044 + * unix: fix a race condition in unix_release() + - LP: #1193044 + * sctp: fix memory leak in sctp_datamsg_from_user() when copy from user + space fails + - LP: #1193044 + * net: sctp: sctp_setsockopt_auth_key: use kzfree instead of kfree + - LP: #1193044 + * net: sctp: sctp_endpoint_free: zero out secret key data + - LP: #1193044 + * net: sctp: sctp_auth_key_put: use kzfree instead of kfree + - LP: #1193044 + * netfilter: nf_ct_ipv4: packets with wrong ihl are invalid + - LP: #1193044 + * ipvs: allow transmit of GRO aggregated skbs + - LP: #1193044 + * ipvs: IPv6 MTU checking cleanup and bugfix + - LP: #1193044 + * isdnloop: fix and simplify isdnloop_init() + - LP: #1193044 + * mpt2sas: Send default descriptor for RAID pass through in mpt2ctl + - LP: #1193044 + * x86, ptrace: fix build breakage with gcc 4.7 + - LP: #1193044 + * Linux 2.6.32.61 + - LP: #1193044 + + -- Stefan Bader Wed, 19 Jun 2013 09:57:14 +0200 + +linux-ec2 (2.6.32-353.66) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-48.110 + * Release Tracking Bug + - LP: #1186479 + + [ Ubuntu: 2.6.32-48.110 ] + + * (config) Import Xen specific config options from ec2 + - LP: #1177431 + * SAUCE: xen: Send spinlock IPI to all waiters + - LP: #1011792, #1177431 + * ax25: fix info leak via msg_name in ax25_recvmsg() + - LP: #1172366 + - CVE-2013-3223 + * Bluetooth: fix possible info leak in bt_sock_recvmsg() + - LP: #1172368 + - CVE-2013-3224 + * tipc: fix info leaks via msg_name in recv_msg/recv_stream + - LP: #1172403 + - CVE-2013-3235 + * rose: fix info leak via msg_name in rose_recvmsg() + - LP: #1172394 + - CVE-2013-3234 + * Bluetooth: RFCOMM - Fix missing msg_namelen update in + rfcomm_sock_recvmsg() + - LP: #1172369 + - CVE-2013-3225 + * atm: update msg_namelen in vcc_recvmsg() + - LP: #1172365 + - CVE-2013-3222 + * KVM: Fix bounds checking in ioapic indirect register reads + (CVE-2013-1798) + - LP: #1158262 + - CVE-2013-1798 + * llc: Fix missing msg_namelen update in llc_ui_recvmsg() + - LP: #1172385 + - CVE-2013-3231 + * netrom: fix info leak via msg_name in nr_recvmsg() + - LP: #1172386 + - CVE-2013-3232 + * irda: Fix missing msg_namelen update in irda_recvmsg_dgram() + - LP: #1172380 + - CVE-2013-3228 + * iucv: Fix missing msg_namelen update in iucv_sock_recvmsg() + - LP: #1172381 + - CVE-2013-3229 + + -- Stefan Bader Tue, 04 Jun 2013 10:12:05 +0200 + +linux-ec2 (2.6.32-352.65) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-47.109 + * Release Tracking Bug + - LP: #1177308 + + [ Ubuntu: 2.6.32-47.109 ] + + * [packaging] Bump ABI for every new release + * fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check + - LP: #1167061 + - CVE-2013-1928 + * dcbnl: fix various netlink info leaks + - LP: #1158965 + - CVE-2013-2634 + * USB: cdc-wdm: fix buffer overflow + - LP: #1156784 + - CVE-2013-1860 + * isofs: avoid info leak on export + - LP: #1156774 + - CVE-2012-6549 + * xfrm_user: return error pointer instead of NULL + - LP: #1155026 + - CVE-2013-1826 + + -- Stefan Bader Tue, 07 May 2013 15:39:39 +0200 + +linux-ec2 (2.6.32-351.64) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-46.108 + * Release Tracking Bug + - LP: #1168185 + + [ Ubuntu: 2.6.32-46.108 ] + + * SAUCE: (no-up) apparmor: Fix quieting of audit messages for network + mediation + - LP: #1163259 + * llc: fix info leak via getsockname() + - LP: #1156743 + - CVE-2012-6542 + * Bluetooth: L2CAP - Fix info leak via getsockname() + - LP: #1156751 + - CVE-2012-6544 + * Bluetooth: HCI - Fix info leak in getsockopt(HCI_FILTER) + - LP: #1156751 + - CVE-2012-6544 + * Bluetooth: RFCOMM - Fix info leak via getsockname() + - LP: #1156757 + - CVE-2012-6545 + * Bluetooth: RFCOMM - Fix info leak in ioctl(RFCOMMGETDEVLIST) + - LP: #1156757 + - CVE-2012-6545 + * atm: fix info leak via getsockname() + - LP: #1156759 + - CVE-2012-6546 + * atm: fix info leak in getsockopt(SO_ATMPVC) + - LP: #1156759 + - CVE-2012-6546 + * udf: avoid info leak on export + - LP: #1156768 + - CVE-2012-6548 + * KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME + (CVE-2013-1796) + - LP: #1158254 + - CVE-2013-1796 + * Bluetooth: Fix incorrect strncpy() in hidp_setup_hid() + - LP: #1134503 + - CVE-2013-0349 + * USB: io_ti: Fix NULL dereference in chase_port() + - LP: #1143817 + - CVE-2013-1774 + * x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS. + - LP: #1143796 + - CVE-2013-0228 + + -- Stefan Bader Fri, 12 Apr 2013 10:12:13 +0200 + +linux-ec2 (2.6.32-351.63) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-46.107 + * Release Tracking Bug + - LP: #1159191 + + [ Ubuntu: 2.6.32-46.107 ] + + * SAUCE: signal: Fix use of missing sa_restorer field + - LP: #1153813 + - CVE-2013-0914 + * ipvs: fix info leak in getsockopt(IP_VS_SO_GET_TIMEOUT) + - LP: #1156732 + - CVE-2012-6540 + * kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER + - LP: #1153813 + - CVE-2013-0914 + + [ Ubuntu: 2.6.32-46.106 ] + + * tmpfs: fix use-after-free of mempolicy object + - LP: #1143815 + - CVE-2013-1767 + * keys: fix race with concurrent install_user_keyrings() + - LP: #1152788 + - CVE-2013-1792 + * signal: always clear sa_restorer on execve + - LP: #1153813 + - CVE-2013-0914 + * Fix ptrace when task is in task_is_stopped(), state + - LP: #1145234 + * xfrm_user: fix info leak in copy_to_user_tmpl() + - LP: #1156716 + - CVE-2012-6537 + * xfrm_user: fix info leak in copy_to_user_policy() + - LP: #1156716 + - CVE-2012-6537 + * xfrm_user: fix info leak in copy_to_user_state() + - LP: #1156716 + - CVE-2012-6537 + * net: fix info leak in compat dev_ifconf() + - LP: #1156728 + - CVE-2012-6539 + + -- Stefan Bader Mon, 25 Mar 2013 14:38:06 +0100 + +linux-ec2 (2.6.32-351.62) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-46.105 + * XEN: fix pmd_present for split_huge_page and PROT_NONE with THP + - LP: #1130943 + - CVE-2013-0309 + * (buildenv) arch/x86/kernel/msr.c is not deviated + * Release Tracking Bug + - LP: #1137197 + + [ Ubuntu: 2.6.32-46.105 ] + + * x86/msr: Add capabilities check + - LP: #1123049 + - CVE-2013-0268 + * mm: thp: fix pmd_present for split_huge_page and PROT_NONE with THP + - LP: #1130943 + - CVE-2013-0309 + * NLS: improve UTF8 -> UTF16 string conversion routine + - LP: #1134523 + - CVE-2013-1773 + + -- Stefan Bader Fri, 01 Mar 2013 12:19:21 +0100 + +linux-ec2 (2.6.32-350.61) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.104 + * Release Tracking Bug + - LP: #1119764 + + [ Ubuntu: 2.6.32-45.104 ] + + * ptrace: ptrace_resume() shouldn't wake up !TASK_TRACED thread + - LP: #1129192 + - CVE-2013-0871 + * ptrace: introduce signal_wake_up_state() and ptrace_signal_wake_up() + - LP: #1129192 + - CVE-2013-0871 + * ptrace: ensure arch_ptrace/ptrace_request can never race with SIGKILL + - LP: #1129192 + - CVE-2013-0871 + * wake_up_process() should be never used to wakeup a TASK_STOPPED/TRACED + task + - LP: #1129192 + - CVE-2013-0871 + + -- Stefan Bader Wed, 20 Feb 2013 09:22:04 +0100 + +linux-ec2 (2.6.32-350.60) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.103 + * Release Tracking Bug + - LP: #1119764 + + [ Ubuntu: 2.6.32-45.103 ] + + * [debian] Remove dangling symlink from headers package + - LP: #1112442 + * xen: Fix stack corruption in xen_failsafe_callback for 32bit PVOPS + guests. + - LP: #1102374 + - CVE-2013-0190 + + -- Stefan Bader Tue, 12 Feb 2013 14:47:51 +0100 + +linux-ec2 (2.6.32-350.59) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.102 + * Release Tracking Bug + - LP: #1095803 + + [ Ubuntu: 2.6.32-45.102 ] + + * SAUCE: exec: do not leave bprm->interp on stack + - LP: #1068888 + - CVE-2012-4530 + * exec: use -ELOOP for max recursion depth + - LP: #1068888 + - CVE-2012-4530 + + -- Stefan Bader Mon, 07 Jan 2013 11:34:09 +0100 + +linux-ec2 (2.6.32-350.58) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.101 + * Release Tracking Bug + - LP: #1086183 + + [ Ubuntu: 2.6.32-45.101 ] + + * ipv6: discard overlapping fragment + - LP: #1079859 + - CVE-2012-4444 + + -- Stefan Bader Wed, 05 Dec 2012 12:35:17 +0100 + +linux-ec2 (2.6.32-350.57) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.100 + * Release Tracking Bug + - LP: #1078882 + + [ Ubuntu: 2.6.32-45.100 ] + + * eCryptfs: check for eCryptfs cipher support at mount + - LP: #338914 + * net: fix divide by zero in tcp algorithm illinois + - LP: #1077091 + - CVE-2012-4565 + + -- Stefan Bader Thu, 15 Nov 2012 11:23:05 +0100 + +linux-ec2 (2.6.32-350.56) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-45.99 + * SAUCE: XEN: Pull in RDRAND changes + - LP: #1064480 + * SAUCE: XEN: Backport pgd_lock fixes + - LP: #1064480 + * Release Tracking Bug + - LP: #1068278 + + [ Ubuntu: 2.6.32-45.99 ] + + * SAUCE: omnibook: Expose PWD for standalone builds + - LP: #505420 + * Revert "xfs: Fix possible memory corruption in xfs_readlink, + CVE-2011-4077" + - LP: #1064480 + * UBUNTU SAUCE: apparmor: fix IRQ stack overflow + - LP: #1056078 + * net/9p: fix virtio transport to correctly update status on connect + - LP: #676823 + * 9p: Fix the kernel crash on a failed mount + - LP: #676823 + * netxen: support for GbE port settings + - LP: #1064480 + * Fix sparc build with newer tools. + - LP: #1064480 + * powerpc/pmac: Fix SMP kernels on pre-core99 UP machines + - LP: #1064480 + * Bluetooth: btusb: fix bInterval for high/super speed isochronous + endpoints + - LP: #1064480 + * fix pgd_lock deadlock + - LP: #1064480 + * futex: Fix uninterruptible loop due to gate_area + - LP: #1064480 + * time: Improve sanity checking of timekeeping inputs + - LP: #1064480 + * time: Avoid making adjustments if we haven't accumulated anything + - LP: #1064480 + * time: Move ktime_t overflow checking into timespec_valid_strict + - LP: #1064480 + * drm/i915: Attempt to fix watermark setup on 85x (v2) + - LP: #1064480 + * ioat2: kill pending flag + - LP: #1064480 + * usb: Fix deadlock in hid_reset when Dell iDRAC is reset + - LP: #1064480 + * oprofile: use KM_NMI slot for kmap_atomic + - LP: #1064480 + * tty_audit: fix tty_audit_add_data live lock on audit disabled + - LP: #1064480 + * bonding: 802.3ad - fix agg_device_up + - LP: #1064480 + * usbnet: increase URB reference count before usb_unlink_urb + - LP: #1064480 + * usbnet: don't clear urb->dev in tx_complete + - LP: #1064480 + * sched: Fix signed unsigned comparison in check_preempt_tick() + - LP: #1064480 + * x86/PCI: amd: factor out MMCONFIG discovery + - LP: #1064480 + * PNP: fix "work around Dell 1536/1546 BIOS MMCONFIG bug that breaks USB" + - LP: #1064480 + * KVM: x86: disallow multiple KVM_CREATE_IRQCHIP + - LP: #1064480 + * KVM: ia64: fix build due to typo + - LP: #1064480 + * xfs: Fix possible memory corruption in xfs_readlink + - LP: #1064480 + * xfs: Fix missing xfs_iunlock() on error recovery path in xfs_readlink() + - LP: #1064480 + * dl2k: use standard #defines from mii.h. + - LP: #1064480 + * tcp: Don't change unlocked socket state in tcp_v4_err(). + - LP: #1064480 + * x86: Derandom delay_tsc for 64 bit + - LP: #1064480 + * ipsec: be careful of non existing mac headers + - LP: #1064480 + * block, sx8: fix pointer math issue getting fw version + - LP: #1064480 + * nilfs2: fix NULL pointer dereference in nilfs_load_super_block() + - LP: #1064480 + * USB: ftdi_sio: fix problem when the manufacture is a NULL string + - LP: #1064480 + * ntp: Fix integer overflow when setting time + - LP: #1064480 + * SUNRPC: We must not use list_for_each_entry_safe() in rpc_wake_up() + - LP: #1064480 + * ext4: check for zero length extent + - LP: #1064480 + * xfs: Fix oops on IO error during xlog_recover_process_iunlinks() + - LP: #1064480 + * nfsd: don't allow zero length strings in cache_parse() + - LP: #1064480 + * sched/x86: Fix overflow in cyc2ns_offset + - LP: #1064480 + * Bluetooth: add NULL pointer check in HCI + - LP: #1064480 + * Bluetooth: hci_ldisc: fix NULL-pointer dereference on tty_close + - LP: #1064480 + * sparc64: Fix bootup crash on sun4v. + - LP: #1064480 + * video:uvesafb: Fix oops that uvesafb try to execute NX-protected page + - LP: #1064480 + * USB: serial: fix race between probe and open + - LP: #1064480 + * xhci: Don't write zeroed pointers to xHC registers. + - LP: #1064480 + * xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI + - LP: #1064480 + * crypto: sha512 - Fix byte counter overflow in SHA-512 + - LP: #1064480 + * PCI: Add quirk for still enabled interrupts on Intel Sandy Bridge GPUs + - LP: #1064480 + * phonet: Check input from user before allocating + - LP: #1064480 + * netlink: fix races after skb queueing + - LP: #1064480 + * net: fix a race in sock_queue_err_skb() + - LP: #1064480 + * atl1: fix kernel panic in case of DMA errors + - LP: #1064480 + * net/ethernet: ks8851_mll fix rx frame buffer overflow + - LP: #1064480 + * net_sched: gred: Fix oops in gred_dump() in WRED mode + - LP: #1064480 + * ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve + - LP: #1064480 + * netem: fix possible skb leak + - LP: #1064480 + * ALSA: echoaudio: Remove incorrect part of assertion + - LP: #1064480 + * NFSv4: Revalidate uid/gid after open + - LP: #1064480 + * ext3: Fix error handling on inode bitmap corruption + - LP: #1064480 + * ext4: fix error handling on inode bitmap corruption + - LP: #1064480 + * xhci: Reset reserved command ring TRBs on cleanup. + - LP: #1064480 + * SCSI: fix scsi_wait_scan + - LP: #1064480 + * powerpc: Fix kernel panic during kernel module load + - LP: #1064480 + * fuse: fix stat call on 32 bit platforms + - LP: #1064480 + * udf: Improve table length check to avoid possible overflow + - LP: #1064480 + * stable: Allow merging of backports for serious user-visible performance + issues + - LP: #1064480 + * eCryptfs: Properly check for O_RDONLY flag before doing privileged open + - LP: #1064480 + * USB: cdc-wdm: fix lockup on error in wdm_read + - LP: #1064480 + * ntp: Fix STA_INS/DEL clearing bug + - LP: #1064480 + * MIPS: Properly align the .data..init_task section. + - LP: #1064480 + * powerpc/ftrace: Fix assembly trampoline register usage + - LP: #1064480 + * powerpc: Add "memory" attribute for mfmsr() + - LP: #1064480 + * SCSI: libsas: continue revalidation + - LP: #1064480 + * SCSI: libsas: fix sas_discover_devices return code handling + - LP: #1064480 + * SCSI: fix eh wakeup (scsi_schedule_eh vs scsi_restart_operations) + - LP: #1064480 + * SCSI: Avoid dangling pointer in scsi_requeue_command() + - LP: #1064480 + * usbdevfs: Correct amount of data copied to user in processcompl_compat + - LP: #1064480 + * locks: fix checking of fcntl_setlease argument + - LP: #1064480 + * ACPI/AC: prevent OOPS on some boxes due to missing check + power_supply_register() return value check + - LP: #1064480 + * Btrfs: call the ordered free operation without any locks held + - LP: #1064480 + * nfsd4: our filesystems are normally case sensitive + - LP: #1064480 + * ext4: don't let i_reserved_meta_blocks go negative + - LP: #1064480 + * sctp: Fix list corruption resulting from freeing an association on a + list + - LP: #1064480 + * cipso: don't follow a NULL pointer when setsockopt() is called + - LP: #1064480 + * wanmain: comparing array with NULL + - LP: #1064480 + * USB: kaweth.c: use GFP_ATOMIC under spin_lock + - LP: #1064480 + * tcp: perform DMA to userspace only if there is a task waiting for it + - LP: #1064480 + * net/tun: fix ioctl() based info leaks + - LP: #1064480 + * USB: echi-dbgp: increase the controller wait time to come out of halt. + - LP: #1064480 + * ALSA: mpu401: Fix missing initialization of irq field + - LP: #1064480 + * futex: Test for pi_mutex on fault in futex_wait_requeue_pi() + - LP: #1064480 + * futex: Fix bug in WARN_ON for NULL q.pi_state + - LP: #1064480 + * futex: Forbid uaddr == uaddr2 in futex_wait_requeue_pi() + - LP: #1064480 + * pcdp: use early_ioremap/early_iounmap to access pcdp table + - LP: #1064480 + * mm: mmu_notifier: fix freed page still mapped in secondary MMU + - LP: #1064480 + * fuse: verify all ioctl retry iov elements + - LP: #1064480 + * xhci: Increase reset timeout for Renesas 720201 host. + - LP: #1064480 + * usb: serial: mos7840: Fixup mos7840_chars_in_buffer() + - LP: #1064480 + * ALSA: hda - fix Copyright debug message + - LP: #1064480 + * vfs: missed source of ->f_pos races + - LP: #1064480 + * NFSv3: Ensure that do_proc_get_root() reports errors correctly + - LP: #1064480 + * NFS: Alias the nfs module to nfs4 + - LP: #1064480 + * svcrpc: fix svc_xprt_enqueue/svc_recv busy-looping + - LP: #1064480 + * svcrpc: sends on closed socket should stop immediately + - LP: #1064480 + * cciss: fix incorrect scsi status reporting + - LP: #1064480 + * USB: CDC ACM: Fix NULL pointer dereference + - LP: #1064480 + * Remove user-triggerable BUG from mpol_to_str + - LP: #1064480 + * udf: Fix data corruption for files in ICB + - LP: #1064480 + * ext3: Fix fdatasync() for files with only i_size changes + - LP: #1064480 + * PARISC: Redefine ATOMIC_INIT and ATOMIC64_INIT to drop the casts + - LP: #1064480 + * dccp: check ccid before dereferencing + - LP: #1064480 + * ia64: Add accept4() syscall + - LP: #1064480 + * tcp: do_tcp_sendpages() must try to push data out on oom conditions + - LP: #1064480 + * tcp: drop SYN+FIN messages + - LP: #1064480 + * xen: correctly check for pending events when restoring irq flags + - LP: #1064480 + * x86, amd, xen: Avoid NULL pointer paravirt references + - LP: #1064480 + * x86, tls: Off by one limit check + - LP: #1064480 + * sparc64: Eliminate obsolete __handle_softirq() function + - LP: #1064480 + * udf: fix retun value on error path in udf_load_logicalvol + - LP: #1064480 + * mtd: cafe_nand: fix an & vs | mistake + - LP: #1064480 + * epoll: introduce POLLFREE to flush ->signalfd_wqh before kfree() + - LP: #1064480 + * epoll: ep_unregister_pollwait() can use the freed pwq->whead + - LP: #1064480 + * epoll: limit paths + - LP: #1064480 + * Don't limit non-nested epoll paths + - LP: #1064480 + * epoll: clear the tfile_check_list on -ELOOP + - LP: #1064480 + * random: Reorder struct entropy_store to remove padding on 64bits + - LP: #1064480 + * random: update interface comments to reflect reality + - LP: #1064480 + * random: simplify fips mode + - LP: #1064480 + * x86, cpu: Add CPU flags for F16C and RDRND + - LP: #1064480 + * x86, cpufeature: Update CPU feature RDRND to RDRAND + - LP: #1064480 + * random: Add support for architectural random hooks + - LP: #1064480 + * x86, random: Architectural inlines to get random integers with RDRAND + - LP: #1064480 + * x86, random: Verify RDRAND functionality and allow it to be disabled + - LP: #1064480 + * fix typo/thinko in get_random_bytes() + - LP: #1064480 + * random: Use arch_get_random_int instead of cycle counter if avail + - LP: #1064480 + * random: Use arch-specific RNG to initialize the entropy store + - LP: #1064480 + * random: Adjust the number of loops when initializing + - LP: #1064480 + * drivers/char/random.c: fix boot id uniqueness race + - LP: #1064480 + * random: make 'add_interrupt_randomness()' do something sane + - LP: #1064480 + * random: use lockless techniques in the interrupt path + - LP: #1064480 + * random: create add_device_randomness() interface + - LP: #1064480 + * random: use the arch-specific rng in xfer_secondary_pool + - LP: #1064480 + * random: add new get_random_bytes_arch() function + - LP: #1064480 + * random: mix in architectural randomness in extract_buf() + - LP: #1064480 + * MAINTAINERS: Theodore Ts'o is taking over the random driver + - LP: #1064480 + * usb: feed USB device information to the /dev/random driver + - LP: #1064480 + * net: feed /dev/random with the MAC address when registering a device + - LP: #1064480 + * random: remove rand_initialize_irq() + - LP: #1064480 + * random: Add comment to random_initialize() + - LP: #1064480 + * rtc: wm831x: Feed the write counter into device_add_randomness() + - LP: #1064480 + * mfd: wm831x: Feed the device UUID into device_add_randomness() + - LP: #1064480 + * dmi: Feed DMI table to /dev/random driver + - LP: #1064480 + * Linux 2.6.32.60 + - LP: #1064480 + + -- Stefan Bader Mon, 22 Oct 2012 15:21:02 +0200 + +linux-ec2 (2.6.32-349.55) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Revert "SAUCE: EC2: Backport changes to limit GSO segments" + - LP: #1037456 + - CVE-2012-3412 + * Rebased to Ubuntu-2.6.32-44.98 + * Release Tracking Bug + - LP: #1056081 + + [ Ubuntu: 2.6.32-44.98 ] + + * SAUCE: drm/vmwgfx: add MODULE_DEVICE_TABLE so vmwgfx loads at boot + - LP: #1039157 + * Revert "sfc: Fix maximum number of TSO segments and minimum TX queue + size" + - LP: #1037456 + - CVE-2012-3412 + * Revert "sfc: Replace some literal constants with + EFX_PAGE_SIZE/EFX_BUF_SIZE" + - LP: #1037456 + - CVE-2012-3412 + * Revert "tcp: Apply device TSO segment limit earlier" + - LP: #1037456 + - CVE-2012-3412 + * Revert "tcp: do not scale TSO segment size with reordering degree" + - LP: #1037456 + - CVE-2012-3412 + * Revert "net: Allow driver to limit number of GSO segments per skb" + - LP: #1037456 + - CVE-2012-3412 + * cred: copy_process() should clear child->replacement_session_keyring + - LP: #1023535 + - CVE-2012-2745 + * KVM: Change irq routing table to use gsi indexed array + - LP: #1016298 + - CVE-2012-2137 + * KVM: Fix buffer overflow in kvm_set_irq() + - LP: #1016298 + - CVE-2012-2137 + * xen: just completely disable XSAVE + - LP: #1044550 + * xen: Allow PV-OPS kernel to detect whether XSAVE is supported + - LP: #1044550 + * sfc: Fix maximum number of TSO segments and minimum TX queue size + - LP: #1037456 + - CVE-2012-3412 + + -- Stefan Bader Fri, 28 Sep 2012 15:24:48 +0200 + +linux-ec2 (2.6.32-348.54) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-43.97 + * SAUCE: EC2: Backport changes to limit GSO segments + - LP: #1037456 + - CVE-2012-3412 + * Release Tracking Bug + - LP: #1046656 + + [ Ubuntu: 2.6.32-43.97 ] + + * rds: set correct msg_namelen + - LP: #1031112 + - CVE-2012-3430 + * eCryptfs: Initialize empty lower files when opening them + - LP: #911507 + * net: Allow driver to limit number of GSO segments per skb + - LP: #1037456 + - CVE-2012-3412 + * tcp: do not scale TSO segment size with reordering degree + - LP: #1037456 + - CVE-2012-3412 + * tcp: Apply device TSO segment limit earlier + - LP: #1037456 + - CVE-2012-3412 + * sfc: Replace some literal constants with EFX_PAGE_SIZE/EFX_BUF_SIZE + - LP: #1037456 + - CVE-2012-3412 + * sfc: Fix maximum number of TSO segments and minimum TX queue size + - LP: #1037456 + - CVE-2012-3412 + * mm: Hold a file reference in madvise_remove + - LP: #1042447 + - CVE-2012-3511 + * ulimit: raise default hard ulimit on number of files to 4096 + - LP: #663090 + + -- Stefan Bader Fri, 07 Sep 2012 09:16:52 +0200 + +linux-ec2 (2.6.32-347.53) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-42.96 + * Release Tracking Bug + - LP: #1038971 + + + [ Ubuntu: 2.6.32-42.96 ] + + * SAUCE: rds_ib_send() -- prevent local pings triggering BUG_ON() + - LP: #1016299 + - CVE-2012-2372 + * udf: Fortify loading of sparing table + - LP: #1024497 + - CVE-2012-3400 + * udf: Avoid run away loop when partition table length is corrupted + - LP: #1024497 + - CVE-2012-3400 + * eCryptfs: Gracefully refuse miscdev file ops on inherited/passed files + - LP: #994247 + * eCryptfs: Copy up POSIX ACL and read-only flags from lower mount + - LP: #1009207 + * drm: integer overflow in drm_mode_dirtyfb_ioctl() + - LP: #917838 + - CVE-2012-0044 + + -- Stefan Bader Mon, 20 Aug 2012 18:32:20 +0200 + +linux-ec2 (2.6.32-347.52) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebase to Ubuntu-2.6.32-42.95 + * Release Tracking Bug + - LP: #1029177 + + [ Ubuntu: 2.6.32-42.95 ] + + * hugetlb: fix resv_map leak in error path + - LP: #1004621 + - CVE-2012-2390 + * mm: fix vma_resv_map() NULL pointer + - LP: #1004621 + - CVE-2012-2390 + * net: sock: validate data_len before allocating skb in + sock_alloc_send_pskb() + - LP: #1006622 + - CVE-2012-2136 + * 2.6.32.x: ntp: Fix leap-second hrtimer livelock + - LP: #1020285 + * 2.6.32.x: ntp: Correct TAI offset during leap second + - LP: #1020285 + * 2.6.32.x: timekeeping: Fix CLOCK_MONOTONIC inconsistency during + leapsecond + - LP: #1020285 + * 2.6.32.x: time: Move common updates to a function + - LP: #1020285 + * 2.6.32.x: hrtimer: Provide clock_was_set_delayed() + - LP: #1020285 + * 2.6.32.x: timekeeping: Fix leapsecond triggered load spike issue + - LP: #1020285 + * 2.6.32.x: timekeeping: Maintain ktime_t based offsets for hrtimers + - LP: #1020285 + * 2.6.32.x: hrtimers: Move lock held region in hrtimer_interrupt() + - LP: #1020285 + * 2.6.32.x: timekeeping: Provide hrtimer update function + - LP: #1020285 + * 2.6.32.x: hrtimer: Update hrtimer base offsets each hrtimer_interrupt + - LP: #1020285 + * 2.6.32.x: timekeeping: Add missing update call in timekeeping_resume() + - LP: #1020285 + + [ Ubuntu: 2.6.32-41.94 ] + + * fix ABI directory naming + + -- Stefan Bader Thu, 26 Jul 2012 18:38:08 +0200 + +linux-ec2 (2.6.32-346.51) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * SAUCE: Update spinlock handling code + - LP: #929941 + * SAUCE: Use ticket locks for Xen 3.0.2+ + - LP: #929941 + * Rebased to Ubuntu-2.6.32-41.93 + * Release Tracking Bug + - LP: #1021084 + + [ Ubuntu: 2.6.32-41.93 ] + + * No change upload to fix .ddeb generation in the PPA. + + [ Ubuntu: 2.6.32-41.92 ] + + * drm/i915: Move Pineview CxSR and watermark code into update_wm hook. + - LP: #1004707 + * drm/i915: Add CxSR support on Pineview DDR3 + - LP: #1004707 + + -- Stefan Bader Mon, 25 Jun 2012 11:20:40 +0200 + +linux-ec2 (2.6.32-345.50) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-41.91 + * Release Tracking Bug + - LP: #1012812 + + [ Ubuntu: 2.6.32-41.91 ] + + * SAUCE: async_populate_rootfs: fix build warnings + - LP: #1003417 + * dl2k: Clean up rio_ioctl + - CVE-2012-2313 + * hfsplus: Fix potential buffer overflows + - CVE-2012-2319 + + -- Stefan Bader Thu, 14 Jun 2012 19:50:34 +0200 + +linux-ec2 (2.6.32-345.49) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-41.90 + * Release Tracking Bug + - LP: #1003061 + + [ Ubuntu: 2.6.32-41.90 ] + + * [Config] control.stub is an intermediate product not a dependancy + - LP: #992414 + * [Config] perarch and indep tools builds need separate build directories + * hugepages: fix use after free bug in "quota" handling + - LP: #990368 + - CVE-2012-2133 + + -- Stefan Bader Wed, 23 May 2012 15:34:49 +0200 + +linux-ec2 (2.6.32-345.48) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-41.89 + * Release Tracking Bug + - LP: #991770 + + [ Ubuntu: 2.6.32-41.89 ] + + * SAUCE: (no-up) remove __initdata from vesafb_fix + - LP: #969309 + * jbd2: clear BH_Delay & BH_Unwritten in journal_unmap_buffer + - LP: #929781 + - CVE-2011-4086 + * fcaps: clear the same personality flags as suid when fcaps are used + - LP: #987571 + - CVE-2012-2123 + * lucid security: fix compile error in commoncap.c + - LP: #987571 + - CVE-2012-2123 + * KVM: Clean up error handling during VCPU creation + - LP: #971685 + - CVE-2012-1601 + * KVM: Ensure all vcpus are consistent with in-kernel irqchip settings + - LP: #971685 + - CVE-2012-1601 + + -- Stefan Bader Wed, 02 May 2012 12:14:39 +0200 + +linux-ec2 (2.6.32-345.47) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebase to Ubuntu-2.6.32-41.88 + * Release Tracking Bug + - LP: #968780 + + [ Ubuntu: 2.6.32-41.88 ] + + * [Config] restore build-% shortcut + * SAUCE: ubuntu drivers: use UMH_WAIT_PROC consistently + - LP: #963685 + * Revert "Revert "USB: xhci - fix unsafe macro definitions"" + - LP: #948139 + * Revert "Revert "USB: xhci - fix math in xhci_get_endpoint_interval()"" + - LP: #948139 + * Revert "Revert "xhci: Fix full speed bInterval encoding."" + - LP: #948139 + * bsg: fix sysfs link remove warning + - LP: #946928 + * hwmon: (f75375s) Fix bit shifting in f75375_write16 + - LP: #948139 + * lib: proportion: lower PROP_MAX_SHIFT to 32 on 64-bit kernel + - LP: #948139 + * relay: prevent integer overflow in relay_open() + - LP: #948139 + * mac80211: timeout a single frame in the rx reorder buffer + - LP: #948139 + * kernel.h: fix wrong usage of __ratelimit() + - LP: #948139 + * printk_ratelimited(): fix uninitialized spinlock + - LP: #948139 + * hwmon: (f75375s) Fix automatic pwm mode setting for F75373 & F75375 + - LP: #948139 + * crypto: sha512 - Use binary and instead of modulus + - LP: #948139 + * crypto: sha512 - Avoid stack bloat on i386 + - LP: #948139 + * crypto: sha512 - use standard ror64() + - LP: #948139 + * SCSI: 3w-9xxx fix bug in sgl loading + - LP: #948139 + * ARM: 7321/1: cache-v7: Disable preemption when reading CCSIDR + - LP: #948139 + * ARM: 7325/1: fix v7 boot with lockdep enabled + - LP: #948139 + * USB: Added Kamstrup VID/PIDs to cp210x serial driver. + - LP: #948139 + * USB: Fix handoff when BIOS disables host PCI device. + - LP: #948139 + * xhci: Fix encoding for HS bulk/control NAK rate. + - LP: #948139 + * hdpvr: fix race conditon during start of streaming + - LP: #948139 + * cdrom: use copy_to_user() without the underscores + - LP: #948139 + * autofs: work around unhappy compat problem on x86-64 + - LP: #948139 + * Fix autofs compile without CONFIG_COMPAT + - LP: #948139 + * compat: fix compile breakage on s390 + - LP: #948139 + * PM: Print a warning if firmware is requested when tasks are frozen + - LP: #948139 + * firmware loader: allow builtin firmware load even if usermodehelper is + disabled + - LP: #948139 + * PM / Sleep: Fix freezer failures due to racy + usermodehelper_is_disabled() + - LP: #948139 + * PM / Sleep: Fix read_unlock_usermodehelper() call. + - LP: #948139 + * Linux 2.6.32.58 + - LP: #948139 + * regset: Prevent null pointer reference on readonly regsets + - LP: #949905 + - CVE-2012-1097 + * regset: Return -EFAULT, not -EIO, on host-side memory fault + - LP: #949905 + - CVE-2012-1097 + * KVM: Remove ability to assign a device without iommu support + - LP: #897812 + - CVE-2011-4347 + * eCryptfs: Copy up lower inode attrs after setting lower xattr + * eCryptfs: Improve statfs reporting + - LP: #885744 + * drm/i915: no lvds quirk for AOpen MP45 + - LP: #955078 + * drm/radeon/kms: fix MSI re-arm on rv370+ + - LP: #955078 + * Linux 2.6.32.58+drm33.24 + - LP: #955078 + * KVM: x86: extend "struct x86_emulate_ops" with "get_cpuid" + - LP: #917842 + - CVE-2012-0045 + * KVM: x86: fix missing checks in syscall emulation + - LP: #917842 + - CVE-2012-0045 + * eCryptfs: Clear ECRYPTFS_NEW_FILE flag during truncate + - LP: #745836 + * compat: Re-add missing asm/compat.h include to fix compile breakage on + s390 + - LP: #959252 + * IA64: Remove COMPAT_IA32 support + - LP: #959252 + * writeback: fixups for !dirty_writeback_centisecs + - LP: #959252 + * KEYS: Enable the compat keyctl wrapper on s390x + - LP: #959252 + * cifs: fix dentry refcount leak when opening a FIFO on lookup + - LP: #959252 + * net/usbnet: avoid recursive locking in usbnet_stop() + - LP: #959252 + * watchdog: hpwdt: clean up set_memory_x call for 32 bit + - LP: #959252 + * blkfront: Fix backtrace in del_gendisk + - LP: #959252 + * Linux 2.6.32.59 + - LP: #959252 + * USB: EHCI: go back to using the system clock for QH unlinks + - LP: #624510 + * kmod: fix resource leak in call_usermodehelper_pipe() + - LP: #963685 + * kmod: add init function to usermodehelper + - LP: #963685 + * usermodehelper: use UMH_WAIT_PROC consistently + - LP: #963685 + * usermodehelper: introduce umh_complete(sub_info) + - LP: #963685 + * usermodehelper: implement UMH_KILLABLE + - LP: #963685 + * usermodehelper: kill umh_wait, renumber UMH_* constants + - LP: #963685 + * usermodehelper: ____call_usermodehelper() doesn't need do_exit() + - LP: #963685 + * kmod: introduce call_modprobe() helper + - LP: #963685 + * kmod: make __request_module() killable + - LP: #963685 + + -- Stefan Bader Fri, 30 Mar 2012 13:34:20 +0200 + +linux-ec2 (2.6.32-344.46) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-40.87 + * Release Tracking Bug + - LP: #948277 + + [ Ubuntu: 2.6.32-40.87 ] + + * IB/mlx4: pass SMP vendor-specific attribute MADs to firmware + - LP: #932043 + * mm/filemap_xip.c: fix race condition in xip_file_fault() + - LP: #932043 + * NFSv4: Fix up the callers of nfs4_state_end_reclaim_reboot + - LP: #932043 + * NFSv4: The state manager shouldn't exit on errors that were handled + - LP: #932043 + * NFSv4: Ensure the state manager handles NFS4ERR_NO_GRACE correctly + - LP: #932043 + * NFSv4: Handle NFS4ERR_GRACE when recovering an expired lease. + - LP: #932043 + * NFSv4: Fix open recovery + - LP: #932043 + * rpc client can not deal with ENOSOCK, so translate it into ENOCONN + - LP: #932043 + * udf: Mark LVID buffer as uptodate before marking it dirty + - LP: #932043 + * eCryptfs: Infinite loop due to overflow in ecryptfs_write() + - LP: #932043 + * atmel_lcdfb: fix usage of CONTRAST_CTR in suspend/resume + - LP: #932043 + * Staging: asus_oled: fix image processing + - LP: #932043 + * Staging: android: binder: Don't call dump_stack in binder_vma_open + - LP: #932043 + * Staging: android: binder: Fix crashes when sharing a binder file + between processes + - LP: #932043 + * usb: gadget: zero: fix bug in loopback autoresume handling + - LP: #932043 + * usb: Skip PCI USB quirk handling for Netlogic XLP + - LP: #932043 + * USB: usbserial: add new PID number (0xa951) to the ftdi driver + - LP: #932043 + * mmc: cb710 core: Add missing spin_lock_init for irq_lock of struct + cb710_chip + - LP: #932043 + * net: fix sk_forward_alloc corruptions + - LP: #932043 + * net: sock_queue_err_skb() dont mess with sk_forward_alloc + - LP: #932043 + * Linux 2.6.32.57 + - LP: #932043 + * Ban ecryptfs over ecryptfs + - LP: #932987 + * eCryptfs: Remove mmap from directory operations + - LP: #400443 + * eCryptfs: Use notify_change for truncating lower inodes + - LP: #451368 + * ecryptfs: read on a directory should return EISDIR if not supported + - LP: #719691 + * eCryptfs: Remove extra d_delete in ecryptfs_rmdir + - LP: #723518 + * eCryptfs: Clear i_nlink in rmdir + - LP: #723518 + * KVM: Device assignment permission checks + - LP: #897812 + - CVE-2011-4347 + * block: Fix io_context leak after clone with CLONE_IO + - LP: #940743 + - CVE-2012-0879 + * block: Fix io_context leak after failure of clone with CLONE_IO + - LP: #940743 + - CVE-2012-0879 + * eCryptfs: Handle failed metadata read in lookup + - LP: #509180 + * drm/i915: Fix TV Out refresh rate. + - LP: #945114 + * Linux 2.6.32.57+drm33.23 + - LP: #945114 + + -- Stefan Bader Wed, 07 Mar 2012 10:26:52 +0100 + +linux-ec2 (2.6.32-343.45) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebase to Ubuntu-2.6.32-39.86 + * Release Tracking Bug + - LP: #931914 + + [ Ubuntu: 2.6.32-39.86 ] + + * ext4: fix undefined behavior in ext4_fill_flex_info() + - LP: #922315 + * ALSA: snd-usb-us122l: Delete calls to preempt_disable + - LP: #922315 + * ALSA: ice1724 - Check for ac97 to avoid kernel oops + - LP: #922315 + * ALSA: hda - Return the error from get_wcaps_type() for invalid NIDs + - LP: #922315 + * HID: bump maximum global item tag report size to 96 bytes + - LP: #724831, #922315 + * UBI: fix use-after-free on error path + - LP: #922315 + * PCI: Fix PCI_EXP_TYPE_RC_EC value + - LP: #922315 + * PCI: msi: Disable msi interrupts when we initialize a pci device + - LP: #922315 + * xen/xenbus: Reject replies with payload > XENSTORE_PAYLOAD_MAX. + - LP: #922315 + * ima: free duplicate measurement memory + - LP: #922315 + * PNP: work around Dell 1536/1546 BIOS MMCONFIG bug that breaks USB + - LP: #922315 + * x86: Fix mmap random address range + - LP: #922315 + * UBI: fix nameless volumes handling + - LP: #922315 + * i2c: Fix error value returned by several bus drivers + - LP: #922315 + * V4L/DVB: v4l2-ioctl: integer overflow in video_usercopy() + - LP: #922315 + * svcrpc: fix double-free on shutdown of nfsd after changing pool mode + - LP: #922315 + * svcrpc: destroy server sockets all at once + - LP: #922315 + * nfsd: Fix oops when parsing a 0 length export + - LP: #922315 + * USB: cdc-wdm: fix misuse of logical operation in place of bitop + - LP: #922315 + * fix cputime overflow in uptime_proc_show + - LP: #922315 + * USB: Fix 'bad dma' problem on WDM device disconnect + - LP: #922315 + * block: add and use scsi_blk_cmd_ioctl + - LP: #922315 + * kernel.h: add printk_ratelimited and pr__rl + - LP: #922315 + * ALSA: HDA: Fix internal microphone on Dell Studio 16 XPS 1645 + - LP: #795823, #922315 + * sym53c8xx: Fix NULL pointer dereference in slave_destroy + - LP: #922315 + * score: fix off-by-one index into syscall table + - LP: #922315 + * kprobes: initialize before using a hlist + - LP: #922315 + * Linux 2.6.32.55 + - LP: #922315 + * eCryptfs: Sanitize write counts of /dev/ecryptfs + - LP: #926321 + * ecryptfs: Improve metadata read failure logging + - LP: #926321 + * eCryptfs: Make truncate path killable + - LP: #926321 + * crypto: sha512 - make it work, undo percpu message schedule + - LP: #926321 + * crypto: sha512 - reduce stack usage to safe number + - LP: #926321 + * block: fail SCSI passthrough ioctls on partition devices + - LP: #926321 + * dm: do not forward ioctls from logical volumes to the underlying device + - LP: #926321 + * USB: ftdi_sio: fix TIOCSSERIAL baud_base handling + - LP: #926321 + * USB: ftdi_sio: add PID for TI XDS100v2 / BeagleBone A3 + - LP: #926321 + * USB: serial: ftdi additional IDs + - LP: #926321 + * USB: ftdi_sio: Add more identifiers + - LP: #926321 + * USB: cdc-wdm: updating desc->length must be protected by spin_lock + - LP: #926321 + * usb: io_ti: Make edge_remove_sysfs_attrs the port_remove method. + - LP: #926321 + * USB: usbsevseg: fix max length + - LP: #926321 + * hwmon: (f71805f) Fix clamping of temperature limits + - LP: #926321 + * hwmon: (sht15) fix bad error code + - LP: #926321 + * USB: serial: CP210x: Added USB-ID for the Link Instruments MSO-19 + - LP: #926321 + * USB: cp210x: do not map baud rates to B0 + - LP: #926321 + * USB: ftdi_sio: fix initial baud rate + - LP: #926321 + * Linux 2.6.32.56 + - LP: #926321 + * drm: Fix authentication kernel crash + - LP: #931415 + * Linux 2.6.32.56+drm33.22 + - LP: #931415 + + -- Stefan Bader Tue, 14 Feb 2012 15:14:37 +0100 + +linux-ec2 (2.6.32-342.44) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-38.85 + * Release Tracking Bug + - LP: #921882 + + [ Ubuntu: 2.6.32-38.85 ] + + * Revert "ARM: 7220/1: mmc: mmci: Fixup error handling for dma" + - LP: #921113 + + [ Ubuntu: 2.6.32-38.84 ] + + * KVM: x86: Prevent starting PIT timers in the absence of irqchip support + - LP: #911303 + - CVE-2011-4622 + * cfq-iosched: fix cfq_cic_link() race confition + - LP: #913463 + * SCSI: mpt2sas: _scsih_smart_predicted_fault uses GFP_KERNEL in + interrupt context + - LP: #913463 + * MXC PWM: should active during DOZE/WAIT/DBG mode + - LP: #913463 + * vfs: __read_cache_page should use gfp argument rather than GFP_KERNEL + - LP: #913463 + * ARM:imx:fix pwm period value + - LP: #913463 + * ARM: 7220/1: mmc: mmci: Fixup error handling for dma + - LP: #913463 + * watchdog: hpwdt: Changes to handle NX secure bit in 32bit path + - LP: #913463 + * hung_task: fix false positive during vfork + - LP: #913463 + * ath9k: Fix kernel panic in AR2427 in AP mode + - LP: #913463 + * Linux 2.6.32.53 + - LP: #913463 + * MAINTAINERS: stable: Update address + - LP: #915900 + * Documentation: Update stable address + - LP: #915900 + * firmware: Fix an oops on reading fw_priv->fw in sysfs loading file + - LP: #915900 + * offb: Fix setting of the pseudo-palette for >8bpp + - LP: #915900 + * offb: Fix bug in calculating requested vram size + - LP: #915900 + * asix: new device id + - LP: #915900 + * reiserfs: Fix quota mount option parsing + - LP: #915900 + * reiserfs: Force inode evictions before umount to avoid crash + - LP: #915900 + * USB: update documentation for usbmon + - LP: #915900 + * drivers/usb/class/cdc-acm.c: clear dangling pointer + - LP: #915900 + * USB: isight: fix kernel bug when loading firmware + - LP: #915900 + * usb: usb-storage doesn't support dynamic id currently, the patch + disables the feature to fix an oops + - LP: #915900 + * USB: add quirk for another camera + - LP: #915900 + * USB: omninet: fix write_room + - LP: #915900 + * USB: Add USB-ID for Multiplex RC serial adapter to cp210x.c + - LP: #915900 + * asix: fix infinite loop in rx_fixup() + - LP: #915900 + * PM / Sleep: Fix race between CPU hotplug and freezer + - LP: #915900 + * SCSI: scsi_dh: check queuedata pointer before proceeding further + - LP: #915900 + * xfs: validate acl count + - LP: #915900 + * xfs: fix acl count validation in xfs_acl_from_disk() + - LP: #915900 + * Linux 2.6.32.54 + - LP: #915900 + + -- Stefan Bader Thu, 26 Jan 2012 15:17:59 +0100 + +linux-ec2 (2.6.32-342.43) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-38.83 + * XEN: x86/mpparse: Account for bus types other than ISA and PCI + - LP: #902317 + * Release Tracking Bug + - LP: #911230 + + [ Ubuntu: 2.6.32-38.83 ] + + * Revert "clockevents: Set noop handler in clockevents_exchange_device()" + - LP: #911392 + * Linux 2.6.32.52 + - LP: #911392 + + [ Ubuntu: 2.6.32-38.82 ] + + * SAUCE: netns: Add quota for number of NET_NS instances. + * [Config] CONFIG_NET_NS=y + - LP: #790863 + * Revert "core: Fix memory leak/corruption on VLAN GRO_DROP, + CVE-2011-1576" + * hfs: fix hfs_find_init() sb->ext_tree NULL ptr oops, CVE-2011-2203 + - LP: #899466 + - CVE-2011-2203 + * net: ipv4: relax AF_INET check in bind() + - LP: #900396 + * KEYS: Fix a NULL pointer deref in the user-defined key type, + CVE-2011-4110 + - LP: #894369 + - CVE-2011-4110 + * i2c-algo-bit: Generate correct i2c address sequence for 10-bit target + - LP: #902317 + * eCryptfs: Extend array bounds for all filename chars + - LP: #902317 + * PCI hotplug: shpchp: don't blindly claim non-AMD 0x7450 device IDs + - LP: #902317 + * ARM: 7161/1: errata: no automatic store buffer drain + - LP: #902317 + * ALSA: lx6464es - fix device communication via command bus + - LP: #902317 + * SUNRPC: Ensure we return EAGAIN in xs_nospace if congestion is cleared + - LP: #902317 + * timekeeping: add arch_offset hook to ktime_get functions + - LP: #902317 + * p54spi: Add missing spin_lock_init + - LP: #902317 + * p54spi: Fix workqueue deadlock + - LP: #902317 + * nl80211: fix MAC address validation + - LP: #902317 + * gro: reset vlan_tci on reuse + - LP: #902317 + * staging: usbip: bugfix for deadlock + - LP: #902317 + * staging: comedi: fix oops for USB DAQ devices. + - LP: #902317 + * Staging: comedi: fix signal handling in read and write + - LP: #902317 + * USB: whci-hcd: fix endian conversion in qset_clear() + - LP: #902317 + * usb: ftdi_sio: add PID for Propox ISPcable III + - LP: #902317 + * usb: option: add SIMCom SIM5218 + - LP: #902317 + * USB: usb-storage: unusual_devs entry for Kingston DT 101 G2 + - LP: #902317 + * SCSI: scsi_lib: fix potential NULL dereference + - LP: #902317 + * SCSI: Silencing 'killing requests for dead queue' + - LP: #902317 + * cifs: fix cifs stable patch cifs-fix-oplock-break-handling-try-2.patch + - LP: #902317 + * sched, x86: Avoid unnecessary overflow in sched_clock + - LP: #902317 + * x86/mpparse: Account for bus types other than ISA and PCI + - LP: #902317 + * oprofile, x86: Fix crash when unloading module (nmi timer mode) + - LP: #902317 + * genirq: Fix race condition when stopping the irq thread + - LP: #902317 + * tick-broadcast: Stop active broadcast device when replacing it + - LP: #902317 + * clockevents: Set noop handler in clockevents_exchange_device() + - LP: #902317 + * Linux 2.6.32.50 + - LP: #902317 + * nfsd4: permit read opens of executable-only files + - LP: #833300 + * ipv6: Allow inet6_dump_addr() to handle more than 64 addresses + - LP: #863394 + * ALSA: sis7019 - give slow codecs more time to reset + - LP: #907774 + * ALSA: hda/realtek - Fix Oops in alc_mux_select() + - LP: #907774 + * ARM: davinci: dm646x evm: wrong register used in + setup_vpif_input_channel_mode + - LP: #907774 + * oprofile: Free potentially owned tasks in case of errors + - LP: #907774 + * oprofile: Fix locking dependency in sync_start() + - LP: #907774 + * percpu: fix chunk range calculation + - LP: #907774 + * xfrm: Fix key lengths for rfc3686(ctr(aes)) + - LP: #907774 + * linux/log2.h: Fix rounddown_pow_of_two(1) + - LP: #907774 + * jbd/jbd2: validate sb->s_first in journal_get_superblock() + - LP: #907774 + * hfs: fix hfs_find_init() sb->ext_tree NULL ptr oops + - LP: #907774 + * export __get_user_pages_fast() function + - LP: #907774 + * oprofile, x86: Fix nmi-unsafe callgraph support + - LP: #907774 + * oprofile, x86: Fix crash when unloading module (timer mode) + - LP: #907774 + * ext4: avoid hangs in ext4_da_should_update_i_disksize() + - LP: #907774 + * USB: cdc-acm: add IDs for Motorola H24 HSPA USB module. + - LP: #907774 + * Linux 2.6.32.51 + - LP: #907774 + + -- Stefan Bader Wed, 04 Jan 2012 17:57:42 +0100 + +linux-ec2 (2.6.32-341.42) lucid-proposed; urgency=low + + [Stefan Bader] + + * Release Tracking Bug + - LP: #900752 + * XEN: xen-blkfront: fix data size for xenbus_gather in blkfront_connect + - LP: #888042 + + -- Stefan Bader Tue, 06 Dec 2011 14:30:05 +0100 + +linux-ec2 (2.6.32-341.41) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Release Tracking Bug + - LP: #899737 + * Revert "SAUCE: XEN: Import 26ab8408157fbbc669e1aab1f271bb3cb1c433d0" + - LP: #888042 + * Rebased to Ubuntu-Ubuntu-2.6.32-37.81 + + [ Ubuntu: 2.6.32-37.81 ] + + * (pre-stable) sparc: sigutil: Include + - LP: #899311 + + [ Ubuntu: 2.6.32-37.80 ] + + * Revert "x86, hotplug: Use mwait to offline a processor, fix the legacy + case" + - LP: #888042 + * Revert "usb: musb: restore INDEX register in resume path" + - LP: #888042 + * Revert "MIPS: MTX-1: Make au1000_eth probe all PHY + - LP: #888042 + * Revert "ALSA: hda: Fix quirk for Dell Inspiron 910" + - LP: #875300 + * USB: ftdi_sio: add Calao reference board support + - LP: #888042 + * USB: EHCI: Do not rely on PORT_SUSPEND to stop USB resuming in + ehci_bus_resume(). + - LP: #888042 + * rt2x00: do not drop usb dev reference counter on suspend + - LP: #888042 + * atm: br2684: Fix oops due to skb->dev being NULL + - LP: #888042 + * sparc: Allow handling signals when stack is corrupted. + - LP: #888042 + * sparc: fix array bounds error setting up PCIC NMI trap + - LP: #888042 + * net: Fix IPv6 GSO type checks in Intel ethernet drivers + - LP: #888042 + * ipv6: Add GSO support on forwarding path + - LP: #888042 + * GRO: fix merging a paged skb after non-paged skbs + - LP: #888042 + * xen-blkfront: fix data size for xenbus_gather in blkfront_connect + - LP: #888042 + * md/linear: avoid corrupting structure while waiting for rcu_free to + complete. + - LP: #888042 + * powerpc/pci: Check devices status property when scanning OF tree + - LP: #888042 + * xen: x86_32: do not enable iterrupts when returning from exception in + interrupt context + - LP: #888042 + * xen/smp: Warn user why they keel over - nosmp or noapic and what to use + instead. + - LP: #888042 + * ARM: davinci: da850 EVM: read mac address from SPI flash + - LP: #888042 + * md: Fix handling for devices from 2TB to 4TB in 0.90 metadata. + - LP: #888042 + * net/9p: fix client code to fail more gracefully on protocol error + - LP: #888042 + * fs/9p: Fid is not valid after a failed clunk. + - LP: #888042 + * net/9p: Fix the msize calculation. + - LP: #888042 + * irda: fix smsc-ircc2 section mismatch warning + - LP: #888042 + * qla2xxx: Correct inadvertent loop state transitions during port-update + handling. + - LP: #888042 + * e1000: Fix driver to be used on PA RISC C8000 workstations + - LP: #888042 + * ASoC: Fix reporting of partial jack updates + - LP: #888042 + * ALSA: HDA: Cirrus - fix "Surround Speaker" volume control name + - LP: #888042 + * b43: Fix beacon problem in ad-hoc mode + - LP: #888042 + * wireless: Reset beacon_found while updating regulatory + - LP: #888042 + * USB: PL2303: correctly handle baudrates above 115200 + - LP: #888042 + * ASIX: Add AX88772B USB ID + - LP: #888042 + * hvc_console: Improve tty/console put_chars handling + - LP: #888042 + * TPM: Call tpm_transmit with correct size + - LP: #888042 + * TPM: Zero buffer after copying to userspace + - LP: #888042 + * libiscsi_tcp: fix LLD data allocation + - LP: #888042 + * cnic: Improve NETDEV_UP event handling + - LP: #888042 + * ALSA: hda/realtek - Avoid bogus HP-pin assignment + - LP: #888042 + * 3w-9xxx: fix iommu_iova leak + - LP: #888042 + * aacraid: reset should disable MSI interrupt + - LP: #888042 + * libsas: fix failure to revalidate domain for anything but the first + expander child. + - LP: #888042 + * cfg80211: Fix validation of AKM suites + - LP: #888042 + * libsas: fix panic when single phy is disabled on a wide port + - LP: #888042 + * ahci: Enable SB600 64bit DMA on Asus M3A + - LP: #888042 + * HID: usbhid: Add support for SiGma Micro chip + - LP: #888042 + * hwmon: (w83627ehf) Properly report thermal diode sensors + - LP: #888042 + * x25: Prevent skb overreads when checking call user data + - LP: #888042 + * staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT + - LP: #888042 + * USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module" + - LP: #888042 + * xhci-mem.c: Check for ring->first_seg != NULL + - LP: #888042 + * ipr: Always initiate hard reset in kdump kernel + - LP: #888042 + * libsas: set sas_address and device type of rphy + - LP: #888042 + * ALSA: HDA: Add new revision for ALC662 + - LP: #877373, #888042 + * x86: Fix compilation bug in kprobes' twobyte_is_boostable + - LP: #888042 + * epoll: fix spurious lockdep warnings + - LP: #888042 + * usbmon vs. tcpdump: fix dropped packet count + - LP: #888042 + * USB: storage: Use normalized sense when emulating autosense + - LP: #888042 + * USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid + - LP: #888042 + * usb: cdc-acm: Owen SI-30 support + - LP: #888042 + * USB: add RESET_RESUME for webcams shown to be quirky + - LP: #888042 + * USB: pl2303: add id for SMART device + - LP: #888042 + * USB: ftdi_sio: add PID for Sony Ericsson Urban + - LP: #888042 + * USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board + - LP: #888042 + * QE/FHCI: fixed the CONTROL bug + - LP: #888042 + * Update email address for stable patch submission + - LP: #888042 + * kobj_uevent: Ignore if some listeners cannot handle message + - LP: #888042 + * kmod: prevent kmod_loop_msg overflow in __request_module() + - LP: #888042 + * time: Change jiffies_to_clock_t() argument type to unsigned long + - LP: #888042 + * nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir() + - LP: #888042 + * nfsd4: ignore WANT bits in open downgrade + - LP: #888042 + * ASoC: ak4642: fixup cache register table + - LP: #888042 + * ASoC: ak4535: fixup cache register table + - LP: #888042 + * KVM: s390: check cpu_id prior to using it + - LP: #888042 + * ccwgroup: move attributes to attribute group + - LP: #888042 + * iommu/amd: Fix wrong shift direction + - LP: #888042 + * carminefb: Fix module parameters permissions + - LP: #888042 + * uvcvideo: Set alternate setting 0 on resume if the bus has been reset + - LP: #888042 + * tuner_xc2028: Allow selection of the frequency adjustment code for + XC3028 + - LP: #888042 + * plat-mxc: iomux-v3.h: implicitly enable pull-up/down when that's + desired + - LP: #888042 + * um: fix ubd cow size + - LP: #888042 + * cfq: calculate the seek_mean per cfq_queue not per cfq_io_context + - LP: #888042 + * cfq: merge cooperating cfq_queues + - LP: #888042 + * cfq: change the meaning of the cfqq_coop flag + - LP: #888042 + * cfq: break apart merged cfqqs if they stop cooperating + - LP: #888042 + * cfq-iosched: get rid of the coop_preempt flag + - LP: #888042 + * cfq: Don't allow queue merges for queues that have no process + references + - LP: #888042 + * xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend. + - LP: #888042 + * KVM: x86: Reset tsc_timestamp on TSC writes + - LP: #888042 + * watchdog: mtx1-wdt: fix build failure + - LP: #888042 + * kcore: fix test for end of list + - LP: #888042 + * thinkpad-acpi: module autoloading for newer Lenovo ThinkPads. + - LP: #888042 + * scm: lower SCM_MAX_FD + - LP: #888042 + * NLM: Don't hang forever on NLM unlock requests + - LP: #888042 + * ext4: fix BUG_ON() in ext4_ext_insert_extent() + - LP: #888042 + * drivers/net/rionet.c: fix ethernet address macros for LE platforms + - LP: #888042 + * ext2,ext3,ext4: don't inherit APPEND_FL or IMMUTABLE_FL for new inodes + - LP: #888042 + * USB: Serial: Add device ID for Sierra Wireless MC8305 + - LP: #888042 + * USB: Serial: Add PID(0xF7C0) to FTDI SIO driver for a + zeitcontrol-device + - LP: #888042 + * Linux 2.6.32.47 + - LP: #888042 + * Linux 2.6.32.48 + - LP: #888042 + * drm: radeon: fix sign bug + - LP: #888042 + * drm/radeon/kms: prefer high post dividers in legacy pll algo + - LP: #888042 + * Linux 2.6.32.48+drm33.21 + - LP: #888042 + * crypto: ghash - Avoid null pointer dereference if no key is set + - LP: #887299 + - CVE-2011-4081 + * xfs: Fix possible memory corruption in xfs_readlink, CVE-2011-4077 + - LP: #887298 + - CVE-2011-4077 + * jbd/jbd2: validate sb->s_first in journal_get_superblock() + - LP: #893148 + - CVE-2011-4132 + * hfs: add sanity check for file name length, CVE-2011-4330 + - LP: #894374 + - CVE-2011-4330 + * ipv6: udp: fix the wrong headroom check + - LP: #894373 + - CVE-2011-4326 + * st: fix race in st_scsi_execute_end + - LP: #897377 + * Make scsi_free_queue() kill pending SCSI commands + - LP: #897377 + * NFS/sunrpc: don't use a credential with extra groups. + - LP: #897377 + * netlink: validate NLA_MSECS length + - LP: #897377 + * mtd: mtdchar: add missing initializer on raw write + - LP: #897377 + * PM / Suspend: Off by one in pm_suspend() + - LP: #897377 + * kbuild: Disable -Wunused-but-set-variable for gcc 4.6.0 + - LP: #897377 + * ASoC: wm8940: Properly set codec->dapm.bias_level + - LP: #897377 + * md/raid5: abort any pending parity operations when array fails. + - LP: #897377 + * Remove the old V4L1 v4lgrab.c file + - LP: #897377 + * genirq: Add IRQF_RESUME_EARLY and resume such IRQs earlier + - LP: #897377 + * mm: avoid null pointer access in vm_struct via /proc/vmallocinfo + - LP: #897377 + * kbuild: Fix passing -Wno-* options to gcc 4.4+ + - LP: #897377 + * USB: serial: pl2303: rm duplicate id + - LP: #897377 + * USB: Fix Corruption issue in USB ftdi driver ftdi_sio.c + - LP: #897377 + * usb-storage: Accept 8020i-protocol commands longer than 12 bytes + - LP: #897377 + * USB: add quirk for Logitech C600 web cam + - LP: #897377 + * USB: quirks: adding more quirky webcams to avoid squeaky audio + - LP: #897377 + * Linux 2.6.32.49 + - LP: #897377 + + -- Stefan Bader Mon, 05 Dec 2011 16:18:55 +0100 + +linux-ec2 (2.6.32-340.40) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to Ubuntu-2.6.32-36.79 + * Release Tracking Bug + - LP: #888700 + + [ Ubuntu: 2.6.32-36.79 ] + + * net_sched: Fix qdisc_notify() - CVE-2011-2525 + - LP: #869250 + - CVE-2011-2525 + * ipv6: restore correct ECN handling on TCP xmit + - LP: #872179 + * nl80211: fix overflow in ssid_len - CVE-2011-2517 + - LP: #869245 + - CVE-2011-2517 + * vm: fix vm_pgoff wrap in stack expansion - CVE-2011-2496 + - LP: #869243 + - CVE-2011-2496 + * vm: fix vm_pgoff wrap in upward expansion - CVE-2011-2496 + - LP: #869243 + - CVE-2011-2496 + * drm: mm: fix range restricted allocations + - LP: #873130 + * NLM: Don't hang forever on NLM unlock requests - CVE-2011-2491 + - LP: #869237 + - CVE-2011-2491 + + -- Stefan Bader Mon, 14 Nov 2011 17:04:46 +0100 + +linux-ec2 (2.6.32-319.39) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-35.78 + * Release Tracking Bug + - LP: #873063 + + [ Ubuntu: 2.6.32-35.78 ] + + * [Config] Force perf to use libiberty for demangling + - LP: #783660 + * [Config] Simplify binary-udebs dependencies + - LP: #832352 + * [Config] kernel preparation cannot be parallelized + - LP: #832352 + * [Config] Linearize module/abi checks + - LP: #832352 + * [Config] Linearize and simplify tree preparation rules + - LP: #832352 + * [Config] Build kernel image in parallel with modules + - LP: #832352 + * [Config] Set concurrency for kmake invocations + - LP: #832352 + * [Config] Improve install-arch-headers speed + - LP: #832352 + * [Config] Fix binary-perarch dependencies + - LP: #832352 + * [Config] Removed stamp-flavours target + - LP: #832352 + * [Config] Serialize binary indep targets + - LP: #832352 + * [Config] Use build stamp directly + - LP: #832352 + * [Config] Restore prepare-% target + - LP: #832352 + * [Config] Fix binary-% build target + * [Config] Fix install-headers target + - LP: #832352 + * SAUCE: igb: Protect stats update + - LP: #829566 + * SAUCE: rtl8192se spams log + - LP: #859702 + * Add mount option to check uid of device being mounted = expect uid, + CVE-2011-1833 + - LP: #732628 + - CVE-2011-1833 + * crypto: Move md5_transform to lib/md5.c + - LP: #827462 + * net: Compute protocol sequence numbers and fragment IDs using MD5. + - LP: #827462 + * ALSA: timer - Fix Oops at closing slave timer + - LP: #827462 + * ALSA: snd-usb-caiaq: Fix keymap for RigKontrol3 + - LP: #827462 + * powerpc: Fix device tree claim code + - LP: #827462 + * powerpc: pseries: Fix kexec on machines with more than 4TB of RAM + - LP: #827462 + * Linux 2.6.32.45+drm33.19 + - LP: #827462 + * ipv6: make fragment identifications less predictable, CVE-2011-2699 + - LP: #827685 + - CVE-2011-2699 + * tunnels: fix netns vs proto registration ordering + - LP: #823296 + * Fix broken backport for IPv6 tunnels in 2.6.32-longterm kernels. + * USB: xhci: fix OS want to own HC + - LP: #837669 + * USB: assign instead of equal in usbtmc.c + - LP: #837669 + * USB: usb-storage: unusual_devs entry for ARM V2M motherboard. + - LP: #837669 + * USB: Serial: Added device ID for Qualcomm Modem in Sagemcom's HiLo3G + - LP: #837669 + * atm: br2864: sent packets truncated in VC routed mode + - LP: #837669 + * hwmon: (ibmaem) add missing kfree + - LP: #837669 + * ALSA: snd-usb-caiaq: Correct offset fields of outbound iso_frame_desc + - LP: #837669 + * mm: fix wrong vmap address calculations with odd NR_CPUS values + - LP: #837669 + * perf tools: do not look at ./config for configuration + - LP: #837669 + * fs/partitions/efi.c: corrupted GUID partition tables can cause kernel + oops + - LP: #837669 + * befs: Validate length of long symbolic links. + - LP: #837669 + * ALSA: snd_usb_caiaq: track submitted output urbs + - LP: #837669 + * ALSA: ac97: Add HP Compaq dc5100 SFF(PT003AW) to Headphone Jack Sense + whitelist + - LP: #826081, #837669 + * futex: Fix regression with read only mappings + - LP: #837669 + * x86-32, vdso: On system call restart after SYSENTER, use int $0x80 + - LP: #837669 + * x86, UV: Remove UV delay in starting slave cpus + - LP: #837669 + * drm/ttm: fix ttm_bo_add_ttm(user) failure path + - LP: #837669 + * fuse: check size of FUSE_NOTIFY_INVAL_ENTRY message + - LP: #837669 + * igb: Fix lack of flush after register write and before delay + - LP: #837669 + * Linux 2.6.32.46 + - LP: #837669 + * cifs: fix possible memory corruption in CIFSFindNext, CVE-2011-3191 + - LP: #834135 + - CVE-2011-3191 + * Bluetooth: Prevent buffer overflow in l2cap config request, + CVE-2011-2497 + - LP: #838423 + - CVE-2011-2497 + * core: Fix memory leak/corruption on VLAN GRO_DROP, CVE-2011-1576 + - LP: #844361 + - CVE-2011-1576 + * ext4: Fix max file size and logical block counting of extent format + file, CVE-2011-2695 + - LP: #819574 + - CVE-2011-2695 + * drm/i915: prepare for fair lru eviction + - LP: #843904 + * drm/i915: Move the eviction logic to its own file. + - LP: #843904 + * drm/i915: Implement fair lru eviction across both rings. (v2) + - LP: #843904 + * drm/i915: Maintain LRU order of inactive objects upon access by CPU + (v2) + - LP: #843904 + * drm/i915/evict: Ensure we completely cleanup on failure + - LP: #843904 + * drm/i915: Periodically flush the active lists and requests + - LP: #843904 + * Make TASKSTATS require root access, CVE-2011-2494 + - LP: #866021 + - CVE-2011-2494 + * proc: fix a race in do_io_accounting(), CVE-2011-2495 + - LP: #866025 + - CVE-2011-2495 + * drm/i915: Remove BUG_ON from i915_gem_evict_something + - LP: #828550 + * drm/i915: Hold a reference to the object whilst unbinding the eviction + list + - LP: #843904 + * drm/i915: Fix refleak during eviction. + - LP: #843904 + * Linux 2.6.32.46+drm33.20 + + [ Ubuntu: 2.6.32-34.77 ] + + * Revert "drm/i915: Remove BUG_ON from i915_gem_evict_something" + * Revert "drm/i915: Periodically flush the active lists and requests" + * Revert "drm/i915/evict: Ensure we completely cleanup on failure" + * Revert "drm/i915: Maintain LRU order of inactive objects upon access by + CPU (v2)" + * Revert "drm/i915: Implement fair lru eviction across both rings. (v2)" + * Revert "drm/i915: Move the eviction logic to its own file." + * Revert "drm/i915: prepare for fair lru eviction" + + -- Stefan Bader Fri, 14 Oct 2011 17:14:29 +0100 + +linux-ec2 (2.6.32-318.38) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-34.76 + * Release Tracking Bug + - LP: #837804 + + [ Ubuntu: 2.6.32-34.76 ] + + * Revert "drm/nv50-nvc0: work around an evo channel hang that some people + see" + * Revert "eCryptfs: Handle failed metadata read in lookup" + * Revert "tunnels: fix netns vs proto registration ordering" + + [ Ubuntu: 2.6.32-34.75 ] + + * drm/i915: Remove BUG_ON from i915_gem_evict_something + - LP: #828550 + + -- Stefan Bader Thu, 01 Sep 2011 16:20:32 +0200 + +linux-ec2 (2.6.32-318.37) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Release Tracking Bug + - LP: #829162 + * XEN: exec: delay address limit change until point of no return + - LP: #802383 + * Rebased to 2.6.32-34.74 + + [ Ubuntu: 2.6.32-34.74 ] + + * proc: fix oops on invalid /proc//maps access, CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + + [ Ubuntu: 2.6.32-34.73 ] + + * SAUCE: rtl8192se: Force a build for a 2.6/3.0 kernel + - LP: #805494 + * [Config] Add enic/fnic to udebs + - LP: #801610 + * tty: icount changeover for other main devices, CVE-2010-4076, + CVE-2010-4077 + - LP: #720189 + - CVE-2010-4077 + * fs/partitions/efi.c: corrupted GUID partition tables can cause kernel + oops + - LP: #795418 + - CVE-2011-1577 + * ftrace: Only update the function code on write to filter files + - LP: #802383 + * kmemleak: Do not return a pointer to an object that kmemleak did not + get + - LP: #802383 + * CPU hotplug, re-create sysfs directory and symlinks + - LP: #802383 + * Fix memory leak in cpufreq_stat + - LP: #802383 + * powerpc/kexec: Fix memory corruption from unallocated slaves + - LP: #802383 + * powerpc/oprofile: Handle events that raise an exception without + overflowing + - LP: #802383 + * mtd: mtdconcat: fix NAND OOB write + - LP: #802383 + * x86, 64-bit: Fix copy_[to/from]_user() checks for the userspace address + limit + - LP: #802383 + * ext3: Fix fs corruption when make_indexed_dir() fails + - LP: #802383 + * jbd: Fix forever sleeping process in do_get_write_access() + - LP: #802383 + * jbd: fix fsync() tid wraparound bug + - LP: #802383 + * ext4: release page cache in ext4_mb_load_buddy error path + - LP: #802383 + * Fix Ultrastor asm snippet + - LP: #802383 + * x86, amd: Do not enable ARAT feature on AMD processors below family + 0x12 + - LP: #802383 + * x86, amd: Use _safe() msr access for GartTlbWlk disable code + - LP: #802383 + * rcu: Fix unpaired rcu_irq_enter() from locking selftests + - LP: #802383 + * staging: usbip: fix wrong endian conversion + - LP: #802383 + * Fix for buffer overflow in ldm_frag_add not sufficient + - LP: #802383 + * seqlock: Don't smp_rmb in seqlock reader spin loop + - LP: #802383 + * ALSA: HDA: Use one dmic only for Dell Studio 1558 + - LP: #731706, #802383 + * ASoC: Ensure output PGA is enabled for line outputs in wm_hubs + - LP: #802383 + * ASoC: Add some missing volume update bit sets for wm_hubs devices + - LP: #802383 + * mm/page_alloc.c: prevent unending loop in __alloc_pages_slowpath() + - LP: #802383 + * loop: limit 'max_part' module param to DISK_MAX_PARTS + - LP: #802383 + * loop: handle on-demand devices correctly + - LP: #802383 + * USB: CP210x Add 4 Device IDs for AC-Services Devices + - LP: #802383 + * USB: moto_modem: Add USB identifier for the Motorola VE240. + - LP: #802383 + * USB: serial: ftdi_sio: adding support for TavIR STK500 + - LP: #802383 + * USB: gamin_gps: Fix for data transfer problems in native mode + - LP: #802383 + * usb/gadget: at91sam9g20 fix end point max packet size + - LP: #802383 + * usb: gadget: rndis: don't test against req->length + - LP: #802383 + * OHCI: fix regression caused by nVidia shutdown workaround + - LP: #802383 + * p54usb: add zoom 4410 usbid + - LP: #802383 + * eCryptfs: Allow 2 scatterlist entries for encrypted filenames + - LP: #802383 + * UBIFS: fix a rare memory leak in ro to rw remounting path + - LP: #802383 + * i8k: Avoid lahf in 64-bit code + - LP: #802383 + * cpuidle: menu: fixed wrapping timers at 4.294 seconds + - LP: #802383 + * dm table: reject devices without request fns + - LP: #802383 + * atm: expose ATM device index in sysfs + - LP: #802383 + * brd: limit 'max_part' module param to DISK_MAX_PARTS + - LP: #802383 + * brd: handle on-demand devices correctly + - LP: #802383 + * SUNRPC: Deal with the lack of a SYN_SENT sk->sk_state_change + callback... + - LP: #802383 + * PCI: Add quirk for setting valid class for TI816X Endpoint + - LP: #802383 + * xen mmu: fix a race window causing leave_mm BUG() + - LP: #802383 + * netfilter: nf_conntrack_reasm: properly handle packets fragmented into + a single fragment + - LP: #802383 + * fix memory leak in scsi_report_lun_scan + - LP: #802383 + * fix refcounting bug in scsi_get_host_dev + - LP: #802383 + * fix duplicate removal on error path in scsi_sysfs_add_sdev + - LP: #802383 + * UBIFS: fix shrinker object count reports + - LP: #802383 + * UBIFS: fix memory leak on error path + - LP: #802383 + * nbd: limit module parameters to a sane value + - LP: #802383 + * mm: fix ENOSPC returned by handle_mm_fault() + - LP: #802383 + * PCI: Set PCIE maxpayload for card during hotplug insertion + - LP: #802383 + * nl80211: fix check for valid SSID size in scan operations + - LP: #802383 + * lockdep: Fix lock_is_held() on recursion + - LP: #802383 + * drm/i915: Add a no lvds quirk for the Asus EeeBox PC EB1007 + - LP: #802383 + * drm/radeon/kms: fix for radeon on systems >4GB without hardware iommu + - LP: #802383 + * fat: Fix corrupt inode flags when remove ATTR_SYS flag + - LP: #802383 + * xen: off by one errors in multicalls.c + - LP: #802383 + * x86/amd-iommu: Fix 3 possible endless loops + - LP: #802383 + * USB: cdc-acm: Adding second ACM channel support for Nokia E7 and C7 + - LP: #802383 + * USB: core: Tolerate protocol stall during hub and port status read + - LP: #802383 + * USB: serial: add another 4N-GALAXY.DE PID to ftdi_sio driver + - LP: #802383 + * ALSA: hda: Fix quirk for Dell Inspiron 910 + - LP: #792712, #802383 + * oprofile, dcookies: Fix possible circular locking dependency + - LP: #802383 + * CPUFREQ: Remove cpufreq_stats sysfs entries on module unload. + - LP: #802383 + * md: check ->hot_remove_disk when removing disk + - LP: #802383 + * md/raid5: fix raid5_set_bi_hw_segments + - LP: #802383 + * md/raid5: fix FUA request handling in ops_run_io() + - LP: #802383 + * ata: use pci_dev->revision + - LP: #802383 + * pata_cmd64x: fix PIO setup + - LP: #802383 + * pata_cmd64x: cmd648_bmdma_stop() fix + - LP: #802383 + * pata_cmd64x: remove unused definitions + - LP: #802383 + * pata_cm64x: fix boot crash on parisc + - LP: #802383 + * ACPI: use _HID when supplied by root-level devices + - LP: #802383 + * xfs: properly account for reclaimed inodes + - LP: #802383 + * exec: delay address limit change until point of no return + - LP: #802383 + * netfilter: IPv6: initialize TOS field in REJECT target module + - LP: #802383 + * netfilter: IPv6: fix DSCP mangle code + - LP: #802383 + * genirq: Add IRQF_FORCE_RESUME + - LP: #802383 + * xen: Use IRQF_FORCE_RESUME + - LP: #802383 + * time: Compensate for rounding on odd-frequency clocksources + - LP: #802383 + * Linux 2.6.32.42 + - LP: #802383 + * taskstats: don't allow duplicate entries in listener mode, + CVE-2011-2484 + - LP: #806390 + - CVE-2011-2484 + * drm_mm: extract check_free_mm_node + - LP: #599017, #807508 + * drm: implement helper functions for scanning lru list + - LP: #599017, #807508 + * drm/i915: prepare for fair lru eviction + - LP: #599017, #807508 + * drm/i915: Move the eviction logic to its own file. + - LP: #599017, #807508 + * drm/i915: Implement fair lru eviction across both rings. (v2) + - LP: #599017, #807508 + * drm/i915: Maintain LRU order of inactive objects upon access by CPU + (v2) + - LP: #599017, #807508 + * drm/i915/evict: Ensure we completely cleanup on failure + - LP: #599017, #807508 + * drm/i915: Periodically flush the active lists and requests + - LP: #599017, #807508 + * Linux 2.6.32.42+drm33.19 + - LP: #807508 + * net: add limit for socket backlog CVE-2010-4251 + - LP: #807462 + * tcp: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * ipv6: udp: Optimise multicast reception + - LP: #807462 + * ipv4: udp: Optimise multicast reception + - LP: #807462 + * udp: multicast RX should increment SNMP/sk_drops counter in allocation + failures CVE-2010-4251 + - LP: #807462 + * udp: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * llc: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * sctp: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * tipc: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * x25: use limited socket backlog CVE-2010-4251 + - LP: #807462 + * net: backlog functions rename CVE-2010-4251 + - LP: #807462 + * net: sk_add_backlog() take rmem_alloc into account CVE-2010-4805 + - LP: #809318 + * ksm: fix NULL pointer dereference in scan_get_next_rmap_item() + - LP: #810425 + * migrate: don't account swapcache as shmem + - LP: #810425 + * clocksource: Make watchdog robust vs. interruption + - LP: #810425 + * TTY: ldisc, do not close until there are readers + - LP: #810425 + * xhci: Reject double add of active endpoints. + - LP: #810425 + * PM: Free memory bitmaps if opening /dev/snapshot fails + - LP: #810425 + * ath5k: fix memory leak when fewer than N_PD_CURVES are in use + - LP: #810425 + * mm: fix negative commitlimit when gigantic hugepages are allocated + - LP: #810425 + * uvcvideo: Remove buffers from the queues when freeing + - LP: #810425 + * watchdog: mtx1-wdt: request gpio before using it + - LP: #810425 + * debugobjects: Fix boot crash when kmemleak and debugobjects enabled + - LP: #810425 + * cfq-iosched: fix locking around ioc->ioc_data assignment + - LP: #810425 + * cfq-iosched: fix a rcu warning + - LP: #810425 + * i2c-taos-evm: Fix log messages + - LP: #810425 + * md: avoid endless recovery loop when waiting for fail device to + complete. + - LP: #810425 + * SUNRPC: Ensure the RPC client only quits on fatal signals + - LP: #810425 + * 6pack,mkiss: fix lock inconsistency + - LP: #810425 + * USB: don't let errors prevent system sleep + - LP: #810425 + * USB: don't let the hub driver prevent system sleep + - LP: #810425 + * uml: fix CONFIG_STATIC_LINK=y build failure with newer glibc + - LP: #810425 + * um: os-linux/mem.c needs sys/stat.h + - LP: #810425 + * inet_diag: fix inet_diag_bc_audit() + - LP: #810425 + * PM / Hibernate: Avoid hitting OOM during preallocation of memory + - LP: #810425 + * PM / Hibernate: Fix free_unnecessary_pages() + - LP: #810425 + * bug.h: Add WARN_RATELIMIT + - LP: #810425 + * net: filter: Use WARN_RATELIMIT + - LP: #810425 + * af_packet: prevent information leak + - LP: #810425 + * net/ipv4: Check for mistakenly passed in non-IPv4 address + - LP: #810425 + * ipv6/udp: Use the correct variable to determine non-blocking condition + - LP: #810425 + * udp/recvmsg: Clear MSG_TRUNC flag when starting over for a new packet + - LP: #810425 + * mm: prevent concurrent unmap_mapping_range() on the same inode + - LP: #810425 + * xen: set max_pfn_mapped to the last pfn mapped + - LP: #810425 + * xen: partially revert "xen: set max_pfn_mapped to the last pfn mapped" + - LP: #810425 + * Linux 2.6.32.43 + - LP: #810425 + * eCryptfs: Handle failed metadata read in lookup + - LP: #509180 + * pagemap: close races with suid execve, CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + * report errors in /proc/*/*map* sanely, CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + * close race in /proc/*/environ, CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + * auxv: require the target to be tracable (or yourself), CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + * deal with races in /proc/*/{syscall, stack, personality}, CVE-2011-1020 + - LP: #813026 + - CVE-2011-1020 + * rose_loopback_timer sets VC number <= ROSE_DEFAULT_MAXVC, CVE-2011-1493 + - LP: #816550 + - CVE-2011-1493 + * rose: Add length checks to CALL_REQUEST parsing, CVE-2011-1493 + - LP: #816550 + - CVE-2011-1493 + * Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace. + - LP: #819569 + - CVE-2011-2492 + * drm/nv50-nvc0: work around an evo channel hang that some people see + - LP: #583760 + * ASoC: Fix Blackfin I2S _pointer() implementation return in bounds + values + - LP: #823296 + * v4l2-ioctl.c: prefill tuner type for g_frequency and g/s_tuner + - LP: #823296 + * pvrusb2: fix g/s_tuner support + - LP: #823296 + * bttv: fix s_tuner for radio + - LP: #823296 + * gro: Only reset frag0 when skb can be pulled + - LP: #823296 + * NFSv4.1: update nfs4_fattr_bitmap_maxsz + - LP: #823296 + * SUNRPC: Fix a race between work-queue and rpc_killall_tasks + - LP: #823296 + * SUNRPC: Fix use of static variable in rpcb_getport_async + - LP: #823296 + * si4713-i2c: avoid potential buffer overflow on si4713 + - LP: #823296 + * hwmon: (max1111) Fix race condition causing NULL pointer exception + - LP: #823296 + * bridge: send proper message_age in config BPDU + - LP: #823296 + * davinci: DM365 EVM: fix video input mux bits + - LP: #823296 + * libata: fix unexpectedly frozen port after ata_eh_reset() + - LP: #823296 + * x86: Make Dell Latitude E5420 use reboot=pci + - LP: #823296 + * USB: pl2303: add AdLink ND-6530 USB IDs + - LP: #823296 + * USB: pl2303.h: checkpatch cleanups + - LP: #823296 + * USB: serial: add IDs for WinChipHead USB->RS232 adapter + - LP: #823296 + * staging: comedi: fix infoleak to userspace + - LP: #823296 + * USB: OHCI: fix another regression for NVIDIA controllers + - LP: #823296 + * usb: musb: restore INDEX register in resume path + - LP: #823296 + * USB: dummy-hcd needs the has_tt flag + - LP: #823296 + * ARM: pxa/cm-x300: fix V3020 RTC functionality + - LP: #823296 + * jme: Fix unmap error (Causing system freeze) + - LP: #823296 + * libsas: remove expander from dev list on error + - LP: #823296 + * mac80211: Restart STA timers only on associated state + - LP: #823296 + * Blacklist Traxdata CDR4120 and IOMEGA Zip drive to avoid lock ups. + - LP: #823296 + * ses: requesting a fault indication + - LP: #823296 + * pmcraid: reject negative request size + - LP: #823296 + * kexec, x86: Fix incorrect jump back address if not preserving context + - LP: #823296 + * powerpc/kdump: Fix timeout in crash_kexec_wait_realmode + - LP: #823296 + * PCI: ARI is a PCIe v2 feature + - LP: #823296 + * cciss: do not attempt to read from a write-only register + - LP: #823296 + * xtensa: prevent arbitrary read in ptrace + - LP: #823296 + * ext3: Fix oops in ext3_try_to_allocate_with_rsv() + - LP: #823296 + * svcrpc: fix list-corrupting race on nfsd shutdown + - LP: #823296 + * EHCI: only power off port if over-current is active + - LP: #823296 + * EHCI: fix direction handling for interrupt data toggles + - LP: #823296 + * powerpc/pseries/hvconsole: Fix dropped console output + - LP: #823296 + * x86: Hpet: Avoid the comparator readback penalty + - LP: #823296 + * x86: HPET: Chose a paranoid safe value for the ETIME check + - LP: #823296 + * cifs: clean up cifs_find_smb_ses (try #2) + - LP: #823296 + * cifs: fix NULL pointer dereference in cifs_find_smb_ses + - LP: #823296 + * cifs: check for NULL session password + - LP: #823296 + * gre: fix netns vs proto registration ordering + - LP: #823296 + * netns xfrm: fixup xfrm6_tunnel error propagation + - LP: #823296 + * tunnels: fix netns vs proto registration ordering + - LP: #823296 + * alpha: fix several security issues + - LP: #823296 + * proc: restrict access to /proc/PID/io + - LP: #823296 + * ALSA: sound/core/pcm_compat.c: adjust array index + - LP: #823296 + * dm mpath: fix potential NULL pointer in feature arg processing + - LP: #823296 + * dm: fix idr leak on module removal + - LP: #823296 + * perf: overflow/perf_count_sw_cpu_clock crashes recent kernels + - LP: #823296 + * atm: [br2684] allow routed mode operation again + - LP: #823296 + * Linux 2.6.32.44 + - LP: #823296 + + [ Ubuntu: 2.6.32-33.72 ] + + * Revert "fix oops in scsi_run_queue()" + - LP: #811745 + * Revert "put stricter guards on queue dead checks" + - LP: #811745 + + [ Ubuntu: 2.6.32-33.71 ] + + * splice: direct_splice_actor() should not use pos in sd + - LP: #588861 + + -- Stefan Bader Thu, 18 Aug 2011 11:08:03 +0200 + +linux-ec2 (2.6.32-317.36) lucid-proposed; urgency=low + + [Stefan Bader] + + * Release Tracking Bug + - LP: #807505 + + [ Stefan Bader ] + + * Revert "XEN: x86: Flush TLB if PGD entry is changed in i386 PAE mode" + - LP: #805209 + * Rebased to 2.6.32-33.70 + + [ Ubuntu: 2.6.32-33.70 ] + + * Revert "x86: Flush TLB if PGD entry is changed in i386 PAE mode" + - LP: #805209 + + -- Stefan Bader Fri, 08 Jul 2011 09:57:36 +0000 + +linux-ec2 (2.6.32-317.35) lucid-proposed; urgency=low + + [Stefan Bader] + + * Release Tracking Bug + - LP: #806968 + * Rebased to 2.6.32-33.69 + + [ Ubuntu: 2.6.32-33.69 ] + + * Revert "af_unix: Only allow recv on connected seqpacket sockets." + + [ Ubuntu: 2.6.32-33.68 ] + + * Fix abi directory + + [ Ubuntu: 2.6.32-33.67 ] + + * Revert "iwlagn: Support new 5000 microcode." + + -- Stefan Bader Thu, 07 Jul 2011 15:09:59 +0200 + +linux-ec2 (2.6.32-317.34) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Release Tracking Bug + - LP: #794420 + * Rebased to 2.6.32-33.66 + + [ Ubuntu: 2.6.32-33.66 ] + + * Revert "xhci: Fix full speed bInterval encoding." + * Revert "USB: xhci - fix math in xhci_get_endpoint_interval()" + * Revert "USB: xhci - fix unsafe macro definitions" + + -- Stefan Bader Wed, 08 Jun 2011 09:58:47 +0200 + +linux-ec2 (2.6.32-317.33) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Release Tracking Bug + - LP: #793566 + * Rebased to 2.6.32-33.65 + + [ Ubuntu: 2.6.32-33.65 ] + + * xhci: Fix full speed bInterval encoding. + - LP: #792959 + + -- Stefan Bader Mon, 06 Jun 2011 14:06:42 +0000 + +linux-ec2 (2.6.32-317.32) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * SAUCE: XEN: Sync with x86, cpu: AMD errata checking framework + - LP: #770050 + * SAUCE: XEN: Sync with x86, cpu: Clean up AMD erratum 400 workaround + - LP: #770050 + + [ Upstream Kernel Changes ] + + * Rebased to 2.6.32-33.64 + + [ Ubuntu: 2.6.32-33.64 ] + + * Release Tracking Bug + - LP: #789325 + * SAUCE: (no-up) Fix up KVM: VMX: Fix host userspace gsbase corruption + - LP: #787675 + * SAUCE: vesafb: mtrr module parameter is uint, not bool + - LP: #778043 + * Revert "(pre-stable): input: Support Clickpad devices in ClickZone + mode" + - LP: #780588 + * Revert "GFS2: Fix writing to non-page aligned gfs2_quota structures" + - LP: #780588 + * Revert "mmc: build fix: mmc_pm_notify is only available with + CONFIG_PM=y" + - LP: #780588 + * Revert "mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume" + - LP: #780588 + * Revert "econet: fix CVE-2010-3848" + - LP: #780588 + * Revert "dell-laptop: Add another Dell laptop family to the DMI + whitelist" + - LP: #780588 + * Revert "dell-laptop: Add another Dell laptop family to the DMI + whitelist" + - LP: #780588 + * Revert "xen: set max_pfn_mapped to the last pfn mapped" + * cifs: always do is_path_accessible check in cifs_mount + - LP: #770050 + * video: sn9c102: world-wirtable sysfs files + - LP: #770050 + * UBIFS: restrict world-writable debugfs files + - LP: #770050 + * NET: cdc-phonet, handle empty phonet header + - LP: #770050 + * x86: Fix a bogus unwind annotation in lib/semaphore_32.S + - LP: #770050 + * tioca: Fix assignment from incompatible pointer warnings + - LP: #770050 + * mca.c: Fix cast from integer to pointer warning + - LP: #770050 + * ramfs: fix memleak on no-mmu arch + - LP: #770050 + * MAINTAINERS: update STABLE BRANCH info + - LP: #770050 + * UBIFS: fix oops when R/O file-system is fsync'ed + - LP: #770050 + * x86, cpu: AMD errata checking framework + - LP: #770050 + * x86, cpu: Clean up AMD erratum 400 workaround + - LP: #770050 + * x86, AMD: Set ARAT feature on AMD processors + - LP: #770050 + * x86, amd: Disable GartTlbWlkErr when BIOS forgets it + - LP: #770050 + * USB: ftdi_sio: Added IDs for CTI USB Serial Devices + - LP: #770050 + * USB: ftdi_sio: add PID for OCT DK201 docking station + - LP: #770050 + * USB: ftdi_sio: add ids for Hameg HO720 and HO730 + - LP: #770050 + * USB: option: Add new ONDA vendor id and product id for ONDA MT825UP + - LP: #770050 + * USB: option: Added support for Samsung GT-B3730/GT-B3710 LTE USB modem. + - LP: #770050 + * next_pidmap: fix overflow condition + - LP: #770050 + * proc: do proper range check on readdir offset + - LP: #770050 + * USB: EHCI: unlink unused QHs when the controller is stopped + - LP: #770050 + * USB: fix formatting of SuperSpeed endpoints in /proc/bus/usb/devices + - LP: #770050 + * USB: xhci - fix unsafe macro definitions + - LP: #770050 + * USB: xhci - fix math in xhci_get_endpoint_interval() + - LP: #770050 + * x86, cpu: Fix regression in AMD errata checking code + - LP: #770050 + * Linux 2.6.32.39 + - LP: #770050 + * fs/partitions/ldm.c: fix oops caused by corrupted partition table, + CVE-2011-1017 + - LP: #771382 + - CVE-2011-1017 + * drm/i915: set DIDL using the ACPI video output device _ADR method + return. + - LP: #775547 + * drm/radeon/kms: MC vram map needs to be >= pci aperture size + - LP: #775547 + * drm/radeon/kms: make sure blit addr masks are 64 bit + - LP: #775547 + * drm/radeon/kms: fix handling of tex lookup disable in cs checker on + r2xx + - LP: #775547 + * drm/i915: Free hardware status page on unload when physically mapped + - LP: #775547 + * drm/i915/overlay: Ensure that the reg_bo is in the GTT prior to + writing. + - LP: #775547 + * drm/radeon/kms/atom: set sane defaults in atombios_get_encoder_mode() + - LP: #775547 + * drm/radeon/kms: fix typos in disabled vbios code + - LP: #775547 + * drm/radeon/kms: add workaround for dce3 ddc line vbios bug + - LP: #775547 + * drm/radeon/kms: fix interlaced and doublescan handling + - LP: #775547 + * drm/i915/sdvo: Always add a 30ms delay to make SDVO TV detection + reliable + - LP: #775547 + * drm/radeon/kms: don't apply 7xx HDP flush workaround on AGP + - LP: #775547 + * drm/ttm: Fix two race conditions + fix busy codepaths + - LP: #775547 + * drm/i915: overlay on gen2 can't address above 1G + - LP: #775547 + * drm/i915: fix memory corruption with GM965 and >4GB RAM + - LP: #775547 + * drm/radeon: add quirk to make HP nx6125 laptop resume. + - LP: #775547 + * drm/radeon/kms: add quirk to make HP DV5000 laptop resume + - LP: #775547 + * ath: add missing regdomain pair 0x5c mapping + - LP: #780588 + * block, blk-sysfs: Fix an err return path in blk_register_queue() + - LP: #780588 + * p54: Initialize extra_len in p54_tx_80211 + - LP: #780588 + * intel-iommu: Unlink domain from iommu + - LP: #780588 + * intel-iommu: Fix get_domain_for_dev() error path + - LP: #780588 + * NFS: nfs_wcc_update_inode() should set nfsi->attr_gencount + - LP: #780588 + * serial/imx: read cts state only after acking cts change irq + - LP: #780588 + * ASoC: Fix output PGA enabling in wm_hubs CODECs + - LP: #780588 + * kconfig: Avoid buffer underrun in choice input + - LP: #780588 + * UBIFS: fix master node recovery + - LP: #780588 + * Remove extra struct page member from the buffer info structure + - LP: #780588 + * dasd: correct device table + - LP: #780588 + * iwlagn: Support new 5000 microcode. + - LP: #780588 + * atl1c: duplicate atl1c_get_tpd + - LP: #780588 + * udp: Fix bogus UFO packet generation + - LP: #780588 + * slub: fix panic with DISCONTIGMEM + - LP: #780588 + * set memory ranges in N_NORMAL_MEMORY when onlined + - LP: #780588 + * FLEXCOP-PCI: fix __xlate_proc_name-warning for flexcop-pci + - LP: #780588 + * m68k/mm: Set all online nodes in N_NORMAL_MEMORY + - LP: #780588 + * nfs: don't lose MS_SYNCHRONOUS on remount of noac mount + - LP: #780588 + * NFSv4.1: Ensure state manager thread dies on last umount + - LP: #780588 + * agp: fix arbitrary kernel memory writes + - LP: #780588 + * agp: fix OOM and buffer overflow + - LP: #780588 + * Input: xen-kbdfront - fix mouse getting stuck after save/restore + - LP: #780588 + * pmcraid: reject negative request size + - LP: #780588 + * mpt2sas: prevent heap overflows and unchecked reads + - LP: #780588 + * put stricter guards on queue dead checks + - LP: #780588 + * mmc: sdhci-pci: Fix error case in sdhci_pci_probe_slot() + - LP: #780588 + * mmc: sdhci: Check mrq->cmd in sdhci_tasklet_finish + - LP: #780588 + * mmc: sdhci: Check mrq != NULL in sdhci_tasklet_finish + - LP: #780588 + * USB: fix regression in usbip by setting has_tt flag + - LP: #780588 + * af_unix: Only allow recv on connected seqpacket sockets. + - LP: #780588 + * ARM: 6891/1: prevent heap corruption in OABI semtimedop + - LP: #780588 + * i8k: Tell gcc that *regs gets clobbered + - LP: #780588 + * Fix gcc 4.5.1 miscompiling drivers/char/i8k.c (again) + - LP: #780588 + * Open with O_CREAT flag set fails to open existing files on non writable + directories + - LP: #780588 + * can: Add missing socket check in can/bcm release. + - LP: #780588 + * netxen: module firmware hints + - LP: #780588 + * bnx2x: declare MODULE_FIRMWARE + - LP: #780588 + * cxgb3: declare MODULE_FIRMWARE + - LP: #780588 + * myri10ge: declare MODULE_FIRMWARE + - LP: #780588 + * netx: declare MODULE_FIRMWARE + - LP: #780588 + * pcnet-cs: declare MODULE_FIRMWARE + - LP: #780588 + * spider-net: declare MODULE_FIRMWARE + - LP: #780588 + * tms380tr: declare MODULE_FIRMWARE + - LP: #780588 + * Input: Add support of Synaptics Clickpad device + - LP: #780588 + * Input: elantech - do not advertise relative events + - LP: #780588 + * Input: elantech - fix firmware version check + - LP: #780588 + * Input: elantech - allow forcing Elantech protocol + - LP: #780588 + * Input: elantech - ignore high bits in the position coordinates + - LP: #780588 + * Input: elantech - use all 3 bytes when checking version + - LP: #780588 + * Input: elantech - relax signature checks + - LP: #780588 + * Input: elantech - discard the first 2 positions on some firmwares + - LP: #780588 + * Staging: rtl8192su: check for skb == NULL + - LP: #780588 + * Staging: rtl8192su: Clean up in case of an error in module + initialisation + - LP: #780588 + * Staging: rtl8192su: Fix procfs code for interfaces not named wlan0 + - LP: #780588 + * Staging: rtl8192su: remove device ids + - LP: #780588 + * Staging: rtl8192su: add device ids + - LP: #780588 + * USB: retain USB device power/wakeup setting across reconfiguration + - LP: #780588 + * USB: don't enable remote wakeup by default + - LP: #780588 + * USB: teach "devices" file about Wireless and SuperSpeed USB + - LP: #780588 + * GFS2: Clean up gfs2_adjust_quota() and do_glock() + - LP: #780588 + * GFS2: Fix writing to non-page aligned gfs2_quota structures + - LP: #780588 + * GFS2: BUG in gfs2_adjust_quota + - LP: #780588 + * SUNRPC: fix NFS client over TCP hangs due to packet loss (Bug 16494) + - LP: #780588 + * nfs4: Ensure that ACL pages sent over NFS were not allocated from the + slab (v3) + - LP: #780588 + * nfs: fix compilation warning + - LP: #780588 + * Fix corrupted OSF partition table parsing + - LP: #780588 + * Increase OSF partition limit from 8 to 18 + - LP: #780588 + * Please add support for Microsoft MN-120 PCMCIA network card + - LP: #780588 + * hwmon: (applesmc) Add iMac9,1 and MacBookPro2,2 support + - LP: #780588 + * hwmon: (applesmc) Add support for MacBook Pro 5,3 and 5,4 + - LP: #780588 + * hwmon: (applesmc) Add generic support for MacBook Pro 6 + - LP: #780588 + * hwmon: (applesmc) Add generic support for MacBook Pro 7 + - LP: #780588 + * hwmon: (applesmc) Add MacBookAir3,1(3,2) support + - LP: #780588 + * ALSA: emux: Add trivial compat ioctl handler + - LP: #780588 + * ALSA: powermac - Reverse HP detection on G4 DA + - LP: #780588 + * ALSA: powermac - Lineout detection on G4 DA + - LP: #780588 + * ALSA: hda - Add support for the new 27 inch IMacs + - LP: #780588 + * ALSA: hda - MacBookPro 5,3 line-in support + - LP: #780588 + * ALSA: hda - Add model=mbp55 entry for MacBookPro 7,1 + - LP: #780588 + * ALSA: hda - MacBookAir3,1(3,2) alsa support + - LP: #780588 + * virtio_net: fix oom handling on tx + - LP: #780588 + * mac80211: Add define for TX headroom reserved by mac80211 itself. + - LP: #780588 + * rt2x00: Centralize setting of extra TX headroom requested by rt2x00. + - LP: #780588 + * rt2x00: Properly request tx headroom for alignment operations. + - LP: #780588 + * rt2x00: use correct headroom for transmission + - LP: #780588 + * Bluetooth: Add support Bluetooth controller of MacbookPro 6,2 + - LP: #780588 + * Bluetooth: Add support Bluetooth controller of MacbookPro 7,1 + - LP: #780588 + * Bluetooth: Add MacBookAir3,1(2) support + - LP: #780588 + * perf tools: Display better error messages on missing packages + - LP: #780588 + * perf tools: Add 'make DEBUG=1' to remove the -O6 cflag + - LP: #780588 + * perf tools: Test -fstack-protector-all compiler option for inclusion in + CFLAGS + - LP: #780588 + * perf tools: Support static build + - LP: #780588 + * perf tools: Add V=2 option to help debug config issues + - LP: #780588 + * perf tools: Suggest static libraries as well + - LP: #780588 + * perf: Use default compiler mode by default + - LP: #780588 + * perf tools: Move QUIET_STDERR def to before first use + - LP: #780588 + * perf tools: Check if /dev/null can be used as the -o gcc argument + - LP: #780588 + * perf symbols: allow forcing use of cplus_demangle + - LP: #780588 + * V4L/DVB: Add Elgato EyeTV Diversity to dibcom driver + - LP: #780588 + * mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume + - LP: #780588 + * mmc: build fix: mmc_pm_notify is only available with CONFIG_PM=y + - LP: #780588 + * b43: Fix warning at drivers/mmc/core/core.c:237 in mmc_wait_for_cmd + - LP: #780588 + * econet: Fix redeclaration of symbol len + - LP: #780588 + * econet: fix CVE-2010-3848 + - LP: #780588 + * dell-laptop: Add another Dell laptop to the DMI whitelist + - LP: #780588 + * dell-laptop: Add another Dell laptop family to the DMI whitelist + - LP: #780588 + * scsi_dh_emc: fix mode select request setup + - LP: #780588 + * scsi_dh_emc: request flag cleanup + - LP: #780588 + * cifs: fix another memleak, in cifs_root_iget + - LP: #780588 + * e1000e: Reset 82577/82578 PHY before first PHY register read + - LP: #780588 + * e1000: fix Tx hangs by disabling 64-bit DMA + - LP: #780588 + * btrfs: Require CAP_SYS_ADMIN for filesystem rebalance + - LP: #780588 + * af_unix: limit recursion level + - LP: #780588 + * init, sched: Fix race between init and kthreadd + - LP: #780588 + * backlight: MacBookAir3,1(3,2) mbp-nvidia-bl support + - LP: #780588 + * bonding: Ensure that we unshare skbs prior to calling pskb_may_pull + - LP: #780588 + * HID: add MacBookAir 3,1 and 3,2 support + - LP: #780588 + * intel-iommu: Force-disable IOMMU for iGFX on broken Cantiga revisions. + - LP: #780588 + * ipg: Remove device claimed by dl2k from pci id table + - LP: #780588 + * ipv6: Silence privacy extensions initialization + - LP: #780588 + * l2tp: Fix UDP socket reference count bugs in the pppol2tp driver + - LP: #780588 + * MIPS: DMA: Fix computation of DMA flags from device's + coherent_dma_mask. + - LP: #780588 + * mpt2sas: fix the incorrect scsi_dma_map error checking + - LP: #780588 + * Phonet: device notifier only runs on initial namespace + - LP: #780588 + * powerpc/boot/dts: Install dts from the right directory + - LP: #780588 + * rt2500usb: fallback to SW encryption for TKIP+AES + - LP: #780588 + * sata_via: Delay on vt6420 when starting ATAPI DMA write + - LP: #780588 + * tehuti: Firmware filename is tehuti/bdx.bin + - LP: #780588 + * wireless: b43: fix error path in SDIO + - LP: #780588 + * libata: set queue DMA alignment to sector size for ATAPI too + - LP: #780588 + * usb: musb: core: set has_tt flag + - LP: #780588 + * iwlwifi: fix skb usage after free + - LP: #780588 + * can: add missing socket check in can/raw release + - LP: #780588 + * fix oops in scsi_run_queue() + - LP: #780588 + * Linux 2.6.32.40 + - LP: #780588 + * PCI: allow matching of prefetchable resources to non-prefetchable + windows + - LP: #424142 + * cifs: check for bytes_remaining going to zero in CIFS_SessSetup + - LP: #788602 + * Validate size of EFI GUID partition entries. + - LP: #788602 + * dccp: handle invalid feature options length + - LP: #788602 + * CIFS: Fix memory over bound bug in cifs_parse_mount_options + - LP: #788602 + * Fix time() inconsistencies caused by intermediate xtime_cache values + being read + - LP: #788602 + * ehea: fix wrongly reported speed and port + - LP: #788602 + * NET: slip, fix ldisc->open retval + - LP: #788602 + * ne-h8300: Fix regression caused during net_device_ops conversion + - LP: #788602 + * hydra: Fix regression caused during net_device_ops conversion + - LP: #788602 + * libertas: fix cmdpendingq locking + - LP: #788602 + * zorro8390: Fix regression caused during net_device_ops conversion + - LP: #788602 + * cifs: add fallback in is_path_accessible for old servers + - LP: #788602 + * x86, AMD: Fix ARAT feature setting again + - LP: #788602 + * clocksource: Install completely before selecting + - LP: #788602 + * tick: Clear broadcast active bit when switching to oneshot + - LP: #788602 + * x86, apic: Fix spurious error interrupts triggering on all non-boot APs + - LP: #788602 + * x86, mce, AMD: Fix leaving freed data in a list + - LP: #788602 + * megaraid_sas: Sanity check user supplied length before passing it to + dma_alloc_coherent() + - LP: #788602 + * vmxnet3: Fix inconsistent LRO state after initialization + - LP: #788602 + * netxen: Remove references to unified firmware file + - LP: #788602 + * Linux 2.6.32.41 + - LP: #788602 + * drm/radeon/kms: fix bad shift in atom iio table parser + - LP: #788602 + * Linux 2.6.32.41+drm33.18 + - LP: #788602 + + -- Stefan Bader Wed, 01 Jun 2011 16:22:08 +0200 + +linux-ec2 (2.6.32-316.31) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * XEN: x86: Flush TLB if PGD entry is changed in i386 PAE mode + - LP: #742056 + * XEN: x86: Emit "mem=nopentium ignored" warning when not supported + - LP: #742056 + * XEN: x86: Fix panic when handling "mem={invalid}" param + - LP: #742056 + * XEN: x86/mm: Handle mm_fault_error() in kernel space + - LP: #742056 + * SAUCE: XEN: Do not force sched_clock_stable + - LP: #727459 + + -- Stefan Bader Mon, 02 May 2011 15:17:30 +0200 + +linux-ec2 (2.6.32-316.30) lucid-proposed; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #767978 + + [ Brad Figg ] + + * Rebased to 2.6.32-32.62 + + [ Ubuntu: 2.6.32-32.62 ] + + * Release Tracking Bug + - LP: #767370 + * (config) Disable CONFIG_NET_NS + - LP: #720095 + * Revert "drm/radeon/kms: Fix retrying ttm_bo_init() after it failed + once." + - LP: #736234 + * Revert "drm/radeon: fall back to GTT if bo creation/validation in VRAM + fails." + - LP: #736234 + * x86: pvclock: Move scale_delta into common header + * KVM: x86: Fix a possible backwards warp of kvmclock + * KVM: x86: Fix kvmclock bug + * cpuset: add a missing unlock in cpuset_write_resmask() + - LP: #736234 + * keyboard: integer underflow bug + - LP: #736234 + * RxRPC: Fix v1 keys + - LP: #736234 + * ixgbe: fix for 82599 erratum on Header Splitting + - LP: #736234 + * mm: fix possible cause of a page_mapped BUG + - LP: #736234 + * powerpc/kdump: CPUs assume the context of the oopsing CPU + - LP: #736234 + * powerpc/kdump: Use chip->shutdown to disable IRQs + - LP: #736234 + * powerpc: Use more accurate limit for first segment memory allocations + - LP: #736234 + * powerpc/pseries: Add hcall to read 4 ptes at a time in real mode + - LP: #736234 + * powerpc/kexec: Speedup kexec hash PTE tear down + - LP: #736234 + * powerpc/crashdump: Do not fail on NULL pointer dereferencing + - LP: #736234 + * powerpc/kexec: Fix orphaned offline CPUs across kexec + - LP: #736234 + * netfilter: nf_log: avoid oops in (un)bind with invalid nfproto values + - LP: #736234 + * nfsd: wrong index used in inner loop + - LP: #736234 + * r8169: use RxFIFO overflow workaround for 8168c chipset. + - LP: #736234 + * Staging: comedi: jr3_pci: Don't ioremap too much space. Check result. + - LP: #736234 + * net: don't allow CAP_NET_ADMIN to load non-netdev kernel modules, + CVE-2011-1019 + - LP: #736234 + - CVE-2011-1019 + * ip6ip6: autoload ip6 tunnel + - LP: #736234 + * Linux 2.6.32.33 + - LP: #736234 + * drm/radeon: fall back to GTT if bo creation/validation in VRAM fails. + - LP: #652934, #736234 + * drm/radeon/kms: Fix retrying ttm_bo_init() after it failed once. + - LP: #652934, #736234 + * drm: fix unsigned vs signed comparison issue in modeset ctl ioctl, + CVE-2011-1013 + - LP: #736234 + - CVE-2011-1013 + * Linux 2.6.32.33+drm33.15 + - LP: #736234 + * econet: Fix crash in aun_incoming(). CVE-2010-4342 + - LP: #736394 + - CVE-2010-4342 + * igb: only use vlan_gro_receive if vlans are registered, CVE-2010-4263 + - LP: #737024 + - CVE-2010-4263 + * irda: prevent integer underflow in IRLMP_ENUMDEVICES, CVE-2010-4529 + - LP: #737823 + - CVE-2010-4529 + * hwmon/f71882fg: Set platform drvdata to NULL later + - LP: #742056 + * mtd: add "platform:" prefix for platform modalias + - LP: #742056 + * libata: no special completion processing for EH commands + - LP: #742056 + * MIPS: MTX-1: Make au1000_eth probe all PHY addresses + - LP: #742056 + * x86/mm: Handle mm_fault_error() in kernel space + - LP: #742056 + * ftrace: Fix memory leak with function graph and cpu hotplug + - LP: #742056 + * x86: Fix panic when handling "mem={invalid}" param + - LP: #553464, #742056 + * x86: Emit "mem=nopentium ignored" warning when not supported + - LP: #553464, #742056 + * ahci: AHCI and RAID mode SATA patch for Intel Patsburg DeviceIDs + - LP: #742056 + * ahci: AHCI mode SATA patch for Intel DH89xxCC DeviceIDs + - LP: #742056 + * ahci: AHCI mode SATA patch for Intel Patsburg SATA RAID controller + - LP: #742056 + * RDMA/cma: Fix crash in request handlers + - LP: #742056 + * IB/cm: Bump reference count on cm_id before invoking callback + - LP: #742056 + * ath9k_hw: Fix incorrect macversion and macrev checks + - LP: #742056 + * USB: serial/kobil_sct, fix potential tty NULL dereference + - LP: #742056 + * USB: serial: ch341: add new id + - LP: #742056 + * xhci: Fix cycle bit calculation during stall handling. + - LP: #742056 + * ALSA: hda - fix digital mic selection in mixer on 92HD8X codecs + - LP: #742056 + * PCI: remove quirk for pre-production systems + - LP: #742056 + * PCI: add more checking to ICH region quirks + - LP: #742056 + * PCI: do not create quirk I/O regions below PCIBIOS_MIN_IO for ICH + - LP: #742056 + * PCI: sysfs: Fix failure path for addition of "vpd" attribute + - LP: #742056 + * ALSA: ctxfi - Fix incorrect SPDIF status bit mask + - LP: #742056 + * ALSA: ctxfi - Fix SPDIF status retrieval + - LP: #742056 + * ALSA: ctxfi - Clear input settings before initialization + - LP: #742056 + * SUNRPC: Ensure we always run the tk_callback before tk_action + - LP: #742056 + * perf, powerpc: Handle events that raise an exception without + overflowing + - LP: #742056 + * ext3: Always set dx_node's fake_dirent explicitly. + - LP: #742056 + * call_function_many: fix list delete vs add race + - LP: #742056 + * call_function_many: add missing ordering + - LP: #742056 + * x86: Flush TLB if PGD entry is changed in i386 PAE mode + - LP: #742056 + * isdn: avoid calling tty_ldisc_flush() in atomic context + - LP: #742056 + * smp_call_function_many: handle concurrent clearing of mask + - LP: #742056 + * fix per-cpu flag problem in the cpu affinity checkers + - LP: #742056 + * i2c: Fix typo in instantiating-devices document + - LP: #742056 + * mmc: sdio: remember new card RCA when redetecting card + - LP: #742056 + * powerpc/kexec: Fix race in kexec shutdown + - LP: #742056 + * powerpc/kdump: Fix race in kdump shutdown + - LP: #742056 + * powerpc: rtas_flash needs to use rtas_data_buf + - LP: #742056 + * x86, binutils, xen: Fix another wrong size directive + - LP: #742056 + * hwmon: (sht15) Fix integer overflow in humidity calculation + - LP: #742056 + * Linux 2.6.32.34 + - LP: #742056 + * Linux 2.6.32.35 + - LP: #742056 + * aio: wake all waiters when destroying ctx + - LP: #744921 + * shmem: let shared anonymous be nonlinear again + - LP: #744921 + * PCI hotplug: acpiphp: set current_state to D0 in register_slot + - LP: #744921 + * xen: set max_pfn_mapped to the last pfn mapped + - LP: #744921 + * PCI: return correct value when writing to the "reset" attribute + - LP: #744921 + * Prevent rt_sigqueueinfo and rt_tgsigqueueinfo from spoofing the signal + code + - LP: #744921 + * ext3: skip orphan cleanup on rocompat fs + - LP: #744921 + * procfs: fix /proc//maps heap check + - LP: #744921 + * proc: protect mm start_code/end_code in /proc/pid/stat, CVE-2011-0726 + - LP: #744921 + - CVE-2011-0726 + * fbcon: Bugfix soft cursor detection in Tile Blitting + - LP: #744921 + * nfsd41: modify the members value of nfsd4_op_flags + - LP: #744921 + * nfsd: wrong index used in inner loop + - LP: #744921 + * uvcvideo: Fix uvc_fixup_video_ctrl() format search + - LP: #744921 + * ehci-hcd: Bug fix: don't set a QH's Halt bit + - LP: #744921 + * USB: uss720 fixup refcount position + - LP: #744921 + * USB: cdc-acm: fix memory corruption / panic + - LP: #744921 + * USB: cdc-acm: fix potential null-pointer dereference + - LP: #744921 + * USB: cdc-acm: fix potential null-pointer dereference on disconnect + - LP: #744921 + * Input: xen-kbdfront - advertise either absolute or relative coordinates + - LP: #744921 + * SUNRPC: Never reuse the socket port after an xs_close() + - LP: #744921 + * fs: call security_d_instantiate in d_obtain_alias V2 + - LP: #744921 + * dcdbas: force SMI to happen when expected + - LP: #744921 + * Linux 2.6.32.36 + - LP: #744921 + * drm/radeon/kms: check AA resolve registers on r300, CVE-2011-1016 + - LP: #745686 + - CVE-2011-1016 + * drm/radeon: fix regression with AA resolve checking, CVE-2011-1016 + - LP: #745686 + - CVE-2011-1016 + * xen: events: do not unmask event channels on resume + - LP: #681083 + * drm/radeon/kms: check AA resolve registers on r300 + - LP: #754584 + * drm/radeon: fix regression with AA resolve checking + - LP: #754584 + * Linux 2.6.32.36+drm33.16 + - LP: #754584 + * ALSA: hda - Fix SPDIF out regression on ALC889 + - LP: #764685 + * ALSA: Fix yet another race in disconnection + - LP: #764685 + * perf: Better fit max unprivileged mlock pages for tools needs + - LP: #764685 + * myri10ge: fix rmmod crash + - LP: #764685 + * cciss: fix lost command issue + - LP: #764685 + * sound/oss/opl3: validate voice and channel indexes + - LP: #764685 + * mac80211: initialize sta->last_rx in sta_info_alloc + - LP: #764685 + * ses: show devices for enclosures with no page 7 + - LP: #764685 + * ses: Avoid kernel panic when lun 0 is not mapped + - LP: #764685 + * eCryptfs: Unlock page in write_begin error path + - LP: #764685 + * eCryptfs: ecryptfs_keyring_auth_tok_for_sig() bug fix + - LP: #764685 + * staging: usbip: bugfixes related to kthread conversion + - LP: #764685 + * staging: usbip: bugfix add number of packets for isochronous frames + - LP: #764685 + * staging: usbip: bugfix for isochronous packets and optimization + - LP: #764685 + * staging: hv: Fix GARP not sent after Quick Migration + - LP: #764685 + * staging: hv: use sync_bitops when interacting with the hypervisor + - LP: #764685 + * Relax si_code check in rt_sigqueueinfo and rt_tgsigqueueinfo + - LP: #764685 + * xfs: prevent leaking uninitialized stack memory in FSGEOMETRY_V1 + - LP: #764685 + * irda: validate peer name and attribute lengths + - LP: #764685 + * irda: prevent heap corruption on invalid nickname + - LP: #764685 + * nilfs2: fix data loss in mmap page write for hole blocks + - LP: #764685 + * ASoC: Explicitly say registerless widgets have no register + - LP: #764685 + * ALSA: ens1371: fix Creative Ectiva support + - LP: #764685 + * ROSE: prevent heap corruption with bad facilities + - LP: #764685 + * Btrfs: Fix uninitialized root flags for subvolumes + - LP: #764685 + * x86, mtrr, pat: Fix one cpu getting out of sync during resume + - LP: #764685 + * ath9k: fix a chip wakeup related crash in ath9k_start + - LP: #764685 + * UBIFS: do not read flash unnecessarily + - LP: #764685 + * UBIFS: fix oops on error path in read_pnode + - LP: #764685 + * UBIFS: fix debugging failure in dbg_check_space_info + - LP: #764685 + * quota: Don't write quota info in dquot_commit() + - LP: #764685 + * mm: avoid wrapping vm_pgoff in mremap() + - LP: #764685 + * p54usb: IDs for two new devices + - LP: #764685 + * b43: allocate receive buffers big enough for max frame len + offset + - LP: #764685 + * Bluetooth: sco: fix information leak to userspace + - LP: #764685 + * bridge: netfilter: fix information leak + - LP: #764685 + * Bluetooth: bnep: fix buffer overflow + - LP: #764685 + * Bluetooth: add support for Apple MacBook Pro 8,2 + - LP: #764685 + * Treat writes as new when holes span across page boundaries + - LP: #764685 + * char/tpm: Fix unitialized usage of data buffer + - LP: #764685 + * netfilter: ip_tables: fix infoleak to userspace + - LP: #764685 + * netfilter: arp_tables: fix infoleak to userspace + - LP: #764685 + * netfilter: ipt_CLUSTERIP: fix buffer overflow + - LP: #764685 + * ipv6: netfilter: ip6_tables: fix infoleak to userspace + - LP: #764685 + * mfd: ab3100: world-writable debugfs *_priv files + - LP: #764685 + * drivers/rtc/rtc-ds1511.c: world-writable sysfs nvram file + - LP: #764685 + * drivers/misc/ep93xx_pwm.c: world-writable sysfs files + - LP: #764685 + * econet: 4 byte infoleak to the network + - LP: #764685 + * sound/oss: remove offset from load_patch callbacks + - LP: #764685 + * sound: oss: midi_synth: check get_user() return value + - LP: #764685 + * repair gdbstub to match the gdbserial protocol specification + - LP: #764685 + * gro: Reset dev pointer on reuse + - LP: #764685 + * gro: reset skb_iif on reuse + - LP: #764685 + * x86, amd-ucode: Remove needless log messages + - LP: #764685 + * x86, microcode, AMD: Extend ucode size verification + - LP: #764685 + * powerpc/kexec: Add ifdef CONFIG_PPC_STD_MMU_64 to PPC64 code + - LP: #764685 + * powerpc: Fix default_machine_crash_shutdown #ifdef botch + - LP: #764685 + * Squashfs: handle corruption of directory structure + - LP: #764685 + * sctp: fix to calc the INIT/INIT-ACK chunk length correctly is set + - LP: #764685 + * atm/solos-pci: Don't include frame pseudo-header on transmit hex-dump + - LP: #764685 + * ext4: fix credits computing for indirect mapped files + - LP: #764685 + * nfsd: fix auth_domain reference leak on nlm operations + - LP: #764685 + * CAN: Use inode instead of kernel address for /proc file + - LP: #764685 + * exec: make argv/envp memory visible to oom-killer + - LP: #764685 + * exec: copy-and-paste the fixes into compat_do_execve() paths + - LP: #764685 + * xfs: zero proper structure size for geometry calls + - LP: #764685 + * Linux 2.6.32.37 + - LP: #764685 + * Linux 2.6.32.38 + - LP: #764685 + + -- Brad Figg Wed, 20 Apr 2011 18:25:39 -0700 + +linux-ec2 (2.6.32-315.29) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-31.61 + + [ Ubuntu: 2.6.32-31.61 ] + + * Release Tracking Bug + - LP: #754842 + * x86, quirk: Fix SB600 revision check + - LP: #742056 + + -- Stefan Bader Thu, 14 Apr 2011 18:28:11 +0200 + +linux-ec2 (2.6.32-315.28) lucid-proposed; urgency=low + + [ Upstream Kernel Changes ] + + * Rebased to 2.6.32-31.60 + + [ Ubuntu: 2.6.32-31.60 ] + + * Release Tracking Bug + - LP: #734950 + * SAUCE: Clear new_profile in error path + - LP: #732700 + * [Config] CONFIG_BOOT_PRINTK_DELAY=y + - LP: #733191 + * Revert "drm/radeon/bo: add some fallback placements for VRAM only + objects." + - LP: #652934 + * drm/radeon: fall back to GTT if bo creation/validation in VRAM fails. + - LP: #652934 + * drm/radeon/kms: Fix retrying ttm_bo_init() after it failed once. + - LP: #652934 + * xfs: always use iget in bulkstat + - LP: #692848 + * drm/radeon/kms: make the mac rv630 quirk generic + - LP: #728687 + * drm/radeon/kms: add pll debugging output + - LP: #728687 + * drm/radeon: remove 0x4243 pci id + - LP: #728687 + * drm/radeon/kms: fix s/r issues with bios scratch regs + - LP: #728687 + * drm/i915/lvds: Add AOpen i915GMm-HFS to the list of false-positive LVDS + - LP: #728687 + * drm/i915: Add dependency on CONFIG_TMPFS + - LP: #728687 + * Linux 2.6.32.29+drm33.14 + - LP: #728687 + * NFSD: memory corruption due to writing beyond the stat array + - LP: #728687 + * mptfusion: mptctl_release is required in mptctl.c + - LP: #728687 + * mptfusion: Fix Incorrect return value in mptscsih_dev_reset + - LP: #728687 + * ocfs2_connection_find() returns pointer to bad structure + - LP: #728687 + * x25: decrement netdev reference counts on unload + - LP: #728687 + * x86, hpet: Disable per-cpu hpet timer if ARAT is supported + - LP: #728687 + * OHCI: work around for nVidia shutdown problem + - LP: #728687 + * x86/pvclock: Zero last_value on resume + - LP: #728687 + * av7110: check for negative array offset + - LP: #728687 + * CRED: Fix get_task_cred() and task_state() to not resurrect dead + credentials + - LP: #728687 + * bonding/vlan: Avoid mangled NAs on slaves without VLAN tag insertion + - LP: #728687 + * CRED: Fix kernel panic upon security_file_alloc() failure. + - LP: #728687 + * CRED: Fix BUG() upon security_cred_alloc_blank() failure + - LP: #728687 + * CRED: Fix memory and refcount leaks upon security_prepare_creds() + failure + - LP: #728687 + * sendfile(): check f_op.splice_write() rather than f_op.sendpage() + - LP: #728687 + * isdn: hisax: Replace the bogus access to irq stats + - LP: #728687 + * ixgbe: add support for 82599 based Express Module X520-P2 + - LP: #728687 + * ixgbe: prevent speculative processing of descriptors before ready + - LP: #728687 + * scsi_dh_alua: add netapp to dev list + - LP: #728687 + * scsi_dh_alua: Add IBM Power Virtual SCSI ALUA device to dev list + - LP: #728687 + * dm raid1: fail writes if errors are not handled and log fails + - LP: #728687 + * GFS2: Fix bmap allocation corner-case bug + - LP: #728687 + * dm raid1: fix null pointer dereference in suspend + - LP: #728687 + * sunrpc/cache: fix module refcnt leak in a failure path + - LP: #728687 + * be2net: Maintain tx and rx counters in driver + - LP: #728687 + * tcp: Make TCP_MAXSEG minimum more correct. + - LP: #728687 + * nfsd: correctly handle return value from nfsd_map_name_to_* + - LP: #728687 + * s390: remove task_show_regs + - LP: #728687 + * PM / Hibernate: Return error code when alloc_image_page() fails + - LP: #728687 + * fs/partitions: Validate map_count in Mac partition tables + - LP: #728687 + * ALSA: HDA: Add position_fix quirk for an Asus device + - LP: #718402, #728687 + * ALSA: caiaq - Fix possible string-buffer overflow + - LP: #728687 + * radio-aimslab.c needs #include + - LP: #728687 + * ARM: Ensure predictable endian state on signal handler entry + - LP: #728687 + * acer-wmi: Fix capitalisation of GUID + - LP: #728687 + * eCryptfs: Copy up lower inode attrs in getattr + - LP: #728687 + * platform: x86: acer-wmi: world-writable sysfs threeg file + - LP: #728687 + * platform: x86: asus_acpi: world-writable procfs files + - LP: #728687 + * platform: x86: tc1100-wmi: world-writable sysfs wireless and jogdial + files + - LP: #728687 + * genirq: Disable the SHIRQ_DEBUG call in request_threaded_irq for now + - LP: #728687 + * usb: musb: omap2430: fix kernel panic on reboot + - LP: #728687 + * USB: add quirks entry for Keytouch QWERTY Panel + - LP: #728687 + * USB: Add Samsung SGH-I500/Android modem ID switch to visor driver + - LP: #728687 + * USB: Add quirk for Samsung Android phone modem + - LP: #728687 + * p54pci: update receive dma buffers before and after processing + - LP: #728687 + * sierra: add new ID for Airprime/Sierra USB IP modem + - LP: #728687 + * staging: usbip: vhci: update reference count for usb_device + - LP: #728687 + * staging: usbip: vhci: give back URBs from in-flight unlink requests + - LP: #728687 + * staging: usbip: vhci: refuse to enqueue for dead connections + - LP: #728687 + * staging: usbip: vhci: use urb->dev->portnum to find port + - LP: #728687 + * epoll: prevent creating circular epoll structures + - LP: #728687 + * ldm: corrupted partition table can cause kernel oops + - LP: #728687 + * md: correctly handle probe of an 'mdp' device. + - LP: #728687 + * x86 quirk: Fix polarity for IRQ0 pin2 override on SB800 systems + - LP: #728687 + * xhci: Avoid BUG() in interrupt context + - LP: #728687 + * xhci: Clarify some expressions in the TRB math + - LP: #728687 + * xhci: Fix errors in the running total calculations in the TRB math + - LP: #728687 + * xhci: Fix an error in count_sg_trbs_needed() + - LP: #728687 + * x25: Do not reference freed memory. + - LP: #728687 + * Linux 2.6.32.30 + - LP: #728687 + * Linux 2.6.32.31 + - LP: #728687 + * Ocfs2/refcounttree: Fix a bug for refcounttree to writeback clusters in + a right number. + - LP: #731226 + * mfd: Fix NULL pointer due to non-initialized ucb1x00-ts absinfo + - LP: #731226 + * x86: Use u32 instead of long to set reset vector back to 0 + - LP: #731226 + * fuse: fix hang of single threaded fuseblk filesystem + - LP: #731226 + * clockevents: Prevent oneshot mode when broadcast device is periodic + - LP: #731226 + * ext2: Fix link count corruption under heavy link+rename load + - LP: #731226 + * sctp: Fix oops when sending queued ASCONF chunks + - LP: #731226 + * virtio: set pci bus master enable bit + - LP: #731226 + * netxen: fix set mac addr + - LP: #731226 + * HID: add support for Acan FG-8100 barcode reader + - LP: #731226 + * p54usb: add Senao NUB-350 usbid + - LP: #731226 + * dccp: fix oops on Reset after close + - LP: #731226 + * e1000e: disable broken PHY wakeup for ICH10 LOMs, use MAC wakeup + instead + - LP: #731226 + * r8169: disable ASPM + - LP: #731226 + * usb: iowarrior: don't trust report_size for buffer size + - LP: #731226 + * arp_notify: unconditionally send gratuitous ARP for + NETDEV_NOTIFY_PEERS. + - LP: #731226 + * CIFS: Fix oplock break handling (try #2) + - LP: #731226 + * Linux 2.6.32.32 + - LP: #731226 + + -- Stefan Bader Fri, 18 Mar 2011 18:23:16 +0100 + +linux-ec2 (2.6.32-314.27) lucid-proposed; urgency=low + + [ Steve Conklin ] + + * Release Tracking Bug + - LP: #728089 + + [ Stefan Bader ] + + * SAUCE: XEN: Import f9dee15f07cc3e6625734f3cf667054a5ff5ac2b + - LP: #717177 + * SAUCE: XEN: Import 65d64895d4ed4250448ac6906de25777470b5180 + - LP: #717177 + * SAUCE: XEN: Import cf383fb0c59287a81d6e71ebb7fafffd104a3983 + - LP: #717177 + * SAUCE: XEN: Import ffd91af58e011821332cc56019d1709f7d9a8a54 + - LP: #717177 + * SAUCE: XEN: Import 97a21d3ae6477ef00e39f21e47ce767a8ca1a22a + - LP: #717177 + * SAUCE: XEN: Import b5d6492343e5897eba863ed1d08ca51552657d1f + - LP: #717177 + * SAUCE: XEN: Import 9fb860778805809529f4c27b896370f2a945e945 + - LP: #717177 + * SAUCE: XEN: Import 20af80bf13116eb2d0d4bd6a307a4260cd277095 + - LP: #717177 + * SAUCE: XEN: Import 481710c9b5d154e81d388e9460fa2851a4ea7c94 + - LP: #717177 + * SAUCE: XEN: Import 9512754e274895426d5305d09a4c667d8621f420 + - LP: #717177 + * SAUCE: XEN: Update import 2444b629ee518745f54c2f7cf9e4de3d48e834cb + - LP: #717177 + * SAUCE: XEN: Import 28995d0c0ef1958ecffdcc80091c46233daea29a + - LP: #717177 + * SAUCE: XEN: Import fc04955bae3662eecaa8216694fd82b36256cfc6 + - LP: #717177 + * SAUCE: XEN: Import 4bbd3ea6754dc11fdb96a8ab9dfa13e24b1a6599 + - LP: #717177 + * SAUCE: XEN: Import 5a6ca212d5400dfcd8734da1f282b83a01a04d9e + - LP: #717177 + * SAUCE: XEN: Import cde0c191416d1470a2aa30d893f7ea987363386b + - LP: #717177 + * SAUCE: XEN: Import fe304738902627ec07c5195664ddb7a6f7750272 + - LP: #717177 + * SAUCE: XEN: Import 941f392437b3005d2d220a7254d48fbc342b6829 + - LP: #717177 + * SAUCE: XEN: Import 7ad50ac196fde9cf57a55b5908764227d9d7f8e6 + - LP: #717177 + * SAUCE: XEN: Import eeb31bcc98f8497dc83c5e7c8ef5c9a9438cb689 + - LP: #717177 + * SAUCE: XEN: Import d5324680becdc93bd37cbbc9581c727959c57ad9 + - LP: #717177 + * SAUCE: XEN: Import f2bb11b1573330fca6ddba33a5cff3695d1a690c + - LP: #717177 + * SAUCE: XEN: Import 7e3ff59bf997c554ebd14b17b9ba4246448e80c7 + - LP: #717177 + * SAUCE: XEN: Import c19aaf77a85ba61de84de2bf6922e269d78223a0 + - LP: #717177 + * SAUCE: XEN: Import 77b49ffdcd22f66180778085716512d508ab2617 + - LP: #717177 + * SAUCE: XEN: Import 34ebf644aafc699db42a5c2d109b6f057ee6b4f3 + - LP: #717177 + * SAUCE: XEN: Import c4dad435c692830c634ab7001b62b6a90b5ae530 + - LP: #717177 + * SAUCE: XEN: Import 52c82b295371158c61f8b06d7a03daaaeedfea00 + - LP: #717177 + * SAUCE: XEN: Import f3a8bea7094f487ed6139a6b6254d0e4147a866d + - LP: #717177 + * SAUCE: XEN: Import 2e911f0f7f1590fc8c4cb2a331ac1c1799a8385b + - LP: #717177 + * SAUCE: XEN: Import 7aa0c2220a675805f38b43313228544a0cce7488 + - LP: #717177 + * SAUCE: XEN: Import a805c0009da4770f72dab3f3c71cd263f79894aa + - LP: #717177 + * SAUCE: XEN: Import 26ab8408157fbbc669e1aab1f271bb3cb1c433d0 + - LP: #717177 + * SAUCE: XEN: Import ca51d9445c9b51d6b1c800c9c04e5472d55f0845 + - LP: #717177 + * SAUCE: XEN: Import 831d52bc153971b70e64eccfbed2b232394f22f8 + - LP: #723819 + + [ Upstream Kernel Changes ] + + * Rebased to 2.6.32-30.59 + + [ Ubuntu: 2.6.32-30.59 ] + + * Release Tracking Bug + - LP: #727336 + * [Config] CONFIG_IRQ_TIME_ACCOUNTING=n + - LP: #723819 + * virtio_net: Add schedule check to napi_enable call + - LP: #579276 + * NFS: fix the return value of nfs_file_fsync() + - LP: #585657 + * block: check for proper length of iov entries earlier in + blk_rq_map_user_iov(), CVE-2010-4163 + - LP: #721504 + - CVE-2010-4163 + * filter: make sure filters dont read uninitialized memory + - LP: #721282 + - CVE-2010-4158 + * tty: Make tiocgicount a handler, CVE-2010-4076, CVE-2010-4077 + - LP: #720189 + - CVE-2010-4077 + * staging: usbip: remove double giveback of URB + - LP: #723819 + * USB: EHCI: ASPM quirk of ISOC on AMD SB800 + - LP: #723819 + * rt2x00: add device id for windy31 usb device + - LP: #723819 + * ALSA: snd-usb-us122l: Fix missing NULL checks + - LP: #723819 + * hwmon: (via686a) Initialize fan_div values + - LP: #723819 + * USB: serial: handle Data Carrier Detect changes + - LP: #723819 + * USB: CP210x Add two device IDs + - LP: #723819 + * USB: CP210x Removed incorrect device ID + - LP: #723819 + * USB: usb-storage: unusual_devs update for Cypress ATACB + - LP: #723819 + * USB: usb-storage: unusual_devs update for TrekStor DataStation maxi g.u + external hard drive enclosure + - LP: #723819 + * USB: usb-storage: unusual_devs entry for CamSport Evo + - LP: #723819 + * USB: usb-storage: unusual_devs entry for Coby MP3 player + - LP: #723819 + * USB: serial: Updated support for ICOM devices + - LP: #723819 + * USB: adding USB support for Cinterion's HC2x, EU3 and PH8 products + - LP: #723819 + * USB: EHCI: ASPM quirk of ISOC on AMD Hudson + - LP: #723819 + * USB: EHCI: fix DMA deallocation bug + - LP: #723819 + * USB: g_printer: fix bug in module parameter definitions + - LP: #723819 + * USB: io_edgeport: fix the reported firmware major and minor + - LP: #723819 + * USB: ti_usb: fix module removal + - LP: #723819 + * USB: Storage: Add unusual_devs entry for VTech Kidizoom + - LP: #723819 + * USB: ftdi_sio: add ST Micro Connect Lite uart support + - LP: #723819 + * USB: cdc-acm: Adding second ACM channel support for Nokia N8 + - LP: #723819 + * USB: ftdi_sio: Add VID=0x0647, PID=0x0100 for Acton Research + spectrograph + - LP: #723819 + * USB: prevent buggy hubs from crashing the USB stack + - LP: #723819 + * staging: comedi: add support for newer jr3 1-channel pci board + - LP: #723819 + * staging: comedi: ni_labpc: Use shared IRQ for PCMCIA card + - LP: #723819 + * Staging: hv: fix sysfs symlink on hv block device + - LP: #723819 + * staging: hv: Enable sending GARP packet after live migration + - LP: #723819 + * hvc_iucv: allocate memory buffers for IUCV in zone DMA + - LP: #723819 + * iwlagn: enable only rfkill interrupt when device is down + - LP: #723819 + * ath9k: Fix bug in delimiter padding computation + - LP: #723819 + * correct vdso version string + - LP: #723819 + * fix medium error problems with some arrays which can cause data + corruption + - LP: #723819 + * libsas: fix runaway error handler problem + - LP: #723819 + * mpt2sas: Fix device removal handshake for zoned devices + - LP: #723819 + * mpt2sas: Correct resizing calculation for max_queue_depth + - LP: #723819 + * mpt2sas: Kernel Panic during Large Topology discovery + - LP: #723819 + * radio-aimslab.c: Fix gcc 4.5+ bug + - LP: #723819 + * em28xx: Fix audio input for Terratec Grabby + - LP: #723819 + * ALSA : au88x0 - Limit number of channels to fix Oops via OSS emu + - LP: #723819 + * ALSA: HDA: Fix dmesg output of HDMI supported bits + - LP: #723819 + * ALSA: hda - Fix memory leaks in conexant jack arrays + - LP: #723819 + * input: bcm5974: Add support for MacBookAir3 + - LP: #723819 + * ALSA: hrtimer: handle delayed timer interrupts + - LP: #723819 + * ASoC: WM8990: msleep() takes milliseconds not jiffies + - LP: #723819 + * ASoC: Blackfin AC97: fix build error after multi-component update + - LP: #723819 + * NFS: Fix "kernel BUG at fs/aio.c:554!" + - LP: #723819 + * rtc-cmos: fix suspend/resume + - LP: #723819 + * iwlagn: Re-enable RF_KILL interrupt when down + - LP: #723819 + * rapidio: fix hang on RapidIO doorbell queue full condition + - LP: #723819 + * PCI: pci-stub: ignore zero-length id parameters + - LP: #723819 + * virtio: remove virtio-pci root device + - LP: #723819 + * ds2760_battery: Fix calculation of time_to_empty_now + - LP: #723819 + * p54: fix sequence no. accounting off-by-one error + - LP: #723819 + * i2c: Unregister dummy devices last on adapter removal + - LP: #723819 + * serial: unbreak billionton CF card + - LP: #723819 + * ptrace: use safer wake up on ptrace_detach() + - LP: #723819 + * x86, mtrr: Avoid MTRR reprogramming on BP during boot on UP platforms + - LP: #723819 + * fix jiffy calculations in calibrate_delay_direct to handle overflow + - LP: #723819 + * USB: serial: pl2303: Hybrid reader Uniform HCR331 + - LP: #723819 + * drivers: update to pl2303 usb-serial to support Motorola cables + - LP: #723819 + * klist: Fix object alignment on 64-bit. + - LP: #723819 + * powerpc: Fix some 6xx/7xxx CPU setup functions + - LP: #723819 + * parisc : Remove broken line wrapping handling pdc_iodc_print() + - LP: #723819 + * kernel/smp.c: fix smp_call_function_many() SMP race + - LP: #723819 + * hostap_cs: fix sleeping function called from invalid context + - LP: #723819 + * md: fix regression with re-adding devices to arrays with no metadata + - LP: #723819 + * pata_mpc52xx: inherit from ata_bmdma_port_ops + - LP: #723819 + * TPM: Long default timeout fix + - LP: #723819 + * tpm_tis: Use timeouts returned from TPM + - LP: #723819 + * SELinux: define permissions for DCB netlink messages + - LP: #723819 + * SELinux: do not compute transition labels on mountpoint labeled + filesystems + - LP: #723819 + * ieee80211: correct IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK macro + - LP: #723819 + * dm: dont take i_mutex to change device size + - LP: #723819 + * dm mpath: disable blk_abort_queue + - LP: #723819 + * x86, mm: avoid possible bogus tlb entries by clearing prev mm_cpumask + after switching mm + - LP: #723819 + * usb: Realloc xHCI structures after a hub is verified. + - LP: #723819 + * sched: Remove USER_SCHED + - LP: #723819 + * sched: Remove remaining USER_SCHED code + - LP: #723819 + * sched: Move sched_avg_update() to update_cpu_load() + - LP: #723819 + * sched: Increment cache_nice_tries only on periodic lb + - LP: #723819 + * sched: Try not to migrate higher priority RT tasks + - LP: #723819 + * sched: Give CPU bound RT tasks preference + - LP: #723819 + * sched: suppress RCU lockdep splat in task_fork_fair + - LP: #723819 + * sched: fix RCU lockdep splat from task_group() + - LP: #723819 + * sched: Do not consider SCHED_IDLE tasks to be cache hot + - LP: #723819 + * sched: Set group_imb only a task can be pulled from the busiest cpu + - LP: #723819 + * sched: Force balancing on newidle balance if local group has capacity + - LP: #723819 + * sched: Drop group_capacity to 1 only if local group has extra capacity + - LP: #723819 + * sched: Fix softirq time accounting + - LP: #723819 + * sched: Consolidate account_system_vtime extern declaration + - LP: #723819 + * sched: Remove unused PF_ALIGNWARN flag + - LP: #723819 + * sched: Add a PF flag for ksoftirqd identification + - LP: #723819 + * sched: Add IRQ_TIME_ACCOUNTING, finer accounting of irq time + - LP: #723819 + * x86: Add IRQ_TIME_ACCOUNTING + - LP: #723819 + * sched: Do not account irq time to current task + - LP: #723819 + * sched: Remove irq time from available CPU power + - LP: #723819 + * sched: Call tick_check_idle before __irq_enter + - LP: #723819 + * sched: Export account_system_vtime() + - LP: #723819 + * sched, cgroup: Fixup broken cgroup movement + - LP: #723819 + * sched: Use group weight, idle cpu metrics to fix imbalances during idle + - LP: #723819 + * sched: Fix cross-sched-class wakeup preemption + - LP: #723819 + * sched: Fix volanomark performance regression + - LP: #723819 + * sched: Fix idle balancing + - LP: #723819 + * sched: Fix wake_affine() vs RT tasks + - LP: #723819 + * sched: Remove some dead code + - LP: #723819 + * kernel/user.c: add lock release annotation on free_user() + - LP: #723819 + * Linux 2.6.32.29 + - LP: #723819 + * rds: Integer overflow in RDS cmsg handling, CVE-2010-4175 + - LP: #721455 + - CVE-2010-4175 + + -- Stefan Bader Wed, 02 Mar 2011 14:59:29 +0100 + +linux-ec2 (2.6.32-313.26) lucid-proposed; urgency=low + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #716657 + + [ Brad Figg ] + + * Release Tracking Bug + - LP: #712864 + + [ Brad Figg ] + + * Rebased to 2.6.32-29.58 + + [ Ubuntu: 2.6.32-29.58 ] + + * Release Tracking Bug + - LP: #716551 + * net: fix rds_iovec page count overflow, CVE-2010-3865 + - LP: #709153 + - CVE-2010-3865 + * net: ax25: fix information leak to userland, CVE-2010-3875 + - LP: #710714 + - CVE-2010-3875 + * net: ax25: fix information leak to userland harder, CVE-2010-3875 + - LP: #710714 + - CVE-2010-3875 + * net: packet: fix information leak to userland, CVE-2010-3876 + - LP: #710714 + - CVE-2010-3876 + * net: tipc: fix information leak to userland, CVE-2010-3877 + - LP: #711291 + - CVE-2010-3877 + * inet_diag: Make sure we actually run the same bytecode we audited, + CVE-2010-3880 + - LP: #711865 + - CVE-2010-3880 + + -- Brad Figg Thu, 10 Feb 2011 11:03:57 -0800 + +linux-ec2 (2.6.32-313.25) lucid-proposed; urgency=low + + [ Brad Figg ] + + * Tracking Bug + - LP: #708890 + + [ Andrew Dickinson ] + + * SAUCE: sched: Prevent divide by zero when cpu_power is 0 + - LP: #614853 + + [ Brad Figg ] + + * Rebased to 2.6.32-29.57 + + [ Stefan Bader ] + + * SAUCE: sched: Try tp catch cpu_power being set to 0 + - LP: #614853 + + [ Upstream Kernel Changes ] + + * SRU: xen: events: do not unmask event channels on resume + - LP: #681083 + + [ Ubuntu: 2.6.32-29.57 ] + + * Tracking Bug + - LP: #708864 + * [Config] Set CONFIG_NR_CPUS=256 for amd64 server + - LP: #706058 + * Input: i8042 - introduce 'notimeout' blacklist for Dell Vostro V13 + - LP: #380126 + * tun: avoid BUG, dump packet on GSO errors + - LP: #698883 + * TTY: Fix error return from tty_ldisc_open() + - LP: #705045 + * x86, hotplug: Use mwait to offline a processor, fix the legacy case + - LP: #705045 + * fuse: verify ioctl retries + - LP: #705045 + * fuse: fix ioctl when server is 32bit + - LP: #705045 + * ALSA: hda: Use model=lg quirk for LG P1 Express to enable playback and + capture + - LP: #595482, #705045 + * nohz: Fix printk_needs_cpu() return value on offline cpus + - LP: #705045 + * nohz: Fix get_next_timer_interrupt() vs cpu hotplug + - LP: #705045 + * nfsd: Fix possible BUG_ON firing in set_change_info + - LP: #705045 + * NFS: Fix fcntl F_GETLK not reporting some conflicts + - LP: #705045 + * sunrpc: prevent use-after-free on clearing XPT_BUSY + - LP: #705045 + * hwmon: (adm1026) Allow 1 as a valid divider value + - LP: #705045 + * hwmon: (adm1026) Fix setting fan_div + - LP: #705045 + * amd64_edac: Fix interleaving check + - LP: #705045 + * IB/uverbs: Handle large number of entries in poll CQ + - LP: #705045 + * PM / Hibernate: Fix PM_POST_* notification with user-space suspend + - LP: #705045 + * ACPICA: Fix Scope() op in module level code + - LP: #705045 + * ACPI: EC: Add another dmi match entry for MSI hardware + - LP: #705045 + * orinoco: fix TKIP countermeasure behaviour + - LP: #705045 + * orinoco: clear countermeasure setting on commit + - LP: #705045 + * x86, amd: Fix panic on AMD CPU family 0x15 + - LP: #705045 + * md: fix bug with re-adding of partially recovered device. + - LP: #705045 + * tracing: Fix panic when lseek() called on "trace" opened for writing + - LP: #705045 + * x86, gcc-4.6: Use gcc -m options when building vdso + - LP: #705045 + * x86: Enable the intr-remap fault handling after local APIC setup + - LP: #705045 + * x86, vt-d: Handle previous faults after enabling fault handling + - LP: #705045 + * x86, vt-d: Fix the vt-d fault handling irq migration in the x2apic mode + - LP: #705045 + * x86, vt-d: Quirk for masking vtd spec errors to platform error handling + logic + - LP: #705045 + * hvc_console: Fix race between hvc_close and hvc_remove + - LP: #705045 + * hvc_console: Fix race between hvc_close and hvc_remove, again + - LP: #705045 + * HID: hidraw: fix window in hidraw_release + - LP: #705045 + * bfa: fix system crash when reading sysfs fc_host statistics + - LP: #705045 + * net: release dst entry while cache-hot for GSO case too + - LP: #705045 + * install_special_mapping skips security_file_mmap check. + - LP: #705045 + * USB: misc: uss720.c: add another vendor/product ID + - LP: #705045 + * USB: ftdi_sio: Add D.O.Tec PID + - LP: #705045 + * USB: usb-storage: unusual_devs entry for the Samsung YP-CP3 + - LP: #705045 + * p54usb: add 5 more USBIDs + - LP: #705045 + * p54usb: New USB ID for Gemtek WUBI-100GW + - LP: #705045 + * sound: Prevent buffer overflow in OSS load_mixer_volumes + - LP: #705045 + * mv_xor: fix race in tasklet function + - LP: #705045 + * ima: fix add LSM rule bug + - LP: #705045 + * ALSA: hda: Use LPIB for Dell Latitude 131L + - LP: #530346, #705045 + * ALSA: hda: Use LPIB quirk for Dell Inspiron m101z/1120 + - LP: #705045 + * block: Deprecate QUEUE_FLAG_CLUSTER and use queue_limits instead + - LP: #705045 + * sctp: Fix a race between ICMP protocol unreachable and connect() + - LP: #705045 + * posix-cpu-timers: workaround to suppress the problems with mt exec + - LP: #705045 + * Linux 2.6.32.28 + - LP: #705045 + * dell-laptop: Add another Dell laptop family to the DMI whitelist + - LP: #693078 + * dell-laptop: Add another Dell laptop family to the DMI whitelist + - LP: #693078 + * drm/ttm: Clear the ghost cpu_writers flag on + ttm_buffer_object_transfer. + - LP: #708769 + * drm/kms: remove spaces from connector names (v2) + - LP: #708769 + * Linux 2.6.32.28+drm33.13 + - LP: #708769 + + [ Ubuntu: 2.6.32-28.56 ] + + * Tracking Bug + - LP: #705565 + * Just a build number increment for a new upload. There was an issue + in the previous upload that prevented ARMEL from building. The + issue has been resolved in the PPA and a new upload should produce + the requisite images. + + [ Ubuntu: 2.6.32-28.55 ] + + * Another version bump because of abi check failure + * Tracking Bug + - LP: #699885 + + [ Ubuntu: 2.6.32-28.54 ] + + * Another version bump because of upload failure + + [ Ubuntu: 2.6.32-28.53 ] + + * Another version bump because of upload failure + + -- Brad Figg Wed, 19 Jan 2011 12:23:49 -0800 + +linux-ec2 (2.6.32-312.24) lucid-proposed; urgency=low + + [ Brad Figg ] + + * Tracking bug + - LP: #698345 + + [ Brad Figg ] + + * Rebased to 2.6.32-28.52 + + [ Ubuntu: 2.6.32-28.52 ] + + + [ Ubuntu: 2.6.32-28.51 ] + + * bumped version due to build fail + + [ Ubuntu: 2.6.32-28.50 ] + + * SAUCE: Change nodelayacct boot parameter polarity. + - LP: #493156 + * [Config] CONFIG_TASK_DELAY_ACCT=y + - LP: #493156 + * ipc: initialize structure memory to zero for compat functions + * tcp: Increase TCP_MAXSEG socket option minimum. + - CVE-2010-4165 + * perf_events: Fix perf_counter_mmap() hook in mprotect() + - CVE-2010-4169 + * af_unix: limit unix_tot_inflight + - CVE-2010-4249 + * AppArmor: fix the upper bound check for the next/check table + - LP: #581525 + * NFS: Fix panic after nfs_umount() + - LP: #683938 + * block: Ensure physical block size is unsigned int + - LP: #688669 + * block: limit vec count in bio_kmalloc() and bio_alloc_map_data() + - LP: #688669 + * block: take care not to overflow when calculating total iov length + - LP: #688669 + * block: check for proper length of iov entries in blk_rq_map_user_iov() + - LP: #688669 + * jme: Fix PHY power-off error + - LP: #688669 + * irda: Fix parameter extraction stack overflow + - LP: #688669 + * irda: Fix heap memory corruption in iriap.c + - LP: #688669 + * i2c-pca-platform: Change device name of request_irq + - LP: #688669 + * microblaze: Fix build with make 3.82 + - LP: #688669 + * Staging: asus_oled: fix up some sysfs attribute permissions + - LP: #688669 + * Staging: asus_oled: fix up my fixup for some sysfs attribute + permissions + - LP: #688669 + * Staging: line6: fix up some sysfs attribute permissions + - LP: #688669 + * hpet: fix unwanted interrupt due to stale irq status bit + - LP: #688669 + * hpet: unmap unused I/O space + - LP: #688669 + * olpc_battery: Fix endian neutral breakage for s16 values + - LP: #688669 + * percpu: fix list_head init bug in __percpu_counter_init() + - LP: #688669 + * um: remove PAGE_SIZE alignment in linker script causing kernel + segfault. + - LP: #688669 + * um: fix global timer issue when using CONFIG_NO_HZ + - LP: #688669 + * numa: fix slab_node(MPOL_BIND) + - LP: #688669 + * hwmon: (lm85) Fix ADT7468 frequency table + - LP: #688669 + * mm: fix return value of scan_lru_pages in memory unplug + - LP: #688669 + * mm: fix is_mem_section_removable() page_order BUG_ON check + - LP: #688669 + * ssb: b43-pci-bridge: Add new vendor for BCM4318 + - LP: #688669 + * sgi-xpc: XPC fails to discover partitions with all nasids above 128 + - LP: #688669 + * xen: ensure that all event channels start off bound to VCPU 0 + - LP: #688669 + * xen: don't bother to stop other cpus on shutdown/reboot + - LP: #688669 + * sys_semctl: fix kernel stack leakage + - LP: #688669 + * net: NETIF_F_HW_CSUM does not imply FCoE CRC offload + - LP: #688669 + * drivers/char/vt_ioctl.c: fix VT_OPENQRY error value + - LP: #688669 + * viafb: use proper register for colour when doing fill ops + - LP: #688669 + * eCryptfs: Clear LOOKUP_OPEN flag when creating lower file + - LP: #688669 + * md/raid1: really fix recovery looping when single good device fails. + - LP: #688669 + * md: fix return value of rdev_size_change() + - LP: #688669 + * x86: AMD Northbridge: Verify NB's node is online + - LP: #688669 + * tty: prevent DOS in the flush_to_ldisc + - LP: #688669 + * TTY: restore tty_ldisc_wait_idle + - LP: #688669 + * tty_ldisc: Fix BUG() on hangup + - LP: #688669 + * TTY: ldisc, fix open flag handling + - LP: #688669 + * KVM: VMX: fix vmx null pointer dereference on debug register access + - LP: #688669 + - CVE-2010-0435 + * KVM: x86: fix information leak to userland + - LP: #688669 + * firewire: cdev: fix information leak + - LP: #688669 + * firewire: core: fix an information leak + - LP: #688669 + * firewire: ohci: fix buffer overflow in AR split packet handling + - LP: #688669 + * firewire: ohci: fix race in AR split packet handling + - LP: #688669 + * ALSA: ac97: Apply quirk for Dell Latitude D610 binding Master and + Headphone controls + - LP: #669279, #688669 + * ALSA: HDA: Add an extra DAC for Realtek ALC887-VD + - LP: #688669 + * ALSA: hda: Use "alienware" model quirk for another SSID + - LP: #683695, #688669 + * netfilter: nf_conntrack: allow nf_ct_alloc_hashtable() to get highmem + pages + - LP: #688669 + * latencytop: fix per task accumulator + - LP: #688669 + * mm/vfs: revalidate page->mapping in do_generic_file_read() + - LP: #688669 + * bio: take care not overflow page count when mapping/copying user data + - LP: #688669 + * libata-scsi passthru: fix bug which truncated LBA48 return values + - LP: #688669 + * libata: fix NULL sdev dereference race in atapi_qc_complete() + - LP: #688669 + * PCI: fix size checks for mmap() on /proc/bus/pci files + - LP: #688669 + * PCI: fix offset check for sysfs mmapped files + - LP: #688669 + * efifb: check that the base address is plausible on pci systems + - LP: #688669 + * USB: gadget: AT91: fix typo in atmel_usba_udc driver + - LP: #688669 + * USB: ftdi_sio: add device IDs for Milkymist One JTAG/serial + - LP: #688669 + * USB: option: fix when the driver is loaded incorrectly for some Huawei + devices. + - LP: #688669 + * usb: misc: sisusbvga: fix information leak to userland + - LP: #688669 + * usb: misc: iowarrior: fix information leak to userland + - LP: #688669 + * usb: core: fix information leak to userland + - LP: #688669 + * USB: EHCI: fix obscure race in ehci_endpoint_disable + - LP: #688669 + * USB: storage: sierra_ms: fix sysfs file attribute + - LP: #688669 + * USB: atm: ueagle-atm: fix up some permissions on the sysfs files + - LP: #688669 + * USB: misc: cypress_cy7c63: fix up some sysfs attribute permissions + - LP: #688669 + * USB: misc: usbled: fix up some sysfs attribute permissions + - LP: #688669 + * USB: ftdi_sio: revert "USB: ftdi_sio: fix DTR/RTS line modes" + - LP: #688669 + * USB: misc: trancevibrator: fix up a sysfs attribute permission + - LP: #688669 + * USB: misc: usbsevseg: fix up some sysfs attribute permissions + - LP: #688669 + * USB: ftdi_sio: Add ID for RT Systems USB-29B radio cable + - LP: #688669 + * USB: serial: ftdi_sio: Vardaan USB RS422/485 converter PID added + - LP: #688669 + * acpi-cpufreq: fix a memleak when unloading driver + - LP: #688669 + * ACPI: EC: add Vista incompatibility DMI entry for Toshiba Satellite + L355 + - LP: #688669 + * fuse: fix attributes after open(O_TRUNC) + - LP: #688669 + * do_exit(): make sure that we run with get_fs() == USER_DS + - LP: #688669 + * uml: disable winch irq before freeing handler data + - LP: #688669 + * backlight: grab ops_lock before testing bd->ops + - LP: #688669 + * nommu: yield CPU while disposing VM + - LP: #688669 + * DECnet: don't leak uninitialized stack byte + - LP: #688669 + * ARM: 6489/1: thumb2: fix incorrect optimisation in usracc + - LP: #688669 + * ARM: 6482/2: Fix find_next_zero_bit and related assembly + - LP: #688669 + * Staging: frontier: fix up some sysfs attribute permissions + - LP: #688669 + * staging: rtl8187se: Change panic to warn when RF switch turned off + - LP: #688669 + * HID: hidraw, fix a NULL pointer dereference in hidraw_ioctl + - LP: #688669 + * HID: hidraw, fix a NULL pointer dereference in hidraw_write + - LP: #688669 + * gianfar: Fix crashes on RX path (Was Re: [Bugme-new] [Bug 19692] New: + linux-2.6.36-rc5 crash with gianfar ethernet at full line rate traffic) + - LP: #688669 + * Limit sysctl_tcp_mem and sysctl_udp_mem initializers to prevent integer + overflows. + - LP: #688669 + * sparc64: Fix race in signal instruction flushing. + - LP: #688669 + * sparc: Don't mask signal when we can't setup signal frame. + - LP: #688669 + * sparc: Prevent no-handler signal syscall restart recursion. + - LP: #688669 + * x86, UV: Delete unneeded boot messages + - LP: #688669 + * x86, UV: Fix initialization of max_pnode + - LP: #688669 + * drivers/video/efifb.c: support framebuffer for NVIDIA 9400M in MacBook + Pro 5,1 + - LP: #688669 + * efifb: support the EFI framebuffer on more Apple hardware + - LP: #688669 + * V4L/DVB (13154): uvcvideo: Handle garbage at the end of streaming + interface descriptors + - LP: #688669 + * Input: i8042 - add Sony VAIO VPCZ122GX to nomux list + - LP: #688669 + * x25: Patch to fix bug 15678 - x25 accesses fields beyond end of packet. + - LP: #688669 + * memory corruption in X.25 facilities parsing + - LP: #688669 + * can-bcm: fix minor heap overflow + - LP: #688669 + * V4L/DVB: ivtvfb: prevent reading uninitialized stack memory + - LP: #688669 + * x25: Prevent crashing when parsing bad X.25 facilities + - LP: #688669 + * crypto: padlock - Fix AES-CBC handling on odd-block-sized input + - LP: #688669 + * x86-32: Separate 1:1 pagetables from swapper_pg_dir + - LP: #688669 + * x86, mm: Fix CONFIG_VMSPLIT_1G and 2G_OPT trampoline + - LP: #688669 + * x86-32: Fix dummy trampoline-related inline stubs + - LP: #688669 + * rds: Integer overflow in RDS cmsg handling + - LP: #688669 + * net: Truncate recvfrom and sendto length to INT_MAX. + - LP: #688669 + * net: Limit socket I/O iovec total length to INT_MAX. + - LP: #688669 + * nmi: fix clock comparator revalidation + - LP: #688669 + * UV - XPC: pass nasid instead of nid to gru_create_message_queue + - LP: #688669 + * x86: uv: XPC receive message reuse triggers invalid BUG_ON() + - LP: #688669 + * X86: uv: xpc_make_first_contact hang due to not accepting ACTIVE state + - LP: #688669 + * x86: uv: xpc NULL deref when mesq becomes empty + - LP: #688669 + * Linux 2.6.32.27 + - LP: #688669 + + -- Brad Figg Thu, 06 Jan 2011 14:07:09 -0800 + +linux-ec2 (2.6.32-311.23) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-27.49 + + [ Upstream Kernel Changes ] + + * xen, compat: Test %rax for the syscall number, not %eax + - CVE-2010-3301 + * xen, compat: Retruncate rax after ia32 syscall entry tracing + - CVE-2010-3301 + * xen: Match cpu_get_cap() with upstream changes + - LP: #668380 + + [ Ubuntu: 2.6.32-27.49 ] + + * Revert "SAUCE: AF_ECONET prevent kernel stack overflow" + * Revert "SAUCE: AF_ECONET SIOCSIFADDR ioctl does not check privileges" + * Revert "SAUCE: AF_ECONET saddr->cookie prevent NULL pointer + dereference" + * [Config] Added be2net, be2scsi to udebs + - LP: #628776 + * [Config] Use correct be2iscsi module name in d-i/modules/scsi-modules + - LP: #628776 + * Revert "(pre-stable) ACPI: enable repeated PCIEXP wakeup by clearing + PCIEXP_WAKE_STS on resume" + * Revert "mm: (pre-stable) Move vma_stack_continue into mm.h" + * x86, cpu: After uncapping CPUID, re-run CPU feature detection + - LP: #668380 + * ALSA: sound/pci/rme9652: prevent reading uninitialized stack memory + - LP: #668380 + * ALSA: oxygen: fix analog capture on Claro halo cards + - LP: #668380 + * ALSA: hda - Add Dell Latitude E6400 model quirk + - LP: #643891, #668380 + * ALSA: rawmidi: fix oops (use after free) when unloading a driver module + - LP: #668380 + * USB: fix bug in initialization of interface minor numbers + - LP: #668380 + * usb: musb: gadget: fix kernel panic if using out ep with FIFO_TXRX + style + - LP: #668380 + * usb: musb: gadget: restart request on clearing endpoint halt + - LP: #668380 + * oprofile: Add Support for Intel CPU Family 6 / Model 29 + - LP: #668380 + * RDMA/cxgb3: Turn off RX coalescing for iWARP connections + - LP: #668380 + * mmc: sdhci-s3c: fix NULL ptr access in sdhci_s3c_remove + - LP: #668380 + * x86/amd-iommu: Set iommu configuration flags in enable-loop + - LP: #668380 + * x86/amd-iommu: Fix rounding-bug in __unmap_single + - LP: #668380 + * x86/amd-iommu: Work around S3 BIOS bug + - LP: #668380 + * tracing/x86: Don't use mcount in pvclock.c + - LP: #668380 + * tracing/x86: Don't use mcount in kvmclock.c + - LP: #668380 + * v4l1: fix 32-bit compat microcode loading translation + - LP: #668380 + * V4L/DVB: cx231xx: Avoid an OOPS when card is unknown (card=0) + - LP: #668380 + * V4L/DVB (13966): DVB-T regression fix for saa7134 cards + - LP: #668380 + * Input: joydev - fix JSIOCSAXMAP ioctl + - LP: #668380 + * x86, hpet: Fix bogus error check in hpet_assign_irq() + - LP: #668380 + * x86, irq: Plug memory leak in sparse irq + - LP: #668380 + * ubd: fix incorrect sector handling during request restart + - LP: #668380 + * ring-buffer: Fix typo of time extends per page + - LP: #668380 + * dmaengine: fix interrupt clearing for mv_xor + - LP: #668380 + * hrtimer: Preserve timer state in remove_hrtimer() + - LP: #668380 + * i2c-pca: Fix waitforcompletion() return value + - LP: #668380 + * wext: fix potential private ioctl memory content leak + - LP: #668380 + * atl1: fix resume + - LP: #668380 + * x86, AMD, MCE thresholding: Fix the MCi_MISCj iteration order + - LP: #668380 + * De-pessimize rds_page_copy_user + - LP: #668380 + * xfrm4: strip ECN and IP Precedence bits in policy lookup + - LP: #668380 + * tcp: Fix >4GB writes on 64-bit. + - LP: #668380 + * net: Fix the condition passed to sk_wait_event() + - LP: #668380 + * Phonet: Correct header retrieval after pskb_may_pull + - LP: #668380 + * net: Fix IPv6 PMTU disc. w/ asymmetric routes + - LP: #668380 + * ip: fix truesize mismatch in ip fragmentation + - LP: #668380 + * net: clear heap allocations for privileged ethtool actions + - LP: #668380 + * tcp: Fix race in tcp_poll + - LP: #668380 + * netxen: dont set skb->truesize + - LP: #668380 + * net: blackhole route should always be recalculated + - LP: #668380 + * skge: add quirk to limit DMA + - LP: #668380 + * r8169: allocate with GFP_KERNEL flag when able to sleep + - LP: #668380 + * bsg: fix incorrect device_status value + - LP: #668380 + * r6040: fix r6040_multicast_list + - LP: #668380 + * r6040: Fix multicast list iteration when hash filter is used + - LP: #668380 + * powerpc: Initialise paca->kstack before early_setup_secondary + - LP: #668380 + * powerpc: Don't use kernel stack with translation off + - LP: #668380 + * b44: fix carrier detection on bind + - LP: #668380 + * ACPI: enable repeated PCIEXP wakeup by clearing PCIEXP_WAKE_STS on + resume + - LP: #613381, #668380 + * intel_idle: PCI quirk to prevent Lenovo Ideapad s10-3 boot hang + - LP: #668380 + * ACPI: EC: add Vista incompatibility DMI entry for Toshiba Satellite + L355 + - LP: #668380 + * ACPI: delete ZEPTO idle=nomwait DMI quirk + - LP: #668380 + * ACPI: Disable Windows Vista compatibility for Toshiba P305D + - LP: #668380 + * x86: detect scattered cpuid features earlier + - LP: #668380 + * fix 2.6.32.23 suspend regression caused by commit 6f6198a + - LP: #668380 + * setup_arg_pages: diagnose excessive argument size + - LP: #668380 + * execve: improve interactivity with large arguments + - LP: #668380 + * execve: make responsive to SIGKILL with large arguments + - LP: #668380 + * Phonet: disable network namespace support + - LP: #668380 + * mm: Move vma_stack_continue into mm.h + - LP: #668380 + * Linux 2.6.32.25 + - LP: #668380 + * xfs: validate untrusted inode numbers during lookup + - CVE-2010-2943 + * xfs: rename XFS_IGET_BULKSTAT to XFS_IGET_UNTRUSTED + - CVE-2010-2943 + * xfs: remove block number from inode lookup code + - CVE-2010-2943 + * xfs: fix untrusted inode number lookup + - CVE-2010-2943 + * drm/i915: Sanity check pread/pwrite + - CVE-2010-2962 + * drm/i915: Rephrase pwrite bounds checking to avoid any potential + overflow + - CVE-2010-2962 + * net: clear heap allocation for ETHTOOL_GRXCLSRLALL + - CVE-2010-3861 + * ipc: shm: fix information leak to userland + - CVE-2010-4072 + * staging: usbip: Notify usb core of port status changes + - LP: #681132 + * staging: usbip: Process event flags without delay + - LP: #681132 + * powerpc/perf: Fix sampling enable for PPC970 + - LP: #681132 + * pcmcia: synclink_cs: fix information leak to userland + - LP: #681132 + * sched: Fix string comparison in /proc/sched_features + - LP: #681132 + * bluetooth: Fix missing NULL check + - LP: #681132 + * futex: Fix errors in nested key ref-counting + - LP: #681132 + * mm, x86: Saving vmcore with non-lazy freeing of vmas + - LP: #681132 + * x86, cpu: Fix renamed, not-yet-shipping AMD CPUID feature bit + - LP: #681132 + * x86, kexec: Make sure to stop all CPUs before exiting the kernel + - LP: #681132 + * x86, olpc: Don't retry EC commands forever + - LP: #681132 + * x86, mtrr: Assume SYS_CFG[Tom2ForceMemTypeWB] exists on all future AMD + CPUs + - LP: #681132 + * x86, intr-remap: Set redirection hint in the IRTE + - LP: #681132 + * x86, kdump: Change copy_oldmem_page() to use cached addressing + - LP: #681132 + * KVM: SVM: Fix wrong intercept masks on 32 bit + - LP: #681132 + * KVM: MMU: fix direct sps access corrupted + - LP: #681132 + * KVM: MMU: fix conflict access permissions in direct sp + - LP: #681132 + * KVM: VMX: Fix host GDT.LIMIT corruption + - LP: #681132 + * KVM: SVM: Adjust tsc_offset only if tsc_unstable + - LP: #681132 + * KVM: x86: Fix SVM VMCB reset + - LP: #681132 + * KVM: x86: Move TSC reset out of vmcb_init + - LP: #681132 + * KVM: Fix fs/gs reload oops with invalid ldt + - LP: #681132 + * KVM: Correct ordering of ldt reload wrt fs/gs reload + * KVM: VMX: Fix host userspace gsbase corruption + * pipe: fix failure to return error code on ->confirm() + - LP: #681132 + * p54usb: fix off-by-one on !CONFIG_PM + - LP: #681132 + * p54usb: add five more USBIDs + - LP: #681132 + * drivers/net/wireless/p54/eeprom.c: Return -ENOMEM on memory allocation + failure + - LP: #681132 + * USB: ftdi_sio: Add PID for accesio products + - LP: #681132 + * USB: add PID for FTDI based OpenDCC hardware + - LP: #681132 + * USB: ftdi_sio: new VID/PIDs for various Papouch devices + - LP: #681132 + * USB: ftdi_sio: add device ids for ScienceScope + - LP: #681132 + * usb: musb: blackfin: call gpio_free() on error path in + musb_platform_init() + - LP: #681132 + * USB: option: Add more ZTE modem USB id's + - LP: #681132 + * USB: cp210x: Add Renesas RX-Stick device ID + - LP: #681132 + * USB: cp210x: Add WAGO 750-923 Service Cable device ID + - LP: #681132 + * USB: atmel_usba_udc: force vbus_pin at -EINVAL when gpio_request + failled + - LP: #681132 + * USB: disable endpoints after unbinding interfaces, not before + - LP: #681132 + * USB: opticon: Fix long-standing bugs in opticon driver + - LP: #681132 + * USB: accept some invalid ep0-maxpacket values + - LP: #681132 + * sd name space exhaustion causes system hang + - LP: #681132 + * libsas: fix NCQ mixing with non-NCQ + - LP: #681132 + * gdth: integer overflow in ioctl + - LP: #681132 + * Fix race when removing SCSI devices + - LP: #681132 + * Fix regressions in scsi_internal_device_block + - LP: #681132 + * sgi-xp: incoming XPC channel messages can come in after the channel's + partition structures have been torn down + - LP: #681132 + * Linux 2.6.32.26 + - LP: #681132 + * drm/radeon: fix PCI ID 5657 to be an RV410 + - LP: #683257 + * Linux 2.6.32.26+drm33.12 + - LP: #683257 + * econet: disallow NULL remote addr for sendmsg(), fixes CVE-2010-3849 + - CVE-2010-3849 + * econet: fix CVE-2010-3850 + - CVE-2010-3850 + * econet: fix CVE-2010-3848 + - CVE-2010-3848 + + -- Stefan Bader Wed, 01 Dec 2010 08:13:05 +0100 + +linux-ec2 (2.6.32-310.21) lucid-security; urgency=low + + [ Upstream Kernel Changes ] + + * Rebased to 2.6.32-26.48 + + [ Ubuntu: 2.6.32-26.48 ] + + * SAUCE: AF_ECONET prevent kernel stack overflow + - CVE-2010-3848 + * SAUCE: AF_ECONET SIOCSIFADDR ioctl does not check privileges + - CVE-2010-3850 + * SAUCE: AF_ECONET saddr->cookie prevent NULL pointer dereference + - CVE-2010-3849 + + -- Stefan Bader Wed, 24 Nov 2010 10:34:37 +0100 + +linux-ec2 (2.6.32-310.20) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-26.47 + + [ Ubuntu: 2.6.32-26.47 ] + + * Revert "SAUCE: ALSA: HDA: Enable internal mic on Dell E6410 and Dell + E6510" + * Revert "[Config] Added be2net, be2scsi to udebs" + * Revert "(ore-stable) ALSA: hda - Apply ALC269 VAIO fix-up to all Sony + laptops with ALC269" + * Revert "(pre-stable) ALSA: HDA: Correctly apply position_fix quirks for + ATI and VIA controllers" + * Revert "ALSA: hda: Use LPIB for another mainboard" + * Revert "ALSA: hda: Use LPIB for ASUS M2V" + * Revert "ALSA: hda: Use LPIB for an ASUS device" + * Buglink Fixup for reverted unverified fixes + + -- Stefan Bader Fri, 19 Nov 2010 17:03:52 +0100 + +linux-ec2 (2.6.32-310.19) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-26.46 + + [ Ubuntu: 2.6.32-26.46 ] + + * SAUCE: ALSA: HDA: Enable internal mic on Dell E6410 and Dell E6510 + - See: #605047, #628961 + * [Config] Added be2net, be2scsi to udebs + - See: #628776 + * Revert "(pre-stable) drm/i915: add PANEL_UNLOCK_REGS definition" + - LP: #645444 + * Revert "(pre-stable) drm/i915: make sure we shut off the panel in eDP + configs" + - LP: #645444 + * Revert "(pre-stable) drm/i915: make sure eDP panel is turned on" + - LP: #645444 + * Revert "(pre-stable) drm/radeon/kms: initialize set_surface_reg reg for + rs600 asic" + - LP: #645371 + * Revert "drm/nouveau: Fix fbcon corruption with font width not divisible + by 8" + - LP: #663176 + * mmc: fix all hangs related to mmc/sd card insert/removal during + suspend/resume + - LP: #477106 + * mmc: build fix: mmc_pm_notify is only available with CONFIG_PM=y + - LP: #477106 + * hwmon: (k8temp) Differentiate between AM2 and ASB1 + - LP: #644694 + * xen: handle events as edge-triggered + - LP: #644694 + * xen: use percpu interrupts for IPIs and VIRQs + - LP: #644694 + * ALSA: hda - Rename iMic to Int Mic on Lenovo NB0763 + - LP: #605101, #644694 + * sata_mv: fix broken DSM/TRIM support (v2) + - LP: #644694 + * x86, tsc, sched: Recompute cyc2ns_offset's during resume from sleep + states + - LP: #644694 + * PCI: MSI: Remove unsafe and unnecessary hardware access + - LP: #644694 + * PCI: MSI: Restore read_msi_msg_desc(); add get_cached_msi_msg_desc() + - LP: #644694 + * sched: kill migration thread in CPU_POST_DEAD instead of CPU_DEAD + - LP: #644694 + * sched: revert stable c6fc81a sched: Fix a race between ttwu() and + migrate_task() + - LP: #644694 + * staging: hv: Fix missing functions for net_device_ops + - LP: #644694 + * staging: hv: Fixed bounce kmap problem by using correct index + - LP: #644694 + * staging: hv: Fixed the value of the 64bit-hole inside ring buffer + - LP: #644694 + * staging: hv: Increased storvsc ringbuffer and max_io_requests + - LP: #644694 + * staging: hv: Fixed lockup problem with bounce_buffer scatter list + - LP: #644694 + * fuse: flush background queue on connection close + - LP: #644694 + * ath9k_hw: fix parsing of HT40 5 GHz CTLs + - LP: #644694 + * ocfs2: Fix incorrect checksum validation error + - LP: #644694 + * USB: ehci-ppc-of: problems in unwind + - LP: #644694 + * USB: Fix kernel oops with g_ether and Windows + - LP: #644694 + * USB: CP210x Add new device ID + - LP: #644694 + * USB: cp210x: Add B&G H3000 link cable ID + - LP: #644694 + * USB: ftdi_sio: Added custom PIDs for ChamSys products + - LP: #644694 + * USB: serial: Extra device/vendor ID for mos7840 driver + - LP: #644694 + * usb: serial: mos7840: Add USB ID to support the B&B Electronics + USOPTL4-2P. + - LP: #644694 + * USB: mos7840: fix DMA buffers on stack and endianess bugs + - LP: #644694 + * usb: serial: mos7840: Add USB IDs to support more B&B USB/RS485 + converters. + - LP: #644694 + * USB: Exposing second ACM channel as tty for Nokia S60 phones. + - LP: #644694 + * USB: cdc-acm: add another device quirk + - LP: #644694 + * USB: Expose vendor-specific ACM channel on Nokia 5230 + - LP: #644694 + * USB: cdc-acm: Adding second ACM channel support for various Nokia and + one Samsung phones + - LP: #644694 + * USB: cdc-acm: Add pseudo modem without AT command capabilities + - LP: #644694 + * USB: cdc-acm: Fixing crash when ACM probing interfaces with no endpoint + descriptors. + - LP: #644694 + * ALSA: hda - Fix auto-parser of ALC269vb for HP pin NID 0x21 + - LP: #644694 + * ALSA: seq/oss - Fix double-free at error path of snd_seq_oss_open() + - LP: #644694 + * sysfs: checking for NULL instead of ERR_PTR + - LP: #644694 + * tun: Don't add sysfs attributes to devices without sysfs directories + - LP: #644694 + * oprofile: fix crash when accessing freed task structs + - LP: #644694 + * oprofile, x86: fix init_sysfs error handling + - LP: #644694 + * oprofile, x86: fix init_sysfs() function stub + - LP: #644694 + * HID: usbhid: initialize interface pointers early enough + - LP: #644694 + * HID: fix suspend crash by moving initializations earlier + - LP: #644694 + * libata: skip EH autopsy and recovery during suspend + - LP: #644694 + * tracing: Fix a race in function profile + - LP: #644694 + * tracing: Do not allow llseek to set_ftrace_filter + - LP: #644694 + * tracing: t_start: reset FTRACE_ITER_HASH in case of seek/pread + - LP: #644694 + * irda: off by one + - LP: #644694 + * gcov: fix null-pointer dereference for certain module types + - LP: #644694 + * tmio_mmc: don't clear unhandled pending interrupts + - LP: #644694 + * mmc: fix the use of kunmap_atomic() in tmio_mmc.h + - LP: #644694 + * bounce: call flush_dcache_page() after bounce_copy_vec() + - LP: #644694 + * kernel/groups.c: fix integer overflow in groups_search + - LP: #644694 + * binfmt_misc: fix binfmt_misc priority + - LP: #644694 + * Input: i8042 - fix device removal on unload + - LP: #644694 + * memory hotplug: fix next block calculation in is_removable + - LP: #644694 + * perf: Initialize callchains roots's childen hits + - LP: #644694 + * p54: fix tx feedback status flag check + - LP: #644694 + * ath5k: check return value of ieee80211_get_tx_rate + - LP: #644694 + * wireless extensions: fix kernel heap content leak + - LP: #644694 + * x86, tsc: Fix a preemption leak in restore_sched_clock_state() + - LP: #644694 + * sched: Protect task->cpus_allowed access in sched_getaffinity() + - LP: #644694 + * sched: Protect sched_rr_get_param() access to task->sched_class + - LP: #644694 + * sched: Consolidate select_task_rq() callers + - LP: #644694 + * sched: Remove unused cpu_nr_migrations() + - LP: #644694 + * sched: Remove rq->clock coupling from set_task_cpu() + - LP: #644694 + * sched: Clean up ttwu() rq locking + - LP: #644694 + * sched: Sanitize fork() handling + - LP: #644694 + * sched: Remove forced2_migrations stats + - LP: #644694 + * sched: Make wakeup side and atomic variants of completion API irq safe + - LP: #644694 + * sched: Use rcu in sys_sched_getscheduler/sys_sched_getparam() + - LP: #644694 + * sched: Use rcu in sched_get/set_affinity() + - LP: #644694 + * sched: Use rcu in sched_get_rr_param() + - LP: #644694 + * sched: Fix set_cpu_active() in cpu_down() + - LP: #644694 + * sched: Use TASK_WAKING for fork wakups + - LP: #644694 + * sched: Ensure set_task_cpu() is never called on blocked tasks + - LP: #644694 + * sched: Make warning less noisy + - LP: #644694 + * sched: Fix broken assertion + - LP: #644694 + * sched: Fix sched_exec() balancing + - LP: #644694 + * sched: Fix select_task_rq() vs hotplug issues + - LP: #644694 + * sched: Add pre and post wakeup hooks + - LP: #644694 + * sched: Remove the cfs_rq dependency from set_task_cpu() + - LP: #644694 + * sched: Fix hotplug hang + - LP: #644694 + * sched: Fix fork vs hotplug vs cpuset namespaces + - LP: #644694 + * sched: Fix incorrect sanity check + - LP: #644694 + * sched: Fix race between ttwu() and task_rq_lock() + - LP: #644694 + * sched: Extend enqueue_task to allow head queueing + - LP: #644694 + * sched: Implement head queueing for sched_rt + - LP: #644694 + * sched: Queue a deboosted task to the head of the RT prio queue + - LP: #644694 + * sched: set_cpus_allowed_ptr(): Don't use rq->migration_thread after + unlock + - LP: #644694 + * sched: Kill the broken and deadlockable + cpuset_lock/cpuset_cpus_allowed_locked code + - LP: #644694 + * sched: move_task_off_dead_cpu(): Take rq->lock around + select_fallback_rq() + - LP: #644694 + * sched: move_task_off_dead_cpu(): Remove retry logic + - LP: #644694 + * sched: sched_exec(): Remove the select_fallback_rq() logic + - LP: #644694 + * sched: _cpu_down(): Don't play with current->cpus_allowed + - LP: #644694 + * sched: Make select_fallback_rq() cpuset friendly + - LP: #644694 + * sched: Fix TASK_WAKING vs fork deadlock + - LP: #644694 + * sched: Optimize task_rq_lock() + - LP: #644694 + * sched: Fix nr_uninterruptible count + - LP: #644694 + * sched: Fix rq->clock synchronization when migrating tasks + - LP: #644694 + * sched: Remove unnecessary RCU exclusion + - LP: #644694 + * sched: apply RCU protection to wake_affine() + - LP: #644694 + * sched: Cleanup select_task_rq_fair() + - LP: #644694 + * sched: More generic WAKE_AFFINE vs select_idle_sibling() + - LP: #644694 + * sched: Fix vmark regression on big machines + - LP: #644694 + * sched: Fix select_idle_sibling() + - LP: #644694 + * sched: Pre-compute cpumask_weight(sched_domain_span(sd)) + - LP: #644694 + * sched: Fix select_idle_sibling() logic in select_task_rq_fair() + - LP: #644694 + * sched: cpuacct: Use bigger percpu counter batch values for stats + counters + - LP: #644694 + * ALSA: hda - Handle missing NID 0x1b on ALC259 codec + - LP: #644694 + * ALSA: hda - Handle pin NID 0x1a on ALC259/269 + - LP: #644694 + * arm: fix really nasty sigreturn bug + - LP: #644694 + * hwmon: (f75375s) Shift control mode to the correct bit position + - LP: #644694 + * hwmon: (f75375s) Do not overwrite values read from registers + - LP: #644694 + * apm_power: Add missing break statement + - LP: #644694 + * NFS: Fix a typo in nfs_sockaddr_match_ipaddr6 + - LP: #644694 + * SUNRPC: Fix race corrupting rpc upcall + - LP: #644694 + * Linux 2.6.32.22 + - LP: #644694 + * drm/i915: don't access FW_BLC_SELF on 965G + - LP: #645444 + * drm/i915: gen3 page flipping fixes + - LP: #645444 + * drm/i915: don't queue flips during a flip pending event + - LP: #645444 + * drm/i915: Hold the spinlock whilst resetting unpin_work along error + path + - LP: #645444 + * drm/i915: handle shared framebuffers when flipping + - LP: #645444 + * drm/i915: add PANEL_UNLOCK_REGS definition + - LP: #645444 + * drm/i915: make sure eDP panel is turned on + - LP: #645444 + * drm/i915: make sure we shut off the panel in eDP configs + - LP: #645444 + * Linux 2.6.32.22+drm33.9 + - LP: #645444 + * drm/radeon/kms/igp: sideport is AMD only + - LP: #645371 + * drm/radeon/kms: flush HDP cache on GART table updates. + - LP: #645371 + * drm/radeon/kms/r7xx: add workaround for hw issue with HDP flush + - LP: #645371 + * drm/i915: Check overlay stride errata for i830 and i845 + - LP: #645371 + * i915: fix ironlake edp panel setup (v4) + - LP: #645371 + * drm/radeon/kms: add additional quirk for Acer rv620 laptop + - LP: #645371 + * drm/i915: fixup pageflip ringbuffer commands for i8xx + - LP: #645371 + * drm/i915: i8xx also doesn't like multiple oustanding pageflips + - LP: #645371 + * drm/i915/edp: Flush the write before waiting for PLLs + - LP: #645371 + * drm/radeon/kms: disable MSI on IGP chips + - LP: #645371 + * drm/radeon/kms: don't enable MSIs on AGP boards + - LP: #645371 + * drm/radeon/kms: fix typo in radeon_compute_pll_gain + - LP: #645371 + * drm/radeon/kms/DCE3+: switch pads to ddc mode when going i2c + - LP: #645371 + * drm/radeon/kms: fix sideport detection on newer rs880 boards + - LP: #645371 + * drm/i915: Don't touch PORT_HOTPLUG_EN in intel_dp_detect() + - LP: #645371 + * drm/i915: Kill dangerous pending-flip debugging + - LP: #645371 + * drm/radeon/kms: release AGP bridge at suspend + - LP: #645371 + * drm/radeon/kms: initialize set_surface_reg reg for rs600 asic + - LP: #645371 + * drm/radeon/kms: fix a regression on r7xx AGP due to the HDP flush fix + - LP: #645371 + * Linux 2.6.32.22+drm33.10 + - LP: #645371 + * USB: serial/mos*: prevent reading uninitialized stack memory + - LP: #649483 + * sparc: Provide io{read,write}{16,32}be(). + - LP: #649483 + * gro: fix different skb headrooms + - LP: #649483 + * gro: Re-fix different skb headrooms + - LP: #649483 + * irda: Correctly clean up self->ias_obj on irda_bind() failure. + - LP: #649483 + * tcp: select(writefds) don't hang up when a peer close connection + - LP: #649483 + * tcp: Combat per-cpu skew in orphan tests. + - LP: #649483 + * tcp: fix three tcp sysctls tuning + - LP: #649483 + * bridge: Clear IPCB before possible entry into IP stack + - LP: #649483 + * bridge: Clear INET control block of SKBs passed into ip_fragment(). + - LP: #649483 + * net: Fix oops from tcp_collapse() when using splice() + - LP: #649483 + * rds: fix a leak of kernel memory + - LP: #649483 + * tcp: Prevent overzealous packetization by SWS logic. + - LP: #649483 + * UNIX: Do not loop forever at unix_autobind(). + - LP: #649483 + * r8169: fix random mdio_write failures + - LP: #649483 + * r8169: fix mdio_read and update mdio_write according to hw specs + - LP: #649483 + * sparc64: Get rid of indirect p1275 PROM call buffer. + - LP: #649483 + * drivers/net/usb/hso.c: prevent reading uninitialized memory + - LP: #649483 + * drivers/net/cxgb3/cxgb3_main.c: prevent reading uninitialized stack + memory + - LP: #649483 + * drivers/net/eql.c: prevent reading uninitialized stack memory + - LP: #649483 + * bonding: correctly process non-linear skbs + - LP: #649483 + * Staging: vt6655: fix buffer overflow + - LP: #649483 + * net/llc: make opt unsigned in llc_ui_setsockopt() + - LP: #649483 + * pid: make setpgid() system call use RCU read-side critical section + - LP: #649483 + * sched: Fix user time incorrectly accounted as system time on 32-bit + - LP: #649483 + * oprofile: Add Support for Intel CPU Family 6 / Model 22 (Intel Celeron + 540) + - LP: #649483 + * char: Mark /dev/zero and /dev/kmem as not capable of writeback + - LP: #649483 + * drivers/pci/intel-iommu.c: fix build with older gcc's + - LP: #649483 + * drivers/video/sis/sis_main.c: prevent reading uninitialized stack + memory + - LP: #649483 + * percpu: fix pcpu_last_unit_cpu + - LP: #649483 + * aio: check for multiplication overflow in do_io_submit + - LP: #649483 + * inotify: send IN_UNMOUNT events + - LP: #649483 + * SCSI: mptsas: fix hangs caused by ATA pass-through + - LP: #649483 + * ext4: Fix remaining racy updates of EXT4_I(inode)->i_flags + - LP: #649483 + * IA64: fix siglock + - LP: #649483 + * IA64: Optimize ticket spinlocks in fsys_rt_sigprocmask + - LP: #649483 + * KEYS: Fix RCU no-lock warning in keyctl_session_to_parent() + - LP: #649483 + * KEYS: Fix bug in keyctl_session_to_parent() if parent has no session + keyring + - LP: #649483 + * xfs: prevent reading uninitialized stack memory + - LP: #649483 + * drivers/video/via/ioctl.c: prevent reading uninitialized stack memory + - LP: #649483 + * ACPI: disable _OSI(Windows 2009) on Asus K50IJ + - LP: #649483 + * bnx2: Fix netpoll crash. + - LP: #649483 + * bnx2: Fix hang during rmmod bnx2. + - LP: #649483 + * AT91: change dma resource index + - LP: #649483 + * cxgb3: fix hot plug removal crash + - LP: #649483 + * mm: page allocator: drain per-cpu lists after direct reclaim allocation + fails + - LP: #649483 + * mm: page allocator: calculate a better estimate of NR_FREE_PAGES when + memory is low and kswapd is awake + - LP: #649483 + * mm: page allocator: update free page counters after pages are placed on + the free list + - LP: #649483 + * guard page for stacks that grow upwards + - LP: #649483 + * Fix unprotected access to task credentials in waitid() + - LP: #649483 + * sctp: Do not reset the packet during sctp_packet_config(). + - LP: #649483 + * 3c503: Fix IRQ probing + - LP: #649483 + * asix: fix setting mac address for AX88772 + - LP: #649483 + * dasd: use correct label location for diag fba disks + - LP: #649483 + * clocksource: sh_tmu: compute mult and shift before registration + - LP: #649483 + * gro: Fix bogus gso_size on the first fraglist entry + - LP: #649483 + * hostap_pci: set dev->base_addr during probe + - LP: #649483 + * inotify: fix inotify oneshot support + - LP: #649483 + * Input: add compat support for sysfs and /proc capabilities output + - LP: #649483 + * MIPS: Quit using undefined behavior of ADDU in 64-bit atomic + operations. + - LP: #649483 + * MIPS: Set io_map_base for several PCI bridges lacking it + - LP: #649483 + * MIPS: uasm: Add OR instruction. + - LP: #649483 + * pata_pdc202xx_old: fix UDMA mode for Promise UDMA33 cards + - LP: #649483 + * pata_pdc202xx_old: fix UDMA mode for PDC2026x chipsets + - LP: #649483 + * MIPS: Sibyte: Fix M3 TLB exception handler workaround. + - LP: #649483 + * sis-agp: Remove SIS 760, handled by amd64-agp + - LP: #649483 + * alpha: Fix printk format errors + - LP: #649483 + * x86: Add memory modify constraints to xchg() and cmpxchg() + - LP: #649483 + * Linux 2.6.32.23 + - LP: #649483 + * (pre-stable) [SCSI] megaraid_sas: Add new megaraid SAS 2 controller + support to the driver + - LP: #546091 + * (pre-stable) [SCSI] megaraid_sas: allocate the application cmds to sas2 + controller + - LP: #546091 + * Xen: fix typo in previous patch + - LP: #655456 + * Linux 2.6.32.24 + - LP: #655456 + * (ore-stable) ALSA: hda - Apply ALC269 VAIO fix-up to all Sony laptops + with ALC269 + - See: #546769, #598938, #637291, #642892, #648871, #655386 + * (pre-stable) ALSA: HDA: Correctly apply position_fix quirks for ATI and + VIA controllers + - See: #465942, #580749, #587546 + * (pre-stable) ACPI: enable repeated PCIEXP wakeup by clearing + PCIEXP_WAKE_STS on resume + - LP: #613381 + * i915: return -EFAULT if copy_to_user fails + - LP: #663176 + * i915_gem: return -EFAULT if copy_to_user fails + - LP: #663176 + * drm/i915: Prevent double dpms on + - LP: #663176 + * drm: Only decouple the old_fb from the crtc is we call mode_set* + - LP: #663176 + * drm/radeon/kms: fix potential segfault in r600_ioctl_wait_idle + - LP: #663176 + * drm/i915: Unset cursor if out-of-bounds upon mode change (v4) + - LP: #586325, #663176 + * drm/i915: disable FBC when more than one pipe is active + - LP: #663176 + * drm/radeon/kms: fix macbookpro connector quirk + - LP: #663176 + * drm/nouveau: use ALIGN instead of open coding it + - LP: #663176 + * drm/nouveau: Fix fbcon corruption with font width not divisible by 8 + - LP: #663176 + * drm/i915,agp/intel: Add second set of PCI-IDs for B43 + - LP: #640214, #663176 + * Linux 2.6.32.24+drm33.11 + - LP: #663176 + + -- Stefan Bader Tue, 26 Oct 2010 15:16:00 -0400 + +linux-ec2 (2.6.32-309.18) lucid-security; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-25.45 + + [ Ubuntu: 2.6.32-25.45 ] + + * v4l: disable dangerous buggy compat function + - CVE-2010-2963 + * Local privilege escalation vulnerability in RDS sockets + - CVE-2010-3904 + * mm: (pre-stable) Move vma_stack_continue into mm.h + - LP: #646114 + * net sched: fix some kernel memory leaks + - CVE-2010-2942 + * irda: Correctly clean up self->ias_obj on irda_bind() failure. + - CVE-2010-2954 + * wireless extensions: fix kernel heap content leak + - CVE-2010-2955 + * KEYS: Fix RCU no-lock warning in keyctl_session_to_parent() + - CVE-2010-2960 + * KEYS: Fix bug in keyctl_session_to_parent() if parent has no session + keyring + - CVE-2010-2960 + * aio: check for multiplication overflow in do_io_submit + - CVE-2010-3067 + * xfs: prevent reading uninitialized stack memory + - CVE-2010-3078 + * ALSA: seq/oss - Fix double-free at error path of snd_seq_oss_open() + - CVE-2010-3080 + * niu: Fix kernel buffer overflow for ETHTOOL_GRXCLSRLALL + - CVE-2010-3084 + * rose: Fix signedness issues wrt. digi count. + - CVE-2010-3310 + * sctp: Do not reset the packet during sctp_packet_config(). + - CVE-2010-3432 + * Fix pktcdvd ioctl dev_minor range check + - CVE-2010-3437 + * ALSA: prevent heap corruption in snd_ctl_new() + - CVE-2010-3442 + * net sched: fix kernel leak in act_police + - CVE-2010-3477 + * Fix out-of-bounds reading in sctp_asoc_get_hmac() + - CVE-2010-3705 + * ocfs2: Don't walk off the end of fast symlinks. + - CVE-2010-NNN2 + + -- Stefan Bader Mon, 18 Oct 2010 10:01:36 +0200 + +linux-ec2 (2.6.32-309.17) lucid-proposed; urgency=low + + [ Brad Figg ] + + * Rebased to 2.6.32-25.44 + + [ John Johansen ] + + * SAUCE: Revert "sched: update load count only once per cpu in 10 tick + update window" + - LP: #574910 + + [ Ubuntu: 2.6.32-25.44 ] + + * SAUCE: (no-up) Modularize vesafb -- fix initialization + - LP: #611471 + * Revert "SAUCE: sync before umount to reduce time taken by ext4 umount" + - LP: #543617, #585092 + * Revert "SAUCE: tulip: Let dmfe handle davicom on non-sparc" + - LP: #607824 + * [Config] Added ums-cypress to udeb + - LP: #576066 + * Revert "PCI quirk: Disable MSI on VIA K8T890 systems" + - LP: #607824 + * Revert "PCI quirks: disable msi on AMD rs4xx internal gfx bridges" + - LP: #607824 + * Revert "(pre-stable) Input: psmouse - reset all types of mice before + reconnecting" + - LP: #607824 + * Revert "jbd: jbd-debug and jbd2-debug should be writable" + - LP: #607824 + * Revert "ext4: Make fsync sync new parent directories in no-journal + mode" + - LP: #615548 + * Revert "ext4: Fix compat EXT4_IOC_ADD_GROUP" + - LP: #615548 + * Revert "ext4: Conditionally define compat ioctl numbers" + - LP: #615548 + * Revert "ext4: restart ext4_ext_remove_space() after transaction + restart" + - LP: #615548 + * Revert "ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted" + - LP: #615548 + * Revert "ext4: Avoid crashing on NULL ptr dereference on a filesystem + error" + - LP: #615548 + * Revert "ext4: Use bitops to read/modify i_flags in struct + ext4_inode_info" + - LP: #615548 + * Revert "ext4: Show journal_checksum option" + - LP: #615548 + * Revert "ext4: check for a good block group before loading buddy pages" + - LP: #615548 + * Revert "ext4: Prevent creation of files larger than RLIMIT_FSIZE using + fallocate" + - LP: #615548 + * Revert "ext4: Remove extraneous newlines in ext4_msg() calls" + - LP: #615548 + * Revert "ext4: init statistics after journal recovery" + - LP: #615548 + * Revert "ext4: clean up inode bitmaps manipulation in ext4_free_inode" + - LP: #615548 + * Revert "ext4: Do not zero out uninitialized extents beyond i_size" + - LP: #615548 + * Revert "ext4: don't scan/accumulate more pages than mballoc will + allocate" + - LP: #615548 + * Revert "ext4: stop issuing discards if not supported by device" + - LP: #615548 + * Revert "ext4: check s_log_groups_per_flex in online resize code" + - LP: #615548 + * Revert "ext4: fix quota accounting in case of fallocate" + - LP: #615548 + * Revert "ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode" + - LP: #615548 + * Revert "ext4: rename ext4_mb_release_desc() to ext4_mb_unload_buddy()" + - LP: #615548 + * Revert "ext4: Remove unnecessary call to ext4_get_group_desc() in + mballoc" + - LP: #615548 + * Revert "ext4: fix memory leaks in error path handling of + ext4_ext_zeroout()" + - LP: #615548 + * Revert "ext4: check missed return value in ext4_sync_file()" + - LP: #615548 + * Revert "ext4: Issue the discard operation *before* releasing the blocks + to be reused" + - LP: #615548 + * Revert "ext4: Fix buffer head leaks after calls to + ext4_get_inode_loc()" + - LP: #615548 + * Revert "ext4: Fix possible lost inode write in no journal mode" + - LP: #615548 + * Revert "ext4: Fixed inode allocator to correctly track a flex_bg's + used_dirs" + - LP: #615548 + * Revert "ext4: Fix estimate of # of blocks needed to write + indirect-mapped files" + - LP: #615548 + * Revert "ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl" + - LP: #615548 + * Revert "ext4: Fix the NULL reference in double_down_write_data_sem()" + - LP: #615548 + * Revert "ext4: Fix insertion point of extent in + mext_insert_across_blocks()" + - LP: #615548 + * Revert "ext4: make "offset" consistent in ext4_check_dir_entry()" + - LP: #615548 + * Revert "ext4: Handle non empty on-disk orphan link" + - LP: #615548 + * Revert "ext4: explicitly remove inode from orphan list after failed + direct io" + - LP: #615548 + * Revert "ext4: fix error handling in migrate" + - LP: #615548 + * Revert "ext4: Fix fencepost error in chosing choosing group vs file + preallocation." + - LP: #615548 + * Revert "ext4: Add flag to files with blocks intentionally past EOF" + - LP: #615548 + * Revert "ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode" + - LP: #615548 + * Revert "ext4: Use bitops to read/modify EXT4_I(inode)->i_state" + - LP: #615548 + * Revert "ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag" + - LP: #615548 + * Revert "ext4: Fix quota accounting error with fallocate" + - LP: #615548 + * Revert "ext4: Handle -EDQUOT error on write" + - LP: #615548 + * Revert "ext4: Calculate metadata requirements more accurately" + - LP: #615548 + * Revert "ext4: Fix accounting of reserved metadata blocks" + - LP: #615548 + * Revert "ext4: Patch up how we claim metadata blocks for quota purposes" + - LP: #615548 + * Revert "ext4: Ensure zeroout blocks have no dirty metadata" + - LP: #615548 + * Revert "ext4: return correct wbc.nr_to_write in ext4_da_writepages" + - LP: #615548 + * Revert "ext4: Eliminate potential double free on error path" + - LP: #615548 + * Revert "ext4, jbd2: Add barriers for file systems with exernal + journals" + - LP: #615548 + * Revert "ext4: replace BUG() with return -EIO in ext4_ext_get_blocks" + - LP: #615548 + * Revert "ext4: Fix potential quota deadlock" + - LP: #615548 + * Revert "ext4: don't return to userspace after freezing the fs with a + mutex held" + - LP: #615548 + * ixgbe: Fix return of invalid txq + - LP: #607824 + * oprofile/x86: fix uninitialized counter usage during cpu hotplug + - LP: #607824 + * oprofile: remove double ring buffering + - LP: #607824 + * cpumask: fix compat getaffinity + - LP: #607824 + * NFSD: don't report compiled-out versions as present + - LP: #607824 + * sata_nv: use ata_pci_sff_activate_host() instead of ata_host_activate() + - LP: #607824 + * ARCNET: Limit com20020 PCI ID matches for SOHARD cards + - LP: #607824 + * rtl8180: fix tx status reporting + - LP: #607824 + * Staging: add Add Sitecom WL-349 to rtl8192su + - LP: #607824 + * staging: vt6655: Fix kernel BUG on driver wpa initialization + - LP: #607824 + * Fix racy use of anon_inode_getfd() in perf_event.c + - LP: #607824 + * posix_timer: Fix error path in timer_create + - LP: #607824 + * libata: disable ATAPI AN by default + - LP: #607824 + * libata: don't flush dcache on slab pages + - LP: #607824 + * mutex: Fix optimistic spinning vs. BKL + - LP: #607824 + * ALSA: hda: Fix model quirk for Dell M1730 + - LP: #576160, #607824 + * ALSA: hda: Use LPIB for Toshiba A100-259 + - LP: #549560, #607824 + * ALSA: hda: Use LPIB for Acer Aspire 5110 + - LP: #583983, #607824 + * ALSA: hda: Use LPIB for Sony VPCS11V9E + - LP: #586347, #607824 + * ALSA: hda: Use LPIB for a Shuttle device + - LP: #551949, #607824 + * ACPI: video: fix acpi_backlight=video + - LP: #573120, #607824 + * V4L/DVB: gspca - stv06xx: Remove the 046d:08da from the stv06xx driver + - LP: #607824 + * HID: Add the GYR4101US USB ID to hid-gyration + - LP: #607824 + * ar9170usb: add a couple more USB IDs + - LP: #607824 + * ar9170usb: fix panic triggered by undersized rxstream buffer + - LP: #607824 + * USB: visor: fix memory leak + - LP: #607824 + * USB: CP210x New Device IDs 11 New device IDs + - LP: #607824 + * USB: kobil: fix memory leak + - LP: #607824 + * USB: option: add PID for ZTE product + - LP: #607824 + * USB: option.c: Add Pirelli VID/PID and indicate Pirelli's modem + interface is 0xff + - LP: #607824 + * USB: serial: option: add cinterion device id + - LP: #607824 + * USB: option.c: OLIVETTI OLICARD100 support + - LP: #607824 + * USB: ir-usb: fix double free + - LP: #607824 + * USB: kl5usb105: fix memory leak + - LP: #607824 + * USB: mxc: gadget: Fix bitfield for calculating maximum packet size + - LP: #607824 + * USB: unusual-dev: Add bad sense flag for Appotech ax203 based picture + frames + - LP: #607824 + * USB: EHCI: clear PHCD before resuming + - LP: #607824 + * USB: xhci: Fix issue with set interface after stall. + - LP: #607824 + * USB: xhci: Fix check for room on the ring. + - LP: #607824 + * USB: xHCI: Fix wrong usage of macro TRB_TYPE + - LP: #607824 + * mac80211: give warning if building w/out rate ctrl algorithm + - LP: #607824 + * mac80211: Fix robust management frame handling (MFP) + - LP: #607824 + * mac80211: fix rts threshold check + - LP: #607824 + * drivers/base/cpu.c: fix the output from /sys/devices/system/cpu/offline + - LP: #607824 + * can: Fix SJA1000 command register writes on SMP systems + - LP: #607824 + * PCI quirk: Disable MSI on VIA K8T890 systems + - LP: #607824 + * PCI quirks: disable msi on AMD rs4xx internal gfx bridges + - LP: #607824 + * PCI: Disable MSI for MCP55 on P5N32-E SLI + - LP: #607824 + * virtio_net: Make delayed refill more reliable + - LP: #607824 + * mm: hugetlb: fix clear_huge_page() + - LP: #607824 + * powerpc: Fix handling of strncmp with zero len + - LP: #607824 + * powerpc/pseries: Only call start-cpu when a CPU is stopped + - LP: #607824 + * powerpc/pseries: Make query_cpu_stopped callable outside hotplug cpu + - LP: #607824 + * powerpc/oprofile: fix potential buffer overrun in op_model_cell.c + - LP: #607824 + * writeback: disable periodic old data writeback for + !dirty_writeback_centisecs + - LP: #607824 + * md/raid1: fix counting of write targets. + - LP: #607824 + * md: Fix read balancing in RAID1 and RAID10 on drives > 2TB + - LP: #607824 + * md: set mddev readonly flag on blkdev BLKROSET ioctl + - LP: #607824 + * x86/amd-iommu: Fix suspend/resume with IOMMU + - LP: #607824 + * exofs: confusion between kmap() and kmap_atomic() api + - LP: #607824 + * mn10300: set ARCH_KMALLOC_MINALIGN + - LP: #607824 + * m68k: set ARCH_KMALLOC_MINALIGN + - LP: #607824 + * rtc-cmos: do dev_set_drvdata() earlier in the initialization + - LP: #607824 + * rtc: s3c: initialize driver data before using it + - LP: #607824 + * frv: set ARCH_KMALLOC_MINALIGN + - LP: #607824 + * xtensa: set ARCH_KMALLOC_MINALIGN + - LP: #607824 + * Blackfin: set ARCH_KMALLOC_MINALIGN + - LP: #607824 + * tmpfs: insert tmpfs cache pages to inactive list at first + - LP: #607824 + * mlx4_core: Fix possible chunk sg list overflow in mlx4_alloc_icm() + - LP: #607824 + * ARM: 6166/1: Proper prefetch abort handling on pre-ARMv6 + - LP: #607824 + * ARM: 6164/1: Add kto and kfrom to input operands list. + - LP: #607824 + * ARM: 6146/1: sa1111: Prevent deadlock in resume path + - LP: #607824 + * ARM: 6144/1: TCM memory bug freeing bug + - LP: #607824 + * ARM: VFP: Fix vfp_put_double() for d16-d31 + - LP: #607824 + * ASoC: Fix dB scales for WM835x + - LP: #607824 + * ASoC: Fix dB scales for WM8400 + - LP: #607824 + * ASoC: Fix dB scales for WM8990 + - LP: #607824 + * hwmon: (ltc4245) Read only one GPIO pin + - LP: #607824 + * signals: check_kill_permission(): don't check creds if + same_thread_group() + - LP: #607824 + * do_generic_file_read: clear page errors when issuing a fresh read of + the page + - LP: #607824 + * ipmi: handle run_to_completion properly in deliver_recv_msg() + - LP: #607824 + * x86, setup: Phoenix BIOS fixup is needed on Dell Inspiron Mini 1012 + - LP: #607824 + * xen: ensure timer tick is resumed even on CPU driving the resume + - LP: #607824 + * xen: avoid allocation causing potential swap activity on the resume + path + - LP: #607824 + * ALSA: hda: Use LPIB for an ASUS device + - See: #465942, #607824 + * ALSA: hda: Use mb31 quirk for an iMac model + - LP: #542550, #607824 + * ALSA: hda: Use LPIB for another mainboard + - See: #580749, #607824 + * ALSA: hda: Use LPIB for ASUS M2V + - See: #587546, #607824 + * Staging: comedi - correct parameter gainlkup for DAQCard-6024E in + driver ni_mio_cs.c + - LP: #607824 + * clocksource: sh_cmt: compute mult and shift before registration + - LP: #607824 + * ath5k: retain promiscuous setting + - LP: #607824 + * ahci: add pci quirk for JMB362 + - LP: #607824 + * firewire: core: check for 1394a compliant IRM, fix inaccessibility of + Sony camcorder + - LP: #607824 + * perf_events: Fix resource leak in x86 __hw_perf_event_init() + - LP: #607824 + * sata_nv: don't diddle with nIEN on mcp55 + - LP: #607824 + * sata_via: magic vt6421 fix for transmission problems w/ WD drives + - LP: #422994, #607824 + * USB: mos7840: fix null-pointer dereference + - LP: #607824 + * USB: xhci: Wait for host to start running. + - LP: #607824 + * USB: xhci: Wait for controller to be ready after reset. + - LP: #607824 + * USB: ftdi_sio: fix DTR/RTS line modes + - LP: #607824 + * USB: cdc-acm: fix resource reclaim in error path of acm_probe + - LP: #607824 + * p54usb: Add device ID for Dell WLA3310 USB + - LP: #607824 + * atl1e: Allow TX checksum offload and TSO to be disabled and reenabled + - LP: #607824 + * via-velocity: Give RX descriptors to the NIC later on open or MTU + change + - LP: #607824 + * dmfe/tulip: Let dmfe handle DM910x except for SPARC on-board chips + - LP: #607824 + * Documentation/3c509: document ethtool support + - LP: #607824 + * wireless: report reasonable bitrate for MCS rates through wext + - LP: #607824 + * ath9k: add support for 802.11n bonded out AR2427 + - LP: #607824 + * wrong type for 'magic' argument in simple_fill_super() + - LP: #607824 + * iwlwifi: check for aggregation frame and queue + - LP: #607824 + * iwlwifi: recalculate average tpt if not current + - LP: #607824 + * iwlwifi: update supported PCI_ID list for 5xx0 series + - LP: #607824 + * wl1251: fix a memory leak in probe + - LP: #607824 + * vfs: add NOFOLLOW flag to umount(2) + - LP: #607824 + * l2tp: Fix oops in pppol2tp_xmit + - LP: #607824 + * ucc_geth: Fix empty TX queue processing + - LP: #607824 + * ucc_geth: Fix netdev watchdog triggering on link changes + - LP: #607824 + * ucc_geth: Fix full TX queue processing + - LP: #607824 + * Input: psmouse - reset all types of mice before reconnecting + - LP: #607824 + * KVM: s390: Fix possible memory leak of in kvm_arch_vcpu_create() + - LP: #607824 + * KVM: PPC: Do not create debugfs if fail to create vcpu + - LP: #607824 + * x86, paravirt: Add a global synchronization point for pvclock + - LP: #607824 + * KVM: Don't allow lmsw to clear cr0.pe + - LP: #607824 + * KVM: x86: Check LMA bit before set_efer + - LP: #607824 + * KVM: MMU: Segregate shadow pages with different cr0.wp + - LP: #607824 + * KVM: VMX: enable VMXON check with SMX enabled (Intel TXT) + - LP: #607824 + * KVM: MMU: Don't read pdptrs with mmu spinlock held in mmu_alloc_roots + - LP: #607824 + * KVM: Fix wallclock version writing race + - LP: #607824 + * KVM: x86: Add missing locking to arch specific vcpu ioctls + - LP: #607824 + * KVM: x86: Inject #GP with the right rip on efer writes + - LP: #607824 + * jbd: jbd-debug and jbd2-debug should be writable + - LP: #607824 + * parisc: clear floating point exception flag on SIGFPE signal + - LP: #607824 + * dm snapshot: simplify sector_to_chunk expression + - LP: #607824 + * KEYS: Return more accurate error codes + - LP: #607824 + * qla2xxx: Disable MSI on qla24xx chips other than QLA2432. + - LP: #607824 + * Linux 2.6.32.16 + - LP: #607824 + * drm/i915: Fix 82854 PCI ID, and treat it like other 85X + - LP: #607824 + * drm/i915: Reject bind_to_gtt() early if object > aperture + - LP: #607824 + * drm/edid: Fix 1024x768@85Hz + - LP: #607824 + * drm/radeon/kms: reset ddc_bus in object header parsing + - LP: #607824 + * drm/radeon/kms/atom: fix typo in LVDS panel info parsing + - LP: #607824 + * drm/radeon: r100/r200 ums: block ability for userspace app to trash 0 + page and beyond + - LP: #607824 + * drm/radeon: fix the r100/r200 ums block 0 page fix + - LP: #607824 + * drm/i915: Rebind bo if currently bound with incorrect alignment. + - LP: #607824 + * Linux 2.6.32.16+drm33.6 + - LP: #607824 + * virtio-pci: disable msi at startup + - LP: #615548 + * hwmon: (k8temp) Bypass core swapping on single-core processors + - LP: #615548 + * hwmon: (k8temp) Fix temperature reporting for ASB1 processor revisions + - LP: #615548 + * hwmon: (coretemp) Properly label the sensors + - LP: #615548 + * hwmon: (coretemp) Skip duplicate CPU entries + - LP: #615548 + * hwmon: (it87) Fix in7 on IT8720F + - LP: #615548 + * cifs: remove bogus first_time check in NTLMv2 session setup code + - LP: #615548 + * cifs: don't attempt busy-file rename unless it's in same directory + - LP: #615548 + * CIFS: Fix a malicious redirect problem in the DNS lookup code + - LP: #615548 + * ALSA: hda - Add Macbook 5,2 quirk + - LP: #463178, #615548 + * cpmac: do not leak struct net_device on phy_connect errors + - LP: #615548 + * sky2: enable rx/tx in sky2_phy_reinit() + - LP: #615548 + * sparc: Fix use of uid16_t and gid16_t in asm/stat.h + - LP: #615548 + * math-emu: correct test for downshifting fraction in _FP_FROM_INT() + - LP: #615548 + * NFSv4: Fix an embarassing typo in encode_attrs() + - LP: #615548 + * NFSv4: Ensure that /proc/self/mountinfo displays the minor version + number + - LP: #615548 + * SUNRPC: Fix a re-entrancy bug in xs_tcp_read_calldir() + - LP: #615548 + * ath5k: drop warning on jumbo frames + - LP: #615548 + * ath9k: re-enable ps by default for new single chip families + - LP: #615548 + * ath9k: Avoid corrupt frames being forwarded to mac80211. + - LP: #615548 + * hostap: Protect against initialization interrupt + - LP: #615548 + * TPM: ReadPubEK output struct fix + - LP: #615548 + * fb: fix colliding defines for fb flags. + - LP: #615548 + * iwlwifi: cancel scan watchdog in iwl_bg_abort_scan + - LP: #615548 + * mac80211: do not wip out old supported rates + - LP: #615548 + * mac80211: Handle mesh action frames in ieee80211_rx_h_action + - LP: #615548 + * Btrfs: fix checks in BTRFS_IOC_CLONE_RANGE + - LP: #615548 + * p54pci: add Symbol AP-300 minipci adapters pciid + - LP: #615548 + * dynamic debug: move ddebug_remove_module() down into free_module() + - LP: #615548 + * tpm_tis: fix subsequent suspend failures + - LP: #615548 + * ipvs: Add missing locking during connection table hashing and unhashing + - LP: #615548 + * netfilter: ip6t_REJECT: fix a dst leak in ipv6 REJECT + - LP: #615548 + * SCSI: aacraid: Eliminate use after free + - LP: #615548 + * amd64-agp: Probe unknown AGP devices the right way + - LP: #615548 + * perf: Resurrect flat callchains + - LP: #615548 + * x86: Fix vsyscall on gcc 4.5 with -Os + - LP: #615548 + * x86, Calgary: Increase max PHB number + - LP: #615548 + * x86, Calgary: Limit the max PHB number to 256 + - LP: #615548 + * sched: Prevent compiler from optimising the sched_avg_update() loop + - LP: #615548 + * sched: Fix over-scheduling bug + - LP: #615548 + * genirq: Deal with desc->set_type() changing desc->chip + - LP: #615548 + * serial: cpm_uart: implement the cpm_uart_early_write() function for + console poll + - LP: #615548 + * cmd640: fix kernel oops in test_irq() method + - LP: #615548 + * ide: Fix IDE taskfile with cfq scheduler + - LP: #615548 + * net/core: neighbour update Oops + - LP: #615548 + * tcp: fix crash in tcp_xmit_retransmit_queue + - LP: #615548 + * rtc: fix ds1388 time corruption + - LP: #615548 + * ethtool: Fix potential kernel buffer overflow in ETHTOOL_GRXCLSRLALL + - LP: #615548 + * sdhci-s3c: add missing remove function + - LP: #615548 + * ASoC: Remove duplicate AUX definition from WM8776 + - LP: #615548 + * x86: Fix x2apic preenabled system with kexec + - LP: #615548 + * IPoIB: Fix world-writable child interface control sysfs attributes + - LP: #615548 + * Input: i8042 - add Gigabyte Spring Peak to dmi_noloop_table + - LP: #580664, #615548 + * Input: twl40300-keypad - fix handling of "all ground" rows + - LP: #615548 + * ARM: 6201/1: RealView: Do not use outer_sync() on ARM11MPCore boards + with L220 + - LP: #615548 + * ARM: 6226/1: fix kprobe bug in ldr instruction emulation + - LP: #615548 + * x86: Do not try to disable hpet if it hasn't been initialized before + - LP: #615548 + * staging: rtl8192su: add USB VID/PID for HWNUm-300 + - LP: #615548 + * Staging: rtl8192su: add USB ID for 0bda:8171 + - LP: #615548 + * USB: obey the sysfs power/wakeup setting + - LP: #615548 + * USB: g_serial: don't set low_latency flag + - LP: #615548 + * USB: g_serial: fix tty cleanup on unload + - LP: #615548 + * USB: option: add support for 1da5:4518 + - LP: #615548 + * USB: Add PID for Sierra 250U to drivers/usb/serial/sierra.c + - LP: #599569, #615548 + * USB: ftdi_sio: support for Signalyzer tools based on FTDI chips + - LP: #615548 + * USB: option: Add support for AMOI Skypephone S2 + - LP: #615548 + * USB: adds Artisman USB dongle to list of quirky devices + - LP: #615548 + * USB: sisusbvga: Fix for USB 3.0 + - LP: #615548 + * USB: add quirk for Broadcom BT dongle + - LP: #615548 + * USB: FTDI: Add support for the RT System VX-7 radio programming cable + - LP: #615548 + * ethtool: Fix potential user buffer overflow for ETHTOOL_{G, S}RXFH + - LP: #615548 + * ext4: Fix potential quota deadlock + - LP: #615548 + * ext4: replace BUG() with return -EIO in ext4_ext_get_blocks + - LP: #615548 + * ext4, jbd2: Add barriers for file systems with exernal journals + - LP: #615548 + * ext4: Eliminate potential double free on error path + - LP: #615548 + * ext4: return correct wbc.nr_to_write in ext4_da_writepages + - LP: #615548 + * ext4: Ensure zeroout blocks have no dirty metadata + - LP: #615548 + * ext4: Patch up how we claim metadata blocks for quota purposes + - LP: #615548 + * ext4: Fix accounting of reserved metadata blocks + - LP: #615548 + * ext4: Calculate metadata requirements more accurately + - LP: #615548 + * ext4: Handle -EDQUOT error on write + - LP: #615548 + * ext4: Fix quota accounting error with fallocate + - LP: #615548 + * ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag + - LP: #615548 + * ext4: Use bitops to read/modify EXT4_I(inode)->i_state + - LP: #615548 + * ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode + - LP: #615548 + * ext4: Add flag to files with blocks intentionally past EOF + - LP: #615548 + * ext4: Fix fencepost error in chosing choosing group vs file + preallocation. + - LP: #615548 + * ext4: fix error handling in migrate + - LP: #615548 + * ext4: explicitly remove inode from orphan list after failed direct io + - LP: #615548 + * ext4: Handle non empty on-disk orphan link + - LP: #615548 + * ext4: make "offset" consistent in ext4_check_dir_entry() + - LP: #615548 + * ext4: Fix insertion point of extent in mext_insert_across_blocks() + - LP: #615548 + * ext4: Fix the NULL reference in double_down_write_data_sem() + - LP: #615548 + * ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl + - LP: #615548 + * ext4: Fix estimate of # of blocks needed to write indirect-mapped files + - LP: #615548 + * ext4: Fixed inode allocator to correctly track a flex_bg's used_dirs + - LP: #615548 + * ext4: Fix possible lost inode write in no journal mode + - LP: #615548 + * ext4: Fix buffer head leaks after calls to ext4_get_inode_loc() + - LP: #615548 + * ext4: Issue the discard operation *before* releasing the blocks to be + reused + - LP: #615548 + * ext4: check missed return value in ext4_sync_file() + - LP: #615548 + * ext4: fix memory leaks in error path handling of ext4_ext_zeroout() + - LP: #615548 + * ext4: Remove unnecessary call to ext4_get_group_desc() in mballoc + - LP: #615548 + * ext4: rename ext4_mb_release_desc() to ext4_mb_unload_buddy() + - LP: #615548 + * ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode + - LP: #615548 + * ext4: fix quota accounting in case of fallocate + - LP: #615548 + * ext4: check s_log_groups_per_flex in online resize code + - LP: #615548 + * ext4: don't return to userspace after freezing the fs with a mutex held + - LP: #615548 + * ext4: stop issuing discards if not supported by device + - LP: #615548 + * ext4: don't scan/accumulate more pages than mballoc will allocate + - LP: #615548 + * ext4: Do not zero out uninitialized extents beyond i_size + - LP: #615548 + * ext4: clean up inode bitmaps manipulation in ext4_free_inode + - LP: #615548 + * ext4: init statistics after journal recovery + - LP: #615548 + * ext4: Remove extraneous newlines in ext4_msg() calls + - LP: #615548 + * ext4: Prevent creation of files larger than RLIMIT_FSIZE using + fallocate + - LP: #615548 + * ext4: check for a good block group before loading buddy pages + - LP: #615548 + * ext4: Show journal_checksum option + - LP: #615548 + * ext4: Use bitops to read/modify i_flags in struct ext4_inode_info + - LP: #615548 + * ext4: Avoid crashing on NULL ptr dereference on a filesystem error + - LP: #615548 + * ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted + - LP: #615548 + * ext4: restart ext4_ext_remove_space() after transaction restart + - LP: #615548 + * ext4: Conditionally define compat ioctl numbers + - LP: #615548 + * ext4: Fix compat EXT4_IOC_ADD_GROUP + - LP: #615548 + * ext4: Make fsync sync new parent directories in no-journal mode + - LP: #615548 + * KVM: MMU: Remove user access when allowing kernel access to gpte.w=0 + page + - LP: #615548 + * KVM: SVM: Handle MCEs early in the vmexit process + - LP: #615548 + * KVM: SVM: Implement workaround for Erratum 383 + - LP: #615548 + * KVM: MMU: invalidate and flush on spte small->large page size change + - LP: #615548 + * futex: futex_find_get_task remove credentails check + - LP: #615548 + * GFS2: Fix up system xattrs + - LP: #615548 + * PM / x86: Save/restore MISC_ENABLE register + - LP: #615548 + * ACPI: skip checking BM_STS if the BIOS doesn't ask for it + - LP: #615548 + * ACPI: Unconditionally set SCI_EN on resume + - LP: #615548 + * libertas/sdio: 8686: set ECSI bit for 1-bit transfers + - LP: #615548 + * dm9000: fix "BUG: spinlock recursion" + - LP: #615548 + * firmware_class: fix memory leak - free allocated pages + - LP: #615548 + * revert "[CPUFREQ] remove rwsem lock from CPUFREQ_GOV_STOP call (second + call site)" + - LP: #615548 + * ALSA: Echoaudio, fix Guru Meditation #00000005.48454C50 + - LP: #615548 + * V4L/DVB: dvb-core: Fix ULE decapsulation bug + - LP: #615548 + * V4L/DVB: FusionHDTV: Use quick reads for I2C IR device probing + - LP: #615548 + * forcedeth: fix tx limit2 flag check + - LP: #615548 + * staging: rtl8192su: add Support for Belkin F5D8053 v6 + - LP: #615548 + * MIPS FPU emulator: allow Cause bits of FCSR to be writeable by ctc1 + - LP: #615548 + * V4L/DVB: budget: Select correct frontends + - LP: #615548 + * cxgb3: fix linkup issue + - LP: #615548 + * mac80211: fix supported rates IE if AP doesn't give us it's rates + - LP: #615548 + * V4L/DVB: uvcvideo: Add support for unbranded Arkmicro 18ec:3290 webcams + - LP: #615548 + * V4L/DVB: uvcvideo: Add support for Packard Bell EasyNote MX52 + integrated webcam + - LP: #615548 + * V4L/DVB: uvcvideo: Add support for V4L2_PIX_FMT_Y16 + - LP: #615548 + * iwlagn: verify flow id in compressed BA packet + - LP: #615548 + * kbuild: Fix modpost segfault + - LP: #615548 + * eeepc-laptop: check wireless hotplug events + - LP: #615548 + * Fix spinaphore down_spin() + - LP: #615548 + * ath5k: initialize ah->ah_current_channel + - LP: #615548 + * Input: RX51 keymap - fix recent compile breakage + - LP: #615548 + * V4L/DVB (13830): uvcvideo: add another YUYV format GUID for iSight + cameras + - LP: #615548 + * Linux 2.6.32.17 + - LP: #615548 + * drm/i915: fix hibernation since i915 self-reclaim fixes + - LP: #615548 + * drm/i915: add 'reclaimable' to i915 self-reclaimable page allocations + - LP: #615548 + * i915: fix lock imbalance on error path... + - LP: #615548 + * drm/i915: Define MI_ARB_STATE bits + - LP: #615548 + * drm/i915: enable low power render writes on GEN3 hardware. + - LP: #615548 + * drm/i915: Make G4X-style PLL search more permissive + - LP: #615548 + * drm/radeon/r200: handle more hw tex coord types + - LP: #615548 + * drm/radeon/r100/r200: fix calculation of compressed cube maps + - LP: #615548 + * drm/radeon/kms: CS checker texture fixes for r1xx/r2xx/r3xx + - LP: #615548 + * drm/radeon/kms: fix shared ddc handling + - LP: #615548 + * drm/radeon/kms: fix shared ddc harder + - LP: #615548 + * drm/radeon/kms: add quirk for ASUS HD 3600 board + - LP: #615548 + * drm/radeon/kms: fix possible mis-detection of sideport on rs690/rs740 + - LP: #615548 + * drm/radeon/kms: fix legacy LVDS dpms sequence + - LP: #615548 + * drm/radeon/kms: fix legacy tv-out pal mode + - LP: #615548 + * Linux 2.6.32.17+drm33.7 + - LP: #615548 + * (pre-stable) writeback: remove the always false + bdi_cap_writeback_dirty() test + - LP: #543617, #585092 + * (pre-stable) writeback: remove unused nonblocking and congestion checks + - LP: #543617, #585092 + * (pre-stable) vfs: improve writeback_inodes_wb() + - LP: #543617, #585092 + * (pre-stable) writeback: add missing kernel-doc notation + - LP: #543617, #585092 + * (pre-stable) writeback: fix writeback completion notifications + - LP: #543617, #585092 + * (pre-stable) writeback: queue work on stack in writeback_inodes_sb + - LP: #543617, #585092 + * (pre-stable) writeback: enforce s_umount locking in writeback_inodes_sb + - LP: #543617, #585092 + * (pre-stable) writeback: fix writeback_inodes_wb from + writeback_inodes_sb + - LP: #543617, #585092 + * (pre-stable) writeback: simplify wakeup_flusher_threads + - LP: #543617, #585092 + * (pre-stable) writeback: simplify and split bdi_start_writeback + - LP: #543617, #585092 + * (pre-stable) writeback: add missing requeue_io in writeback_inodes_wb + - LP: #543617, #585092 + * (pre-stable) writeback: fix pin_sb_for_writeback + - LP: #543617, #585092 + * (pre-stable) writeback: remove writeback_inodes_wbc + - LP: #543617, #585092 + * (pre-stable) writeback: split writeback_inodes_wb + - LP: #543617, #585092 + * (pre-stable) writeback: simplify the write back thread queue + - LP: #543617, #585092 + * (pre-stable) Fix compiling NFS when backporting writeback + - LP: #543617, #585092 + * sched: cgroup: Implement different treatment for idle shares + - LP: #620755 + * mm: fix ia64 crash when gcore reads gate area + - LP: #620755 + * acl trouble after upgrading ubuntu + - LP: #620755 + * comedi: Uncripple 8255-based DIO subdevices + - LP: #620755 + * NFS: kswapd must not block in nfs_release_page + - LP: #620755 + * PARISC: led.c - fix potential stack overflow in led_proc_write() + - LP: #620755 + * arm/imx/gpio: add spinlock protection + - LP: #620755 + * parisc: pass through '\t' to early (iodc) console + - LP: #620755 + * amd64_edac: Fix DCT base address selector + - LP: #620755 + * amd64_edac: Correct scrub rate setting + - LP: #620755 + * e1000e: don't inadvertently re-set INTX_DISABLE + - LP: #620755 + * e1000e: 82577/82578 PHY register access issues + - LP: #620755 + * 9p: strlen() doesn't count the terminator + - LP: #620755 + * ath9k: enable serialize_regmode for non-PCIE AR9160 + - LP: #620755 + * ath9k_hw: fix an off-by-one error in the PDADC boundaries calculation + - LP: #620755 + * ath9k: fix TSF after reset on AR913x + - LP: #620755 + * ath9k: fix yet another buffer leak in the tx aggregation code + - LP: #620755 + * iwlwifi: fix scan abort + - LP: #620755 + * cfg80211: ignore spurious deauth + - LP: #620755 + * cfg80211: don't get expired BSSes + - LP: #620755 + * xfs: prevent swapext from operating on write-only files + - LP: #620755 + * SCSI: enclosure: fix error path - actually return ERR_PTR() on error + - LP: #620755 + * GFS2: rename causes kernel Oops + - LP: #620755 + * slow-work: use get_ref wrapper instead of directly calling get_ref + - LP: #620755 + * CIFS: Remove __exit mark from cifs_exit_dns_resolver() + - LP: #620755 + * CIFS: Fix compile error with __init in cifs_init_dns_resolver() + definition + - LP: #620755 + * xen: drop xen_sched_clock in favour of using plain wallclock time + - LP: #620755 + * ssb: do not read SPROM if it does not exist + - LP: #620755 + * ssb: Look for SPROM at different offset on higher rev CC + - LP: #620755 + * ssb: fix NULL ptr deref when pcihost_wrapper is used + - LP: #620755 + * ssb: Handle alternate SSPROM location + - LP: #620755 + * Linux 2.6.32.18 + - LP: #620755 + * ata_piix: fix locking around SIDPR access + - LP: #622877 + * powerpc: fix build with make 3.82 + - LP: #622877 + * nvram: Fix write beyond end condition; prove to gcc copy is safe + - LP: #622877 + * x86: Add memory modify constraints to xchg() and cmpxchg() + - LP: #622877 + * x86, vmware: Preset lpj values when on VMware. + - LP: #622877 + * Staging: line6: needs to select SND_PCM + - LP: #622877 + * Staging: panel: Prevent double-calling of parport_release - fix oops. + - LP: #622877 + * PCI: Do not run NVidia quirks related to MSI with MSI disabled + - LP: #622877 + * PCI: disable MSI on VIA K8M800 + - LP: #622877 + * solos-pci: Fix race condition in tasklet RX handling + - LP: #622877 + * splice: fix misuse of SPLICE_F_NONBLOCK + - LP: #622877 + * drivers/video/w100fb.c: ignore void return value / fix build failure + - LP: #622877 + * ide-cd: Do not access completed requests in the irq handler + - LP: #622877 + * md/raid10: fix deadlock with unaligned read during resync + - LP: #622877 + * blkdev: cgroup whitelist permission fix + - LP: #622877 + * eCryptfs: Handle ioctl calls with unlocked and compat functions + - LP: #622877 + * ecryptfs: release reference to lower mount if interpose fails + - LP: #622877 + * fs/ecryptfs/file.c: introduce missing free + - LP: #622877 + * bio, fs: update RWA_MASK, READA and SWRITE to match the corresponding + BIO_RW_* bits + - LP: #622877 + * signalfd: fill in ssi_int for posix timers and message queues + - LP: #622877 + * smsc911x: Add spinlocks around registers access + - LP: #622877 + * ARM: 6299/1: errata: TLBIASIDIS and TLBIMVAIS operations can broadcast + a faulty ASID + - LP: #622877 + * ARM: 6280/1: imx: Fix build failure when including + without + - LP: #622877 + * USB: resizing usbmon binary interface buffer causes protection faults + - LP: #622877 + * USB delay init quirk for logitech Harmony 700-series devices + - LP: #622877 + * USB: serial: enabling support for Segway RMP in ftdi_sio + - LP: #622877 + * USB: option: Huawei ETS 1220 support added + - LP: #622877 + * USB: option: add huawei k3765 k4505 devices to work properly + - LP: #622877 + * USB: ftdi_sio: device id for Navitator + - LP: #622877 + * USB: cp210x: Add four new device IDs + - LP: #622877 + * USB: usbtest: avoid to free coherent buffer in atomic context + - LP: #622877 + * USB: fix thread-unsafe anchor utiliy routines + - LP: #622877 + * drm/edid: Fix the HDTV hack sync adjustment + - LP: #622877 + * Bluetooth: Added support for controller shipped with iMac i5 + - LP: #622877 + * jfs: don't allow os2 xattr namespace overlap with others + - LP: #622877 + * arp_notify: allow drivers to explicitly request a notification event. + - LP: #622877 + * xen: netfront: explicitly generate arp_notify event after migration. + - LP: #622877 + * net: Fix NETDEV_NOTIFY_PEERS to not conflict with + NETDEV_BONDING_DESLAVE. + - LP: #622877 + * irq: Add new IRQ flag IRQF_NO_SUSPEND + - LP: #622877 + * xen: Do not suspend IPI IRQs. + - LP: #622877 + * drm/i915: Use RSEN instead of HTPLG for tfp410 monitor detection. + - LP: #622877 + * Btrfs: Avoid superfluous tree-log writeout + - LP: #622877 + * Btrfs: Add btrfs_duplicate_item + - LP: #622877 + * Btrfs: Rewrite btrfs_drop_extents + - LP: #622877 + * Btrfs: Fix disk_i_size update corner case + - LP: #622877 + * Btrfs: Avoid orphan inodes cleanup while replaying log + - LP: #622877 + * Btrfs: Avoid orphan inodes cleanup during committing transaction + - LP: #622877 + * Btrfs: Make fallocate(2) more ENOSPC friendly + - LP: #622877 + * Btrfs: Make truncate(2) more ENOSPC friendly + - LP: #622877 + * Btrfs: Pass transaction handle to security and ACL initialization + functions + - LP: #622877 + * Btrfs: Add delayed iput + - LP: #622877 + * Btrfs: Fix btrfs_drop_extent_cache for skip pinned case + - LP: #622877 + * Btrfs: Fix per root used space accounting + - LP: #622877 + * Btrfs: don't add extent 0 to the free space cache v2 + - LP: #622877 + * Btrfs: fail mount on bad mount options + - LP: #622877 + * Btrfs: deny sys_link across subvolumes. + - LP: #622877 + * Btrfs: Show discard option in /proc/mounts + - LP: #622877 + * Btrfs: make metadata chunks smaller + - LP: #622877 + * Btrfs: make sure fallocate properly starts a transaction + - LP: #622877 + * btrfs: fix missing last-entry in readdir(3) + - LP: #622877 + * Btrfs: align offsets for btrfs_ordered_update_i_size + - LP: #622877 + * Btrfs, fix memory leaks in error paths + - LP: #622877 + * Btrfs: Fix race in btrfs_mark_extent_written + - LP: #622877 + * Btrfs: fix regression in orphan cleanup + - LP: #622877 + * Btrfs: deal with NULL acl sent to btrfs_set_acl + - LP: #622877 + * Btrfs: fix possible panic on unmount + - LP: #622877 + * Btrfs: Use correct values when updating inode i_size on fallocate + - LP: #622877 + * Btrfs: fix a memory leak in btrfs_init_acl + - LP: #622877 + * Btrfs: run orphan cleanup on default fs root + - LP: #622877 + * Btrfs: do not mark the chunk as readonly if in degraded mode + - LP: #622877 + * Btrfs: check return value of open_bdev_exclusive properly + - LP: #622877 + * Btrfs: check total number of devices when removing missing + - LP: #622877 + * Btrfs: fix race between allocate and release extent buffer. + - LP: #622877 + * Btrfs: make error return negative in btrfs_sync_file() + - LP: #622877 + * Btrfs: remove BUG_ON() due to mounting bad filesystem + - LP: #622877 + * Btrfs: Fix oopsen when dropping empty tree. + - LP: #622877 + * Btrfs: do not try and lookup the file extent when finishing ordered io + - LP: #622877 + * Btrfs: apply updated fallocate i_size fix + - LP: #622877 + * Btrfs: btrfs_mark_extent_written uses the wrong slot + - LP: #622877 + * Btrfs: kfree correct pointer during mount option parsing + - LP: #622877 + * nohz: Introduce arch_needs_cpu + - LP: #622877 + * nohz: Reuse ktime in sub-functions of tick_check_idle. + - LP: #622877 + * timekeeping: Fix clock_gettime vsyscall time warp + - LP: #622877 + * sched: Fix granularity of task_u/stime() + - LP: #622877 + * sched, cputime: Introduce thread_group_times() + - LP: #622877 + * mutex: Don't spin when the owner CPU is offline or other weird cases + - LP: #622877 + * fix SBA IOMMU to handle allocation failure properly + - LP: #622877 + * crypto: testmgr - Fix complain about lack test for internal used + algorithm + - LP: #622877 + * memory hotplug: fix a bug on /dev/mem for 64-bit kernels + - LP: #622877 + * x86: Fix out of order of gsi + - LP: #622877 + * HWPOISON: remove the anonymous entry + - LP: #622877 + * HWPOISON: abort on failed unmap + - LP: #622877 + * powerpc/eeh: Fix a bug when pci structure is null + - LP: #622877 + * ACPI: Fix regression where _PPC is not read at boot even when + ignore_ppc=0 + - LP: #622877 + * ext4: Make sure the MOVE_EXT ioctl can't overwrite append-only files + - LP: #622877 + * ext4: Fix optional-arg mount options + - LP: #622877 + * reiserfs: properly honor read-only devices + - LP: #622877 + * reiserfs: fix oops while creating privroot with selinux enabled + - LP: #622877 + * dlm: always use GFP_NOFS + - LP: #622877 + * dlm: fix ordering of bast and cast + - LP: #622877 + * dlm: send reply before bast + - LP: #622877 + * ocfs2: Find proper end cpos for a leaf refcount block. + - LP: #622877 + * ocfs2: Set MS_POSIXACL on remount + - LP: #622877 + * Skip check for mandatory locks when unlocking + - LP: #622877 + * loop: Update mtime when writing using aops + - LP: #622877 + * aic79xx: check for non-NULL scb in ahd_handle_nonpkt_busfree + - LP: #622877 + * ibmvfc: Fix command completion handling + - LP: #622877 + * ibmvfc: Reduce error recovery timeout + - LP: #622877 + * md/raid1: delay reads that could overtake behind-writes. + - LP: #622877 + * mm: fix corruption of hibernation caused by reusing swap during image + saving + - LP: #622877 + * Linux 2.6.32.19 + - LP: #622877 + * Linux 2.6.32.20 + - LP: #622882 + * memstick: fix hangs on unexpected device removal in mspro_blk + - LP: #625392 + * ASoC: Fix inverted mute controls for WM8580 + - LP: #625392 + * ASoC: Remove DSP mode support for WM8776 + - LP: #625392 + * ALSA: riptide - Fix detection / load of firmware files + - LP: #625392 + * ALSA: emu10k1 - delay the PCM interrupts (add pcm_irq_delay parameter) + - LP: #625392 + * ALSA: hda - Fix missing stream for second ADC on Realtek ALC260 HDA + codec + - LP: #625392 + * ocfs2: do not overwrite error codes in ocfs2_init_acl + - LP: #625392 + * ocfs2/dlm: fix a dead lock + - LP: #625392 + * ocfs2 fix o2dlm dlm run purgelist (rev 3) + - LP: #625392 + * ocfs2: Count more refcount records in file system fragmentation. + - LP: #625392 + * ocfs2/dlm: avoid incorrect bit set in refmap on recovery master + - LP: #625392 + * ocfs2/dlm: remove potential deadlock -V3 + - LP: #625392 + * x86, hotplug: Serialize CPU hotplug to avoid bringup concurrency issues + - LP: #625392 + * x86, apic: Fix apic=debug boot crash + - LP: #625392 + * Fix the nested PR lock calling issue in ACL + - LP: #625392 + * hwmon: (pc87360) Fix device resource declaration + - LP: #625392 + * ARM: Tighten check for allowable CPSR values + - LP: #625392 + * nfs: Add "lookupcache" to displayed mount options + - LP: #625392 + * ath5k: disable ASPM L0s for all cards + - LP: #625392 + * pxa3xx: fix ns2cycle equation + - LP: #625392 + * dm mpath: fix NULL pointer dereference when path parameters missing + - LP: #625392 + * dm ioctl: release _hash_lock between devices in remove_all + - LP: #625392 + * mm: make the vma list be doubly linked + - LP: #625392 + * mm: make the mlock() stack guard page checks stricter + - LP: #625392 + * mm: make stack guard page logic use vm_prev pointer + - LP: #625392 + * slab: fix object alignment + - LP: #625392 + * sunxvr500: Ignore secondary output PCI devices. + - LP: #625392 + * sparc64: Add missing ID to parport probing code. + - LP: #625392 + * sparc64: Fix rwsem constant bug leading to hangs. + - LP: #625392 + * sparc64: Fix atomic64_t routine return values. + - LP: #625392 + * net: Fix a memmove bug in dev_gro_receive() + - LP: #625392 + * isdn: fix information leak + - LP: #625392 + * act_nat: the checksum of ICMP doesn't have pseudo header + - LP: #625392 + * vmscan: raise the bar to PAGEOUT_IO_SYNC stalls + - LP: #625392 + * pcmcia: avoid buffer overflow in pcmcia_setup_isa_irq + - LP: #625392 + * ext4: consolidate in_range() definitions + - LP: #625392 + * Oprofile: Change CPUIDS from decimal to hex, and add some comments + - LP: #625392 + * oprofile: add support for Intel processor model 30 + - LP: #625392 + * fixes for using make 3.82 + - LP: #625392 + * ALSA: intel8x0: Mute External Amplifier by default for ThinkPad X31 + - LP: #619439, #625392 + * netlink: fix compat recvmsg + - LP: #625392 + * powerpc: Fix typo in uImage target + - LP: #625392 + * USB: option: add Celot CT-650 + - LP: #625392 + * USB: add device IDs for igotu to navman + - LP: #625392 + * USB: pl2303: New vendor and product id + - LP: #625392 + * USB: CP210x Fix Break On/Off + - LP: #625392 + * USB: ftdi_sio: fix endianess of max packet size + - LP: #625392 + * USB: io_ti: check firmware version before updating + - LP: #625392 + * USB: xhci: Remove buggy assignment in next_trb() + - LP: #625392 + * USB: ftdi_sio: Add ID for Ionics PlugComputer + - LP: #625392 + * USB: ftdi_sio: add product ID for Lenz LI-USB + - LP: #625392 + * x86, apic: ack all pending irqs when crashed/on kexec + - LP: #625392 + * Linux 2.6.32.21 + - LP: #625392 + + [ Ubuntu: 2.6.32-24.43 ] + + * x86-64, compat: Test %rax for the syscall number, not %eax + - CVE-2010-3301 + * x86-64, compat: Retruncate rax after ia32 syscall entry tracing + - CVE-2010-3301 + * compat: Make compat_alloc_user_space() incorporate the access_ok() + - CVE-2010-3081 + + [ Ubuntu: 2.6.32-24.42 ] + + * (pre-stable) drm/i915: add PANEL_UNLOCK_REGS definition + - LP: #561802, #578673 + * (pre-stable) drm/i915: make sure eDP panel is turned on + - LP: #578673 + * (pre-stable) drm/i915: make sure we shut off the panel in eDP configs + - LP: #578673 + + -- Brad Figg Fri, 01 Oct 2010 10:39:03 -0700 + +linux-ec2 (2.6.32-308.16) lucid-security; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-24.43 + + [ Ubuntu: 2.6.32-24.43 ] + + * x86-64, compat: Test %rax for the syscall number, not %eax + - CVE-2010-3301 + * x86-64, compat: Retruncate rax after ia32 syscall entry tracing + - CVE-2010-3301 + * compat: Make compat_alloc_user_space() incorporate the access_ok() + - CVE-2010-3081 + + [ Ubuntu: 2.6.32-24.42 ] + + * (pre-stable) drm/i915: add PANEL_UNLOCK_REGS definition + - LP: #561802, #578673 + * (pre-stable) drm/i915: make sure eDP panel is turned on + - LP: #578673 + * (pre-stable) drm/i915: make sure we shut off the panel in eDP configs + - LP: #578673 + + -- Stefan Bader Thu, 16 Sep 2010 10:39:18 +0200 + +linux-ec2 (2.6.32-308.15) lucid-security; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-24.41 + + [ Ubuntu: 2.6.32-24.41 ] + + * (pre-stable) ext4: fix freeze deadlock under IO + - LP: #595489 + * drm: Initialize ioctl struct when no user data is present + - CVE-2010-2803 + * can: add limit for nframes and clean up signed/unsigned variables + - CVE-2010-2959 + * mm: keep a guard page below a grow-down stack segment + - CVE-2010-2240 + * mm: fix missing page table unmap for stack guard page failure case + - CVE-2010-2240 + * mm: fix page table unmap for stack guard page properly + - CVE-2010-2240 + * mm: fix up some user-visible effects of the stack guard page + - CVE-2010-2240 + * x86: don't send SIGBUS for kernel page faults + - CVE-2010-2240 + + -- Stefan Bader Wed, 18 Aug 2010 14:33:06 +0200 + +linux-ec2 (2.6.32-308.14) lucid-security; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-24.39 + + [ Ubuntu: 2.6.32-24.39 ] + + * sctp: Fix skb_over_panic resulting from multiple invalid parameter + errors (CVE-2010-1173) (v4) + - CVE-2010-1173 + * sctp: fix append error cause to ERROR chunk correctly + - CVE-2010-1173 + * GFS2: Fix writing to non-page aligned gfs2_quota structures + - CVE-2010-1436 + * KEYS: find_keyring_by_name() can gain access to a freed keyring + - CVE-2010-1437 + * GFS2: Fix permissions checking for setflags ioctl() + - CVE-2010-1641 + * Btrfs: should add a permission check for setfacl + - CVE-2010-2071 + * ecryptfs: Bugfix for error related to ecryptfs_hash_buckets + - CVE-2010-2492 + + -- Stefan Bader Wed, 21 Jul 2010 10:58:47 +0200 + +linux-ec2 (2.6.32-308.13) lucid-proposed; urgency=low + + [ Stefan Bader ] + + * Rebased to 2.6.32-24.38 + + [ Ubuntu: 2.6.32-24.38 ] + + * SAUCE: dell-laptop: fire SMI when toggling hardware killswitch + (revised) + - LP: #590607 + * sfc: Wait at most 10ms for the MC to finish reading out MAC statistics + - LP: #590783 + * sfc: Always close net device at the end of a disabling reset + - LP: #590783 + * sfc: Change falcon_probe_board() to fail for unsupported boards + - LP: #590783 + * ext4: Fix potential quota deadlock + - LP: #588069 + * jbd: jbd-debug and jbd2-debug should be writable + - LP: #588069 + * ext4: replace BUG() with return -EIO in ext4_ext_get_blocks + - LP: #588069 + * ext4, jbd2: Add barriers for file systems with exernal journals + - LP: #588069 + * ext4: Eliminate potential double free on error path + - LP: #588069 + * ext4: return correct wbc.nr_to_write in ext4_da_writepages + - LP: #588069 + * ext4: Ensure zeroout blocks have no dirty metadata + - LP: #588069 + * ext4: Patch up how we claim metadata blocks for quota purposes + - LP: #588069 + * ext4: Fix accounting of reserved metadata blocks + - LP: #588069 + * ext4: Calculate metadata requirements more accurately + - LP: #588069 + * ext4: Handle -EDQUOT error on write + - LP: #588069 + * ext4: Fix quota accounting error with fallocate + - LP: #588069 + * ext4: Drop EXT4_GET_BLOCKS_UPDATE_RESERVE_SPACE flag + - LP: #588069 + * ext4: Use bitops to read/modify EXT4_I(inode)->i_state + - LP: #588069 + * ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode + - LP: #588069 + * ext4: Add flag to files with blocks intentionally past EOF + - LP: #588069 + * ext4: Fix fencepost error in chosing choosing group vs file + preallocation. + - LP: #588069 + * ext4: fix error handling in migrate + - LP: #588069 + * ext4: explicitly remove inode from orphan list after failed direct io + - LP: #588069 + * ext4: Handle non empty on-disk orphan link + - LP: #588069 + * ext4: make "offset" consistent in ext4_check_dir_entry() + - LP: #588069 + * ext4: Fix insertion point of extent in mext_insert_across_blocks() + - LP: #588069 + * ext4: Fix the NULL reference in double_down_write_data_sem() + - LP: #588069 + * ext4: Code cleanup for EXT4_IOC_MOVE_EXT ioctl + - LP: #588069 + * ext4: Fix estimate of # of blocks needed to write indirect-mapped files + - LP: #588069 + * ext4: Fixed inode allocator to correctly track a flex_bg's used_dirs + - LP: #588069 + * ext4: Fix possible lost inode write in no journal mode + - LP: #588069 + * ext4: Fix buffer head leaks after calls to ext4_get_inode_loc() + - LP: #588069 + * ext4: Issue the discard operation *before* releasing the blocks to be + reused + - LP: #588069 + * ext4: check missed return value in ext4_sync_file() + - LP: #588069 + * ext4: fix memory leaks in error path handling of ext4_ext_zeroout() + - LP: #588069 + * ext4: Remove unnecessary call to ext4_get_group_desc() in mballoc + - LP: #588069 + * ext4: rename ext4_mb_release_desc() to ext4_mb_unload_buddy() + - LP: #588069 + * ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode + - LP: #588069 + * ext4: fix quota accounting in case of fallocate + - LP: #588069 + * ext4: check s_log_groups_per_flex in online resize code + - LP: #588069 + * ext4: don't return to userspace after freezing the fs with a mutex held + - LP: #588069 + * ext4: stop issuing discards if not supported by device + - LP: #588069 + * ext4: don't scan/accumulate more pages than mballoc will allocate + - LP: #588069 + * ext4: Do not zero out uninitialized extents beyond i_size + - LP: #588069 + * ext4: clean up inode bitmaps manipulation in ext4_free_inode + - LP: #588069 + * ext4: init statistics after journal recovery + - LP: #588069 + * ext4: Remove extraneous newlines in ext4_msg() calls + - LP: #588069 + * ext4: Prevent creation of files larger than RLIMIT_FSIZE using + fallocate + - LP: #588069 + * ext4: check for a good block group before loading buddy pages + - LP: #588069 + * ext4: Show journal_checksum option + - LP: #588069 + * ext4: Use bitops to read/modify i_flags in struct ext4_inode_info + - LP: #588069 + * ext4: Avoid crashing on NULL ptr dereference on a filesystem error + - LP: #588069 + * ext4: Clear the EXT4_EOFBLOCKS_FL flag only when warranted + - LP: #588069 + * ext4: restart ext4_ext_remove_space() after transaction restart + - LP: #588069 + * ext4: Conditionally define compat ioctl numbers + - LP: #588069 + * ext4: Fix compat EXT4_IOC_ADD_GROUP + - LP: #588069 + * ext4: Make fsync sync new parent directories in no-journal mode + - LP: #588069 + * (pre-stable) ahci,ata_generic: let ata_generic handle new MBP w/ MCP89 + - LP: #576601 + * (pre-stable) ata_generic: implement ATA_GEN_* flags and force enable + DMA on MBP 7,1 + - LP: #576601 + + -- Stefan Bader Thu, 08 Jul 2010 10:53:59 +0200 + +linux-ec2 (2.6.32-307.12) lucid-proposed; urgency=low + + [ Andy Whitcroft ] + + * rebase to Ubuntu-2.6.32-23.37 + * update to ubuntu-debian:7e708d33054c373faf41da23b73e8b48c342d958 + - LP: #570500, #576274 + * xen: follow changes to smp headers adding wbinvd + - LP: #575853 + + [ Ubuntu: 2.6.32-23.37 ] + + * SAUCE: drm/radeon/kms/atom: fix dual-link DVI on DCE3.2/4.0 + - LP: #564559 + * [Config] ports -- build in dm-mod to enable LVM boot + - LP: #560717 + * tools -- fix perf version extraction for multi-part flavours + - LP: #555130 + * [Config] enforce -- ensure dm_mod is built-in for LVM + - LP: #560717 + * update to ubuntu-debian:7e708d33054c373faf41da23b73e8b48c342d958 + - LP: #570500, #576274 + * Revert "(pre-stable): input: ALPS - Add signature for HP Pavilion dm3 + laptops" + - LP: #550625 + * Enable ftrace function profiler + - LP: #570389 + * enforce CONFIG_TMPFS_POSIX_ACL=y + - LP: #575940 + * Revert "staging/comdi -- disable" + - LP: #563436 + * [Config] Enable multicast routing for sparc + - LP: #416266 + * [Config] Add ahci.ko to virtual sub-flavour + - LP: #570542 + * Revert "SAUCE: drm/i915: Disable FBC on 915GM and 945GM" + - LP: #588832 + * [Config] Add atl1c to nic-modules udeb + - LP: #557130 + * Revert "(pre-stable) iwlwifi: fix nfreed--" + - LP: #575853 + * Revert "backlight: mbp_nvidia_bl - add five more MacBook variants" + - LP: #575853 + * Revert "(pre-stable) pata_via: Add VIA VX900 support" + - LP: #575853 + * Revert "(pre-stable) x86-32, resume: do a global tlb flush in S4 + resume" + - LP: #575853 + * Revert "x86: disable IOMMUs on kernel crash" + - LP: #575853 + * Revert "sunrpc: fix peername failed on closed listener" + - LP: #575853 + * Revert "sunrpc: move the close processing after do recvfrom method" + - LP: #575853 + * Revert "(pre-stable) drm/edid: allow certain bogus edids to hit a fixup + path rather than fail" + - LP: #575853 + * Revert "drm/radeon/kms: don't print error on -ERESTARTSYS." + - LP: #575853 + * Revert "ath9k: fix lockdep warning when unloading module" on stable + kernels + - LP: #588832 + * Staging: comedi: removed "depricated" from COMEDI_CB_BLOCK + - LP: #483343 + * fat: fix buffer overflow in vfat_create_shortname() + - LP: #575853 + * xfs: simplify inode teardown + - LP: #575853 + * xfs: fix mmap_sem/iolock inversion in xfs_free_eofblocks + - LP: #575853 + * xfs: I/O completion handlers must use NOFS allocations + - LP: #575853 + * xfs: Wrapped journal record corruption on read at recovery + - LP: #575853 + * xfs: Fix error return for fallocate() on XFS + - LP: #575853 + * xfs: check for not fully initialized inodes in xfs_ireclaim + - LP: #575853 + * xfs: fix timestamp handling in xfs_setattr + - LP: #575853 + * xfs: Don't flush stale inodes + - LP: #575853 + * xfs: Ensure we force all busy extents in range to disk + - LP: #575853 + * xfs: reclaim inodes under a write lock + - LP: #575853 + * xfs: Avoid inodes in reclaim when flushing from inode cache + - LP: #575853 + * xfs: reclaim all inodes by background tree walks + - LP: #575853 + * xfs: fix stale inode flush avoidance + - LP: #575853 + * xfs: xfs_swap_extents needs to handle dynamic fork offsets + - LP: #575853 + * xfs: quota limit statvfs available blocks + - LP: #575853 + * xfs: don't hold onto reserved blocks on remount, ro + - LP: #575853 + * xfs: remove invalid barrier optimization from xfs_fsync + - LP: #575853 + * xfs: Non-blocking inode locking in IO completion + - LP: #575853 + * xfs: fix locking for inode cache radix tree tag updates + - LP: #575853 + * sh: Enable the mmu in start_secondary() + - LP: #575853 + * sh: Fix FDPIC binary loader + - LP: #575853 + * libiscsi: Fix recovery slowdown regression + - LP: #575853 + * Freezer: Fix buggy resume test for tasks frozen with cgroup freezer + - LP: #575853 + * iwlwifi: counting number of tfds can be free for 4965 + - LP: #575853 + * iwlwifi: fix nfreed-- + - LP: #575853 + * iwlwifi: range checking issue + - LP: #575853 + * setup correct int pipe type in ar9170_usb_exec_cmd + - LP: #575853 + * mac80211: move netdev queue enabling to correct spot + - LP: #575853 + * mac80211: tear down all agg queues when restart/reconfig hw + - LP: #575853 + * WATCHDOG: hpwdt - fix lower timeout limit + - LP: #575853 + * WATCHDOG: iTCO_wdt: TCO Watchdog patch for additional Intel Cougar + Point DeviceIDs + - LP: #575853 + * genirq: Force MSI irq handlers to run with interrupts disabled + - LP: #575853 + * lis3: fix show rate for 8 bits chips + - LP: #575853 + * pata_ali: Fix regression with old devices + - LP: #575853 + * HID: fix oops in gyration_event() + - LP: #575853 + * raw: fsync method is now required + - LP: #575853 + * readahead: fix NULL filp dereference + - LP: #575853 + * ALSA: mixart: range checking proc file + - LP: #575853 + * ALSA: hda: Fix 0 dB offset for Lenovo Thinkpad models using AD1981 + - LP: #551606, #575853 + * x86, amd: Get multi-node CPU info from NodeId MSR instead of PCI config + space + - LP: #575853 + * resource: move kernel function inside __KERNEL__ + - LP: #575853 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #575853 + * pata_via: Add VIA VX900 support + - LP: #575853 + * ext3: Don't update the superblock in ext3_statfs() + - LP: #575853 + * ext3: journal all modifications in ext3_xattr_set_handle + - LP: #575853 + * eeepc-laptop: disable cpu speed control on EeePC 701 + - LP: #575853 + * eeepc-laptop: dmi blacklist to disable pci hotplug code + - LP: #575853 + * eeepc-laptop: add hotplug_disable parameter + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1201N + - LP: #575853 + * eeepc-laptop: disable wireless hotplug for 1005PE + - LP: #575853 + * libata: disable NCQ on Crucial C300 SSD + - LP: #575853 + * cifs: Fix a kernel BUG with remote OS/2 server (try #3) + - LP: #575853 + * CIFS: initialize nbytes at the beginning of CIFSSMBWrite() + - LP: #575853 + * iwlwifi: need check for valid qos packet before free + - LP: #575853 + * ARM: 6031/1: fix Thumb-2 decompressor + - LP: #575853 + * x86-32, resume: do a global tlb flush in S4 resume + - LP: #575853 + * x86: hpet: Make WARN_ON understandable + - LP: #575853 + * x86, hpet: Erratum workaround for read after write of HPET comparator + - LP: #575853 + * x86: Fix double enable_IR_x2apic() call on SMP kernel on !SMP boards + - LP: #575853 + * sched: sched_getaffinity(): Allow less than NR_CPUS length + - LP: #575853 + * sched: Fix sched_getaffinity() + - LP: #575853 + * NFSv4: Fall back to ordinary lookup if nfs4_atomic_open() returns + EISDIR + - LP: #575853 + * NFSv4: fix delegated locking + - LP: #575853 + * ALSA: hda - add a quirk for Clevo M570U laptop + - LP: #575853 + * ALSA: usb - Fix Oops after usb-midi disconnection + - LP: #575853 + * hwmon: (sht15) Fix sht15_calc_temp interpolation function + - LP: #575853 + * hwmon: (sht15) Properly handle the case CONFIG_REGULATOR=n + - LP: #575853 + * x86/amd-iommu: Use helper function to destroy domain + - LP: #575853 + * x86/amd-iommu: enable iommu before attaching devices + - LP: #575853 + * x86, lib: Add wbinvd smp helpers + - LP: #575853 + * x86, cacheinfo: Fix disabling of L3 cache indices + - LP: #575853 + * intel-agp: Switch to wbinvd_on_all_cpus + - LP: #575853 + * x86, cacheinfo: Add cache index disable sysfs attrs only to L3 caches + - LP: #575853 + * x86, cacheinfo: Calculate L3 indices + - LP: #575853 + * x86, cacheinfo: Remove NUMA dependency, fix for AMD Fam10h rev D1 + - LP: #575853 + * x86, cacheinfo: Enable L3 CID only on AMD + - LP: #575853 + * vgaarb: fix "target=default" passing + - LP: #575853 + * x86-32: clean up rwsem inline asm statements + - LP: #575853 + * x86: clean up rwsem type system + - LP: #575853 + * x86-64, rwsem: 64-bit xadd rwsem implementation + - LP: #575853 + * x86-64: support native xadd rwsem implementation + - LP: #575853 + * x86: Fix breakage of UML from the changes in the rwsem system + - LP: #575853 + * x86-64, rwsem: Avoid store forwarding hazard in __downgrade_write + - LP: #575853 + * fix NFS4 handling of mountpoint stat + - LP: #575853 + * dm mpath: fix stall when requeueing io + - LP: #575853 + * quota: Fix possible dq_flags corruption + - LP: #575853 + * Staging: comedi: fix usbdux timeout bug + - LP: #483343, #575853 + * Staging: comedi: usbdux.c: fix locking up of the driver when the comedi + ringbuffer runs empty + - LP: #483343, #575853 + * ocfs2: set i_mode on disk during acl operations + - LP: #575853 + * ocfs2: Change bg_chain check for ocfs2_validate_gd_parent. + - LP: #575853 + * 9p: Skip check for mandatory locks when unlocking + - LP: #575853 + * fc class: fail fast bsg requests + - LP: #575853 + * SCSI: add scsi target reset support to scsi ioctl + - LP: #575853 + * PCIe AER: prevent AER injection if hardware masks error reporting + - LP: #575853 + * vgaarb: Fix VGA arbiter to accept PCI domains other than 0 + - LP: #575853 + * SCSI: fc-transport: Use packed modifier for fc_bsg_request structure. + - LP: #575853 + * pci: Update pci_set_vga_state() to call arch functions + - LP: #575853 + * PCI: kill off pci_register_set_vga_state() symbol export. + - LP: #575853 + * PCI: fix nested spinlock hang in aer_inject + - LP: #575853 + * IPoIB: Fix TX queue lockup with mixed UD/CM traffic + - LP: #575853 + * x86/PCI: irq and pci_ids patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda_intel: ALSA HD Audio patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ALSA: hda - enable snoop for Intel Cougar Point + - LP: #575853 + * ata_piix: IDE Mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * ahci: AHCI and RAID mode SATA patch for Intel Cougar Point DeviceIDs + - LP: #575853 + * i2c-i801: Add Intel Cougar Point device IDs + - LP: #575853 + * b43: Remove reset after fatal DMA error + - LP: #575853 + * b43: Allow PIO mode to be selected at module load + - LP: #575853 + * b43: fall back gracefully to PIO mode after fatal DMA errors + - LP: #575853 + * ALSA: hda - Add position_fix quirk for Biostar mobo + - LP: #575853 + * agp/hp: fixup hp agp after ACPI changes + - LP: #575853 + * b43: Optimize PIO scratchbuffer usage + - LP: #575853 + * ecryptfs: fix use with tmpfs by removing d_drop from + ecryptfs_destroy_inode + - LP: #575853 + * eCryptfs: Decrypt symlink target for stat size + - LP: #575853 + * ecryptfs: fix error code for missing xattrs in lower fs + - LP: #575853 + * sched: Fix a race between ttwu() and migrate_task() + - LP: #575853 + * USB: cdc-acm: Update to new autopm API + - LP: #575853 + * USB: cdc-acm: Fix stupid NULL pointer in resume() + - LP: #575853 + * iwlwifi: clear all tx queues when firmware ready + - LP: #575853 + * iwlwifi: fix scan race + - LP: #575853 + * e1000e: stop cleaning when we reach tx_ring->next_to_use + - LP: #575853 + * tcp: fix ICMP-RTO war + - LP: #575853 + * perf_events, x86: Implement Intel Westmere/Nehalem-EX support + - LP: #575853 + * Input: wacom - switch mode upon system resume + - LP: #575853 + * md: deal with merge_bvec_fn in component devices better. + - LP: #575853 + * nfsd4: don't try to map gid's in generic rpc code + - LP: #575853 + * nfsd: ensure sockets are closed on error + - LP: #575853 + * ALSA: hda: Set Front Mic to input vref 50% for Lenovo 3000 Y410 + - LP: #479373, #575853 + * mac80211: fix deferred hardware scan requests + - LP: #575853 + * fs-writeback: Add helper function to start writeback if idle + - LP: #575853 + * ext4: flush delalloc blocks when space is low + - LP: #575853 + * ext4: fix async i/o writes beyond 4GB to a sparse file + - LP: #575853 + * tpm: autoload tpm_tis based on system PnP IDs + - LP: #575853 + * IB/iser: Rewrite SG handling for RDMA logic + - LP: #575853 + * mptctl : Remove printk which floods unnecessary messages to + var/log/message + - LP: #575853 + * mptspi: Fix for incorrect data underrun errata + - LP: #575853 + * sched: Use proper type in sched_getaffinity() + - LP: #575853 + * KVM: SVM: Fix memory leaks that happen when svm_create_vcpu() fails + - LP: #575853 + * KVM: Don't spam kernel log when injecting exceptions due to bad cr + writes + - LP: #575853 + * KVM: allow bit 10 to be cleared in MSR_IA32_MC4_CTL + - LP: #575853 + * KVM: VMX: Save/restore rflags.vm correctly in real mode + - LP: #575853 + * KVM: MMU: fix kvm_mmu_zap_page() and its calling path + - LP: #575853 + * KVM: fix the handling of dirty bitmaps to avoid overflows + - LP: #575853 + * KVM: Increase NR_IOBUS_DEVS limit to 200 + - LP: #575853 + * KVM: x86: Fix TSS size check for 16-bit tasks + - LP: #575853 + * x86/gart: Disable GART explicitly before initialization + - LP: #575853 + * r8169: clean up my printk uglyness + - LP: #562742, #575853 + * Linux 2.6.32.12 + - LP: #575853 + * drm/edid: allow certain bogus edids to hit a fixup path rather than + fail + - LP: #575853 + * drm/radeon: add new RS880 pci id + - LP: #575853 + * drm: remove the EDID blob stored in the EDID property when it is + disconnected + - LP: #575853 + * drm/radeon/kms: never treat rs4xx as AGP + - LP: #575853 + * drm/radeon/kms: Fix NULL pointer dereference if memory allocation + failed in a simple way + - LP: #575853 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #575853 + * drm/radeon/kms: fix pal tv-out support on legacy IGP chips + - LP: #575853 + * drm: Return ENODEV if the inode mapping changes + - LP: #575853 + * drm/edid/quirks: Envision EN2028 + - LP: #575853 + * drm/radeon: R300 AD only has one quad pipe. + - LP: #575853 + * drm/radeon/kms: fix washed out image on legacy tv dac + - LP: #575853 + * drm/radeon/kms/combios: verify dac_adj values are valid + - LP: #575853 + * drm/i915: Add no_lvds entry for the Clientron U800 + - LP: #544671, #575853 + * drm/radeon/kms: more atom parser fixes (v2) + - LP: #575853 + * drm/radeon/kms: disable the tv encoder when tv/cv is not in use + - LP: #575853 + * drm/radeon/kms: fix tv dac conflict resolver + - LP: #575853 + * drm/radeon/kms: fix rs600 tlb flush + - LP: #575853 + * drm/radeon/kms: add FireMV 2400 PCI ID. + - LP: #575853 + * Linux 2.6.32.12+drm33.3 + - LP: #575853 + * USB: EHCI: defer reclamation of siTDs + - LP: #583414 + * p54usb: Add usbid for Corega CG-WLUSB2GT. + - LP: #583414 + * md/raid5: allow for more than 2^31 chunks. + - LP: #583414 + * md/raid5: fix previous patch. + - LP: #583414 + * libata: fix locking around blk_abort_request() + - LP: #583414 + * libata: ensure NCQ error result taskfile is fully initialized before + returning it via qc->result_tf. + - LP: #583414 + * w1: w1 temp: fix negative termperature calculation + - LP: #583414 + * memcg: fix prepare migration + - LP: #583414 + * mac80211: remove bogus TX agg state assignment + - LP: #583414 + * flex_array: fix the panic when calling flex_array_alloc() without + __GFP_ZERO + - LP: #583414 + * core, x86: make LIST_POISON less deadly + - LP: #583414 + * hugetlb: fix infinite loop in get_futex_key() when backed by huge pages + - LP: #583414 + * reiserfs: fix corruption during shrinking of xattrs + - LP: #583414 + * nfsd4: bug in read_buf + - LP: #583414 + * keys: the request_key() syscall should link an existing key to the dest + keyring + - LP: #583414 + * staging: usbip: Fix deadlock + - LP: #583414 + * USB: fix remote wakeup settings during system sleep + - LP: #583414 + * USB: Add id for HP ev2210 a.k.a Sierra MC5725 miniPCI-e Cell Modem. + - LP: #511066, #583414 + * USB: fix testing the wrong variable in fs_create_by_name() + - LP: #583414 + * USB: don't choose configs with no interfaces + - LP: #583414 + * USB: OHCI: don't look at the root hub to get the number of ports + - LP: #583414 + * USB: xhci: properly set the "Mult" field of the endpoint context. + - LP: #583414 + * USB: xhci: properly set endpoint context fields for periodic eps. + - LP: #583414 + * procfs: fix tid fdinfo + - LP: #583414 + * ocfs2: Update VFS inode's id info after reflink. + - LP: #583414 + * ocfs2: potential ERR_PTR dereference on error paths + - LP: #583414 + * ocfs2: Compute metaecc for superblocks during online resize. + - LP: #583414 + * ocfs2_dlmfs: Fix math error when reading LVB. + - LP: #583414 + * powernow-k8: Fix frequency reporting + - LP: #572348, #583414 + * nfs d_revalidate() is too trigger-happy with d_drop() + - LP: #583414 + * NFS: rsize and wsize settings ignored on v4 mounts + - LP: #583414 + * Staging: hv: Fix a bug affecting IPv6 + - LP: #583414 + * Staging: hv: Fix up memory leak on HvCleanup + - LP: #583414 + * Staging: hv: name network device ethX rather than sethX + - LP: #583414 + * i2c: Fix probing of FSC hardware monitoring chips + - LP: #583414 + * perf: Fix resource leak in failure path of perf_event_open() + - LP: #583414 + * raid6: fix recovery performance regression + - LP: #583414 + * serial: 8250_pnp - add Fujitsu Wacom device + - LP: #583414 + * block: ensure jiffies wrap is handled correctly in + blk_rq_timed_out_timer + - LP: #583414 + * dm9601: fix phy/eeprom write routine + - LP: #583414 + * p54pci: fix bugs in p54p_check_tx_ring + - LP: #583414 + * edac, mce: Fix wrong mask and macro usage + - LP: #583414 + * x86-64: Clear a 64-bit FS/GS base on fork if selector is nonzero + - LP: #583414 + * x86: Disable large pages on CPUs with Atom erratum AAE44 + - LP: #583414 + * x86, k8 nb: Fix boot crash: enable k8_northbridges unconditionally on + AMD systems + - LP: #583414 + * x86, AMD: Fix stale cpuid4_info shared_map data in shared_cpu_map + cpumasks + - LP: #583414 + * ALSA: hda: Use LPIB quirk for DG965OT board version AAD63733-203 + - LP: #459083, #583414 + * ALSA: hda - Add PCI quirk for HP dv6-1110ax. + - LP: #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio XPS 1645 + - LP: #553002, #583414 + * ALSA: hda: Use STAC_DELL_M6_BOTH quirk for Dell Studio 1558 + - LP: #568600, #583414 + * ALSA: hda: Use ALC880_F1734 quirk for Fujitsu Siemens AMILO Xi 1526 + - LP: #567494, #583414 + * ALSA: snd-meastro3: Add amp_gpio quirk for Compaq EVO N600C + - LP: #583414 + * ALSA: snd-meastro3: Ignore spurious HV interrupts during suspend / + resume + - LP: #583414 + * ALSA: hda: Fix max PCM level to 0 dB for Fujitsu-Siemens laptops using + CX20549 (Venice) + - LP: #583414 + * ALSA: hda: Fix 0 dB for Packard Bell models using Conexant CX20549 + (Venice) + - LP: #541802, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite Pro T130-15F + - LP: #573284, #583414 + * ALSA: hda: Use olpc-xo-1_5 quirk for Toshiba Satellite + P500-PSPGSC-01800T + - LP: #549267, #583414 + * libata: Fix accesses at LBA28 boundary (old bug, but nasty) (v2) + - LP: #583414 + * ext4: correctly calculate number of blocks for fiemap + - LP: #474597, #583414 + * initramfs: handle unrecognised decompressor when unpacking + - LP: #583414 + * CRED: Fix a race in creds_are_invalid() in credentials debugging + - LP: #583414 + * jfs: fix diAllocExt error in resizing filesystem + - LP: #583414 + * ACPI: introduce kernel parameter acpi_sleep=sci_force_enable + - LP: #553498, #583414 + * p54pci: rx frame length check + - LP: #583414 + * drivers/net/wireless/p54/txrx.c Fix off by one error + - LP: #583414 + * dccp_probe: Fix module load dependencies between dccp and dccp_probe + - LP: #583414 + * KVM: remove unused load_segment_descriptor_to_kvm_desct + - LP: #583414 + * kgdb: don't needlessly skip PAGE_USER test for Fsl booke + - LP: #583414 + * r8169: use correct barrier between cacheable and non-cacheable memory + - LP: #562742, #583414 + * r8169: fix broken register writes + - LP: #562742, #583414 + * r8169: more broken register writes workaround + - LP: #562742, #583414 + * PCI: Ensure we re-enable devices on resume + - LP: #566149, #583414 + * skip sense logging for some ATA PASS-THROUGH cdbs + - LP: #583128, #583414 + * tg3: Fix INTx fallback when MSI fails + - LP: #583414 + * xfs: add a shrinker to background inode reclaim + - LP: #583414 + * qla2xxx: Properly handle UNDERRUN completion statuses. + - LP: #583414 + * bnx2: Fix lost MSI-X problem on 5709 NICs. + - LP: #583414 + * tracing: Fix ftrace_event_call alignment for use with gcc 4.5 + - LP: #583414 + * security: testing the wrong variable in create_by_name() + - LP: #583414 + * md: restore ability of spare drives to spin down. + - LP: #583414 + * virtio: initialize earlier + - LP: #583414 + * md/raid6: Fix raid-6 read-error correction in degraded state + - LP: #583414 + * V4L/DVB: budget: Oops: "BUG: unable to handle kernel NULL pointer + dereference" + - LP: #583414 + * ACPI: DMI init_set_sci_en_on_resume for multiple Lenovo ThinkPads + - LP: #583414 + * power_meter: acpi_device_class "power_meter_resource" too long + - LP: #583414 + * ACPI: sleep: init_set_sci_en_on_resume for Dell Studio 155x + - LP: #553498, #583414 + * cpuidle: Fix incorrect optimization + - LP: #583414 + * pxa/colibri: fix missing #include in colibri.h + - LP: #583414 + * SCSI: fix locking around blk_abort_request() + - LP: #583414 + * SCSI: libiscsi: regression: fix header digest errors + - LP: #583414 + * scsi_debug: virtual_gb ignores sector_size + - LP: #583414 + * Enable retries for SYNCRONIZE_CACHE commands to fix I/O error + - LP: #583414 + * SCSI: Retry commands with UNIT_ATTENTION sense codes to fix ext3/ext4 + I/O error + - LP: #583414 + * MIPS: Sibyte: Apply M3 workaround only on affected chip types and + versions. + - LP: #583414 + * Linux 2.6.32.13 + - LP: #583414 + * drm/i915: Add initial bits for VGA modesetting bringup on Sandybridge. + - LP: #583414 + * drm/i915: fix tiling limits for i915 class hw v2 + - LP: #583414 + * Linux 2.6.32.13+drm33.4 + - LP: #583414 + * (pre-stable) Input: psmouse - reset all types of mice before + reconnecting + - LP: #551234 + * ipv4: udp: fix short packet and bad checksum logging + - LP: #588832 + * hp_accel: fix race in device removal + - LP: #588832 + * fbdev: bfin-t350mcqb-fb: fix fbmem allocation with blanking lines + - LP: #588832 + * hugetlbfs: kill applications that use MAP_NORESERVE with SIGBUS instead + of OOM-killer + - LP: #588832 + * dma-mapping: fix dma_sync_single_range_* + - LP: #588832 + * ACPI: sleep: eliminate duplicate entries in acpisleep_dmi_table[] + - LP: #588832 + * mmc: atmel-mci: fix two parameters swapped + - LP: #588832 + * mmc: atmel-mci: prevent kernel oops while removing card + - LP: #588832 + * mmc: atmel-mci: remove data error interrupt after xfer + - LP: #588832 + * ptrace: fix return value of do_syscall_trace_enter() + - LP: #588832 + * powerpc/perf_event: Fix oops due to perf_event_do_pending call + - LP: #588832 + * cifs: guard against hardlinking directories + - LP: #588832 + * serial: imx.c: fix CTS trigger level lower to avoid lost chars + - LP: #588832 + * ALSA: ice1724 - Fix ESI Maya44 capture source control + - LP: #588832 + * ALSA: hda: Fix 0 dB for Lenovo models using Conexant CX20549 (Venice) + - LP: #588832 + * inotify: race use after free/double free in inotify inode marks + - LP: #588832 + * inotify: don't leak user struct on inotify release + - LP: #588832 + * profile: fix stats and data leakage + - LP: #588832 + * x86, k8: Fix build error when K8_NB is disabled + - LP: #588832 + * x86, cacheinfo: Turn off L3 cache index disable feature in virtualized + environments + - LP: #588832 + * x86, amd: Check X86_FEATURE_OSVW bit before accessing OSVW MSRs + - LP: #588832 + * Btrfs: check for read permission on src file in the clone ioctl + - LP: #588832 + * ALSA: hda - New Intel HDA controller + - LP: #588832 + * proc: partially revert "procfs: provide stack information for threads" + - LP: #588832 + * revert "procfs: provide stack information for threads" and its fixup + commits + - LP: #588832 + * iwlwifi: clear all the stop_queue flag after load firmware + - LP: #588832 + * p54: disable channels with incomplete calibration data sets + - LP: #588832 + * CacheFiles: Fix error handling in cachefiles_determine_cache_security() + - LP: #588832 + * megaraid_sas: fix for 32bit apps + - LP: #588832 + * mmap_min_addr check CAP_SYS_RAWIO only for write + - LP: #588832 + * nilfs2: fix sync silent failure + - LP: #588832 + * crypto: authenc - Add EINPROGRESS check + - LP: #588832 + * Linux 2.6.32.14 + - LP: #588832 + * drm/i915: use PIPE_CONTROL instruction on Ironlake and Sandy Bridge + - LP: #588832 + * drm/i915: fix non-Ironlake 965 class crashes + - LP: #588832 + * drm/i915: Disable FBC on 915GM and 945GM. + - LP: #492392, #588832 + * Linux 2.6.32.14+drm33.5 + - LP: #588832 + * Linux 2.6.32.15+drm33.5 + - LP: #588832 + * HID: remove MODULE_VERSION from new drivers + - LP: #583531 + * HID: fix N-trig touch panel with recent firmware + - LP: #583531 + * HID: ntrig: explain firmware quirk + - LP: #583531 + * HID: ntrig: Emit TOUCH with DOUBLETAP for single touch + - LP: #583531 + * HID: ntrig: TipSwitch for single touch mode touch. + - LP: #583531 + * HID: ntrig: Remove unused macro, TripleTap and QuadTap + - LP: #583531 + * (pre-stable) drm/radeon/kms: initialize set_surface_reg reg for rs600 + asic + - LP: #544590 + + [ Ubuntu: 2.6.32-22.36 ] + + * Revert "kvm: restrict writing of segment selectors to segment + registers" + - LP: #589223 + + -- Stefan Bader Sat, 12 Jun 2010 16:24:14 +0200 + +linux-ec2 (2.6.32-306.11) lucid-security; urgency=low + + [ Stefan Bader ] + + * Rebase to 2.6.32-22.35 + * [Config] EC2: Set CONFIG_BLK_DEV_DM=y to match enforcer settings + + [ Ubuntu: 2.6.32-22.35 ] + + * kvm: restrict writing of segment selectors to segment registers + - CVE-2010-0419 + * tty: release_one_tty() forgets to put pids + - CVE-2010-1162 + * oom: fix the unsafe usage of badness() in proc_oom_score() + - CVE-2010-1488 + * Attempt #2 to handle null nameidata + - CVE-2010-1148 + * reiserfs: fix permissions on .reiserfs_priv + - CVE-2010-1146 + * r8169: offical fix for CVE-2009-4537 (overlength frame DMAs) + - CVE-2009-4537 + + [ Ubuntu: 2.6.32-22.33 ] + + * SAUCE: ACPI: EC: Allow multibyte access to EC (v3) + - LP: #526354 + * ubuntu: rtl8192se -- update to version 0015.0127.2010 + - LP: #567016 + + [ Ubuntu: 2.6.32-21.32 ] + + * SAUCE: i915 KMS -- support disabling KMS for known broken devices + - LP: #563277 + * SAUCE: i915 KMS -- blacklist i830 + - LP: #542208, #563277 + * SAUCE: i915 KMS -- blacklist i845g + - LP: #541492, #563277 + * SAUCE: i915 KMS -- blacklist i855 + - LP: #511001, #541511, #563277 + * SAUCE: radeon KMS -- support disabling KMS for known broken devices + - LP: #546743 + * SAUCE: radeon KMS -- blacklist ES1000 + - LP: #546743 + + -- Stefan Bader Tue, 01 Jun 2010 12:14:05 +0200 + +linux-ec2 (2.6.32-305.9) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to Ubuntu-2.6.32-21.31 + * SAUCE: xen -- TSC is not available under XEN + + [ John Johansen ] + + * [Config] enable NETFILTER_XT_MATCH_RECENT for ec2 kernels + - LP: #532553 + + [ Ubuntu: 2.6.32-21.31 ] + + * allow modules.builtin to be optional + * d-i: add mpt2sas to the message-modules udeb + - LP: #530361 + * SAUCE: Nouveau: Add quirk framework to disable acceleration + - LP: #544088, #546393 + * SAUCE: Nouveau: Disable acceleration on MacBook Pros + - LP: #546393 + * SAUCE: Nouveau: Disable acceleration on GeForce3 cards + - LP: #544088 + * SAUCE: Nouveau: Disable acceleration on 6100 cards + - LP: #542950 + * SAUCE: dma-mapping: Remove WARN_ON in dma_free_coherent + - LP: #458201 + * SAUCE: sync before umount to reduce time taken by ext4 umount + - LP: #543617 + * tipc: Fix oops on send prior to entering networked mode (v3) + - CVE-2010-1187 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - LP: #561425 + * KVM: x86 emulator: fix memory access during x86 emulation + - LP: #561425 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - LP: #561425 + * KVM: x86 emulator: Fix popf emulation + - LP: #561425 + * KVM: Fix segment descriptor loading + - LP: #561425 + * KVM: VMX: Update instruction length on intercepted BP + - LP: #561425 + * KVM: VMX: Use macros instead of hex value on cr0 initialization + - LP: #561425 + * KVM: SVM: Reset cr0 properly on vcpu reset + - LP: #561425 + * KVM: VMX: Disable unrestricted guest when EPT disabled + - LP: #561425 + * KVM: x86: disable paravirt mmu reporting + - LP: #561425 + * AppArmor: Fix put of unassigned ns if aa_unpack fails + * AppArmor: Fix refcount bug when exec fails + - LP: #562063 + * AppArmor: Take refcount on cxt->profile to ensure it remains a valid + reference + - LP: #367499 + * AppArmor: fix typo in scrubbing environment variable warning + - LP: #562060 + * AppArmor: fix regression by setting default to mediate deleted files + - LP: #562056 + * AppArmor: fix refcount order bug that can trigger during replacement + - LP: #367499 + * AppArmor: Make sure to unmap aliases for vmalloced dfas before they are + live + - LP: #529288 + * AppArmor: address performance regression of replaced profile + - LP: #549428 + * AppArmor: make the global side the correct type + - LP: #562047 + * AppArmor: use the kernel shared workqueue to free vmalloc'ed dfas + * sky2: add register definitions for new chips + - LP: #537168 + * sky2: 88E8059 support + - LP: #537168 + * net: Fix Yukon-2 Optima TCP offload setup + - LP: #537168 + * net: Add missing TST_CFG_WRITE bits around sky2_pci_write + - LP: #537168 + * sky2: print Optima chip name + - LP: #537168 + * (Upstream) dell-laptop: defer dell_rfkill_update to worker thread + - LP: #555261 + * drm/nv40: add LVDS table quirk for Dell Latitude D620 + - LP: #539730 + + [ Ubuntu: 2.6.32-20.30 ] + + * Revert "(pre-stable) ACPI: EC: Allow multibyte access to EC" + - LP: #561151 + + [ Ubuntu: 2.6.32-20.29 ] + + * Revert "SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915" + - LP: #542251 + * add Breaks: against hardy lvm2 + - LP: #528155 + * d-i -- enable udebs for generic-pae + - LP: #160366 + * [Config] Add xen netboot support + - LP: #160366 + * (pre-stable): input: Support Clickpad devices in ClickZone mode + - LP: #516329 + * Revert "(pre-stable) Bluetooth: Fix sleeping function in RFCOMM within + invalid context" + - LP: #553837 + * Revert "(pre-stable) USB: fix usbfs regression" + - LP: #553837 + * Revert "(pre-stable) softlockup: Stop spurious softlockup messages due + to overflow" + - LP: #553837 + * Revert "(pre-stable) drm/nouveau: report unknown connector state if lid + closed" + - LP: #553837 + * drivers/scsi/ses.c: eliminate double free + - LP: #553837 + * decompress: fix new decompressor for PIC + - LP: #553837 + * ARM: Fix decompressor's kernel size estimation for ROM=y + - LP: #553837 + * MIPS: Cleanup forgotten label_module_alloc in tlbex.c + - LP: #553837 + * tg3: Fix tg3_poll_controller() passing wrong pointer to tg3_interrupt() + - LP: #553837 + * tg3: Fix 5906 transmit hangs + - LP: #553837 + * ALSA: hda - Fix input source elements of secondary ADCs on Realtek + - LP: #553837 + * ALSA: hda: enable MSI for Gateway M-6866 + - LP: #538918, #553837 + * timekeeping: Prevent oops when GENERIC_TIME=n + - LP: #553837 + * Input: alps - add support for the touchpad on Toshiba Tecra A11-11L + - LP: #553837 + * Input: i8042 - add ALDI/MEDION netbook E1222 to qurik reset table + - LP: #553837 + * i2c-i801: Don't use the block buffer for I2C block writes + - LP: #553837 + * ath5k: dont use external sleep clock in AP mode + - LP: #553837 + * ath5k: fix setup for CAB queue + - LP: #553837 + * ring-buffer: Move disabled check into preempt disable section + - LP: #553837 + * function-graph: Init curr_ret_stack with ret_stack + - LP: #553837 + * Bluetooth: Fix sleeping function in RFCOMM within invalid context + - LP: #553837 + * tracing: Use same local variable when resetting the ring buffer + - LP: #553837 + * tracing: Disable buffer switching when starting or stopping trace + - LP: #553837 + * tracing: Do not record user stack trace from NMI context + - LP: #553837 + * PCI: unconditionally clear AER uncorr status register during cleanup + - LP: #553837 + * efifb: fix framebuffer handoff + - LP: #553837 + * coredump: suppress uid comparison test if core output files are pipes + - LP: #553837 + * V4L/DVB (13961): em28xx-dvb: fix memleak in dvb_fini() + - LP: #553837 + * hrtimer: Tune hrtimer_interrupt hang logic + - LP: #553837 + * x86, apic: Don't use logical-flat mode when CPU hotplug may exceed 8 + CPUs + - LP: #553837 + * mvsas: add support for Adaptec ASC-1045/1405 SAS/SATA HBA + - LP: #553837 + * pci: add support for 82576NS serdes to existing SR-IOV quirk + - LP: #553837 + * sched: Mark boot-cpu active before smp_init() + - LP: #553837 + * sparc64: Make prom entry spinlock NMI safe. + - LP: #553837 + * sysctl: require CAP_SYS_RAWIO to set mmap_min_addr + - LP: #553837 + * e1000e: enable new 82567V-3 device + - LP: #553837 + * ixgbe: add support for 82599 KR device 0x1517 + - LP: #553837 + * ath9k: fix lockdep warning when unloading module + - LP: #553837 + * mqueue: fix mq_open() file descriptor leak on user-space processes + - LP: #553837 + * virtio: fix out of range array access + - LP: #553837 + * sched: Fix SCHED_MC regression caused by change in sched cpu_power + - LP: #553837 + * readahead: add blk_run_backing_dev + - LP: #553837 + * ALSA: hda: Use LPIB and 6stack-dig for eMachines T5212 + - LP: #538895, #553837 + * ALSA: hda - Disable MSI for Nvidia controller + - LP: #553837 + * ALSA: hda - Fix secondary ADC of ALC260 basic model + - LP: #553837 + * ALSA: hda: Fix 0 dB offset for HP laptops using CX20551 (Waikiki) + - LP: #420578, #553837 + * ALSA: cmipci: work around invalid PCM pointer + - LP: #553837 + * gigaset: correct clearing of at_state strings on RING + - LP: #553837 + * gigaset: prune use of tty_buffer_request_room + - LP: #553837 + * perf: Make the install relative to DESTDIR if specified + - LP: #553837 + * perf_event: Fix oops triggered by cpu offline/online + - LP: #553837 + * tmpfs: fix oops on mounts with mpol=default + - LP: #553837 + * tmpfs: mpol=bind:0 don't cause mount error. + - LP: #553837 + * tmpfs: handle MPOL_LOCAL mount option properly + - LP: #553837 + * tmpfs: cleanup mpol_parse_str() + - LP: #553837 + * doc: add the documentation for mpol=local + - LP: #553837 + * SCSI: scsi_transport_fc: Fix synchronization issue while deleting vport + - LP: #553837 + * NFSv4: Don't ignore the NFS_INO_REVAL_FORCED flag in + nfs_revalidate_inode() + - LP: #553837 + * NFS: Avoid a deadlock in nfs_release_page + - LP: #553837 + * NFS: Prevent another deadlock in nfs_release_page() + - LP: #553837 + * tty: Keep the default buffering to sub-page units + - LP: #553837 + * tty: Take a 256 byte padding into account when buffering below sub-page + units + - LP: #553837 + * USB: fix usbfs regression + - LP: #553837 + * USB: EHCI: fix ITD list order + - LP: #553837 + * USB: EHCI: adjust ehci_iso_stream for changes in ehci_qh + - LP: #553837 + * USB: qcserial: add new device ids + - LP: #553837 + * USB: xHCI: re-initialize cmd_completion + - LP: #553837 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #553837 + * USB: option: fix incorrect manufacturer name in usb/serial/option: + MAXON->CMOTECH + - LP: #553837 + * USB: option: move hardcoded PID to a macro in usb/serial/option + - LP: #553837 + * USB: option: add support for a new CMOTECH device to usb/serial/option + - LP: #553837 + * usb: r8a66597-hcd: fix removed from an attached hub + - LP: #553837 + * wl1251: fix potential crash + - LP: #553837 + * jme: Fix VLAN memory leak + - LP: #553837 + * jme: Protect vlgrp structure by pause RX actions. + - LP: #553837 + * edac, mce: Filter out invalid values + - LP: #553837 + * iwlwifi: use dma_alloc_coherent + - LP: #553837 + * iwlwifi: Silence tfds_in_queue message + - LP: #553837 + * SUNRPC: Fix a potential memory leak in auth_gss + - LP: #553837 + * sunrpc: handle allocation errors from __rpc_lookup_create() + - LP: #553837 + * if_tunnel.h: add missing ams/byteorder.h include + - LP: #553837 + * fs/partitions/msdos: add support for large disks + - LP: #553837 + * fs/partition/msdos: fix unusable extended partition for > 512B sector + - LP: #553837 + * PCI: fix return value from pcix_get_max_mmrbc() + - LP: #553837 + * PCI: fix access of PCI_X_CMD by pcix get and set mmrbc functions + - LP: #553837 + * PCI: cleanup error return for pcix get and set mmrbc functions + - LP: #553837 + * rt2860sta: Fix argument to linux_pci_unmap_single() + - LP: #553837 + * ath9k: fix BUG_ON triggered by PAE frames + - LP: #553837 + * cpuset: fix the problem that cpuset_mem_spread_node() returns an + offline node + - LP: #553837 + * softlockup: Stop spurious softlockup messages due to overflow + - LP: #553837 + * netfilter: xt_recent: fix regression in rules using a zero hit_count + - LP: #553837 + * x86: Fix placement of FIX_OHCI1394_BASE + - LP: #553837 + * x86, amd: Restrict usage of c1e_idle() + - LP: #553837 + * hwmon: (coretemp) Add missing newline to dev_warn() message + - LP: #553837 + * ALSA: hda: Use LPIB for ga-ma770-ud3 board + - LP: #553837 + * ALSA: ac97: Add Toshiba P500 to ac97 jack sense blacklist + - LP: #481058, #553837 + * ALSA: ac97: Add IBM ThinkPad R40e to Headphone/Line Jack Sense + blacklist + - LP: #303789, #553837 + * ALSA: hda: Use ALC260_WILL quirk for another Acer model (0x1025007f) + - LP: #418627, #553837 + * ath9k: Enable TIM timer interrupt only when needed. + - LP: #553837 + * mac80211: Retry null data frame for power save + - LP: #553837 + * ath9k: Enable IEEE80211_HW_REPORTS_TX_ACK_STATUS flag for ath9k + - LP: #553837 + * mac80211: Reset dynamic ps timer in Rx path. + - LP: #553837 + * leds-gpio: fix default state handling on OF platforms + - LP: #553837 + * quota: manage reserved space when quota is not active [v2] + - LP: #553837 + * quota: Fix warning when a delayed write happens before quota is enabled + - LP: #553837 + * ahci: use BIOS date in broken_suspend list + - LP: #553837 + * Bluetooth: Fix potential bad memory access with sysfs files + - LP: #553837 + * Bluetooth: Fix kernel crash on L2CAP stress tests + - LP: #553837 + * sh: Fix zImage boot using fixed PMB. + - LP: #553837 + * b43: Workaround circular locking in hw-tkip key update callback + - LP: #553837 + * block: Backport of various I/O topology fixes from 2.6.33 and 2.6.34 + - LP: #553837 + * s3cmci: initialize default platform data no_wprotect and no_detect with + 1 + - LP: #553837 + * x86: Fix sched_clock_cpu for systems with unsynchronized TSC + - LP: #553837 + * GFS2: Skip check for mandatory locks when unlocking + - LP: #553837 + * Linux 2.6.32.11 + - LP: #553837 + * drm/i915: fix small leak on overlay error path + - LP: #553837 + * drm/i915: Avoid NULL deref in get_pages() unwind after error. + - LP: #553837 + * drm/nouveau: report unknown connector state if lid closed + - LP: #553837 + * Linux-2.6.32.11+drm33.2 + - LP: #553837 + * mmc: add module parameter to set whether cards are assumed removable + - LP: #477106 + * (pre-stable) ACPI: EC: Allow multibyte access to EC + - LP: #526354 + * PCI quirks: disable msi on AMD rs4xx internal gfx bridges + - LP: #509273 + * drm/i915: Add dependency on the intel agp module + - LP: #542251 + * (pre-stable) drm/edid: allow certain bogus edids to hit a fixup path + rather than fail + - LP: #540632 + * drm/radeon/kms: rework pll algo selection + - LP: #538377 + * drm/radeon/kms: update new pll algo + - LP: #538377 + * PCI quirk: Disable MSI on VIA K8T890 systems + - LP: #544741 + * sched: update load count only once per cpu in 10 tick update window + - LP: #513848 + + -- Andy Whitcroft Wed, 14 Apr 2010 13:09:10 +0100 + +linux-ec2 (2.6.32-304.8) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to Ubuntu-2.6.32-19.28 + * updateconfigs after rebase to Ubuntu-2.6.32-19.28 + + [ John Johansen ] + + * [Config] fix EC2 config to remove soft lockup issue + - LP: #527208, #540378 + + [ Ubuntu: 2.6.32-19.28 ] + + * [Config] enable various multitouch devices + - LP: #541453 + * (pre-stable): input: ALPS - Add signature for HP Pavilion dm3 laptops + - LP: #545307 + * SAUCE: Disable function tracing after hitting __schedule_bug + * SAUCE: Reduce ACPI resource conflict message to KERN_INFO, printf + cleanup + - LP: #440470 + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + * SAUCE: AppArmor: Remove null_profile's use of PFLAG_NO_LIST_REF + - LP: #539437 + * SAUCE: AppArmor: Stop page allocation warnings that can occur on policy + load + - LP: #458299 + * SAUCE: AppArmor: Return string len rather than the allocation size + - LP: #551844 + * SAUCE: AppArmor: Fix oops in profile verification if profile unpack + fails. + * [Config] Enable Nouveau DRM module on powerpc + * SAUCE: Pull in thinkpad-acpi from v2.6.34-rc1 + - LP: #357673 + * [Config] Enable thinkpad-acpi ALSA volume control + - LP: #357673 + * SAUCE: drm/i915: Disable FBC on 915GM and 945GM + - LP: #492392, #539609 + * Revert "(pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, + Dell Inspiron 700m" + - LP: #515246 + * (pre-stable) softlockup: Stop spurious softlockup messages due to + overflow + - LP: #551068 + * backlight: mbp_nvidia_bl - add five more MacBook variants + - LP: #511965 + * drm/nv04-nv40: Fix up the programmed horizontal sync pulse delay. + - LP: #529130 + * drm/nouveau: Fix fbcon corruption with font width not divisible by 8 + - LP: #544739 + * (pre-stable) USB: fix usbfs regression + * drm/radeon/bo: add some fallback placements for VRAM only objects. + - LP: #507148 + * drm/radeon/kms: don't print error on -ERESTARTSYS. + - LP: #507148 + * Input: add the ABS_MT_PRESSURE event + - LP: #541453 + * HID: Support for 3M multitouch panel + - LP: #541453 + * HID: make 3M PCT touchscreen driver standalone config option + - LP: #541453 + * HID: add support for Stantum multitouch panel + - LP: #541453 + * HID: make Stantum driver standalone config option + - LP: #541453 + * HID: add support for Acer T230H multitouch + - LP: #541453 + * HID: add support for Pixart Imaging Optical Touch Screen + - LP: #541453 + * HID: fixed bug in single-touch emulation on the stantum panel + - LP: #541453 + * HID: add pressure support for the Stantum multitouch panel + - LP: #541453 + * HID: Support for MosArt multitouch panel + - LP: #541453 + * HID: hid-ntrig add multi input quirk and clean up + - LP: #541453 + * HID: n-trig: remove unnecessary tool switching + - LP: #541453 + * HID: hid-ntrig: multitouch cleanup and fix + - LP: #541453 + * HID: hid-ntrig: Single touch mode tap + - LP: #541453 + * hid: ntrig touch events + - LP: #541453 + * (pre-stable) x86-32, resume: do a global tlb flush in S4 resume + - LP: #531309 + * drm/i915: Part of: Add initial bits for VGA modesetting bringup on + Sandybridge. + - LP: #515246 + * drm/i915: Stop trying to use ACPI lid status to determine LVDS + connection. + - LP: #515246 + + [ Ubuntu: 2.6.32-18.27 ] + + * SAUCE: Don't register vga16fb framebuffer if other framebuffers are + present + - LP: #527369 + * [Config] armel/versatile: Set CRAMFS=m + - LP: #524893 + * [Config] armel: Reset default command-line + - LP: #524893 + * build/modules: Update d-i to reflect recent config changes + - LP: #546929 + * (pre-stable) drm/nouveau: report unknown connector state if lid closed + - LP: #523072 + * (pre-stable) Staging: rt2870: Add USB ID for Buffalo Airstation + WLI-UC-GN + - LP: #441990 + * (pre-stable) iwlwifi: fix nfreed-- + - LP: #545585 + * (pre-stable) pata_via: Add VIA VX900 support + - LP: #548675 + + [ Ubuntu: 2.6.32-17.26 ] + + * [Config] SECURITY_FILE_CAPABILITIES dissapeared in 2.6.33 + * rules -- allow architecture configurations to be missing + * SAUCE: cdrom -- default to not locking the tray when in use + - LP: #397734 + * expose the kernel EXTRAVERSION in dmesg and /proc/version_signature + * record the drm version in EXTRAVERSION + * linux-tools -- pull out the perf binary into a binary package + * [Config] enable MMIOTRACE for graphics debugging + * [Config] enable BLK_DEV_BSG + * debian -- fix builds when tools are disabled + * allow us to build default configs for automated builds + * config -- allow locally specified configuration overrides + * [Config] de-modularise PATA disk controllers + * [Config] de-modularise SATA disk controllers + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow" + - LP: #540231 + * Revert "SAUCE: (pre-stable) netfilter: xt_recent: fix false match" + - LP: #540231 + * [Config] Update configs for 2.6.32.10 + - LP: #540231 + * [Config] Add vmw_pvscsi and vmxnet3 to -virtual flavour + - LP: #531017 + * SAUCE: igb: Supress an upstream compiler complaint + * [Config] Fix sub-flavours package conflicts + - LP: #454827 + * Revert "tpm_tis: TPM_STS_DATA_EXPECT workaround" + - LP: #540231 + * Revert "(pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue()" + - LP: #540231 + * (pre-stable) Bluetooth: Fix sleeping function in RFCOMM within invalid + context + - LP: #534549 + * igb: remove unused temp variable from stats clearing path + * igb: update comments for serdes config and update to handle duplex + * igb: update the approach taken to acquiring and releasing the phy lock + * igb: add locking to reads of the i2c interface + * igb: add combined function for setting rar and pool bits + * igb: make use of the uta to allow for promiscous mode filter + * igb: add support for 82576NS SerDes adapter + * igb: add function to handle mailbox lock + * igb: fix a few items where weren't correctly setup for mbx timeout + * igb: change how we handle alternate mac addresses + * igb: remove microwire support from igb + * igb: move the generic copper link setup code into e1000_phy.c + * igb: add code to retry a phy read in the event of failure on link check + * igb: add additional error handling to the phy code + * igb: add flushes between RAR writes when setting mac address + * igb: Use the instance of net_device_stats from net_device. + * igb: Fix erroneous display of stats by ethtool -S + * igb: add new data structure for handling interrupts and NAPI + * igb: remove rx checksum good counter + * igb: increase minimum rx buffer size to 1K + * igb: move the tx and rx ring specific config into seperate functions + * igb: remove rx_ps_hdr_len + * igb: move SRRCTL register configuration into ring specific config + * igb: change the head and tail offsets into pointers + * igb: add pci device pointer to ring structure + * igb: move rx_buffer_len into the ring structure + * igb: move alloc_failed and csum_err stats into per rx-ring stat + * igb: add a flags value to the ring + * igb: place a pointer to the netdev struct in the ring itself + * igb: move the multiple receive queue configuration into seperate + function + * igb: delay VF reset notification until after interrupts are enabed + * igb: setup vlan tag replication stripping in igb_vmm_control + * igb: re-use ring configuration code in ethtool testing + * igb: make tx ring map and free functionality non-static + * igb: make ethtool use core xmit map and free functionality + * igb: add single vector msi-x testing to interrupt test + * igb: cleanup "todo" code found in igb_ethtool.c + * igb: add support for seperate tx-usecs setting in ethtool + * igb: cleanup some of the code related to hw timestamping + * igb: misc cleanups within igb_ethtool.c + * igb: use packet buffer sizes from RXPBS register + * igb: replace the VF clear_to_send with a flags value + * igb: rework use of VMOLR in regards to PF and VFs + * igb: rework handling of the vfta and vlvf registers in relation to + mng_vlan + * igb: move vf init into a seperate function + * igb: only process global stats in igb_update_stats + * igb: move global_quad_port_a from global into local static define + * igb: make tx hang check multiqueue, check eop descriptor + * igb: cleanup code related to ring resource allocation and free + * igb: change queue ordering for 82576 based adapters + * igb: cleanup interrupt enablement in regards to msix_other + * igb: Remove invalid stats counters + * igb: cleanup igb.h header whitespace and some structure formatting + * igb: cleanup igb xmit frame path + * igb: cleanup clean_rx_irq_adv and alloc_rx_buffers_adv + * igb: replace unecessary &adapter->hw with just hw where applicable + * igb: add pci_dev in few spots to clean up use of dev_err/info/warn + * igb: limit minimum mtu to 68 to keep ip bound to interface + * igb: open up SCTP checksum offloads to all MACs 82576 and newer + * igb: cleanup whitespace issues in igb_main.c + * igb: Fix warnings in igb_set_ringparam() + * igb: change type for ring sizes to u16 in igb_set_ring_param + * igb: move timesync init into a seperate function + * igb: when number of CPUs > 4 combine tx/rx queues to allow more queues + * igb: Rework how netdev->stats is handled + * igb: removed unused tx/rx total bytes/packets from adapter struct + * igb: check for packets on all tx rings when link is down + * igb: only recycle page if it is on our numa node + * igb: add support for the 82580 phy + * igb: add support for 82580 MAC + * igb: Add full support for 82580 devices + * igb: remove use of skb_dma_map from driver + * igb: fix handling of mailbox collisions between PF/VF + * igb: do not force pcs link when in KX mode + * igb: do not force retry count to 1 on 82580 phy + * igb: correctly offset 82575 flow control watermarks by 16 bytes + * igb: check both function bits in status register in wol exception + * igb: make certain to reassign legacy interrupt vectors after reset + * igb/igbvf: cleanup exception handling in tx_map_adv + * fix LOOKUP_FOLLOW on automount "symlinks" + - LP: #540231 + * ARM: 5944/1: scsi: fix timer setup in fas216.c + - LP: #540231 + * V4L/DVB: dvb: l64781.ko broken with gcc 4.5 + - LP: #540231 + * bfin: fix max timeout calculation + - LP: #540231 + * V4L/DVB: Video : pwc : Fix regression in pwc_set_shutter_speed caused + by bad constant => sizeof conversion. + - LP: #540231 + * V4L/DVB: bttv: Move I2C IR initialization + - LP: #540231 + * V4L/DVB: cxusb: Select all required frontend and tuner modules + - LP: #540231 + * memcg: fix oom killing a child process in an other cgroup + - LP: #540231 + * fs/exec.c: fix initial stack reservation + - LP: #540231 + * iwlwifi: error checking for number of tfds in queue + - LP: #540231 + * iwlwifi: set HT flags after channel in rxon + - LP: #540231 + * iwlwifi: sanity check before counting number of tfds can be free + - LP: #540231 + * netlabel: fix export of SELinux categories > 127 + - LP: #540231 + * ahci: disable FPDMA auto-activate optimization on NVIDIA AHCI + - LP: #540231 + * PCI hotplug: ibmphp: read the length of ebda and map entire ebda region + - LP: #540231 + * PCI hotplug: check ioremap() return value in ibmphp_ebda.c + - LP: #540231 + * ACPI: remove Asus P2B-DS from acpi=ht blacklist + - LP: #540231 + * ACPI: fix "acpi=ht" boot option + - LP: #540231 + * thinkpad-acpi: wrong thermal attribute_group removed in thermal_exit() + - LP: #540231 + * ACPI: Be in TS_POLLING state during mwait based C-state entry + - LP: #540231 + * mpt2sas: Delete volume before HBA detach. + - LP: #540231 + * slab: initialize unused alien cache entry as NULL at + alloc_alien_cache(). + - LP: #540231 + * mac80211: quit addba_resp_timer if Tx BA session is torn down + - LP: #540231 + * V4L/DVB (13991): gspca_mr973010a: Fix cif type 1 cameras not streaming + on UHCI controllers + - LP: #540231 + * vfs: take f_lock on modifying f_mode after open time + - LP: #540231 + * readahead: introduce FMODE_RANDOM for POSIX_FADV_RANDOM + - LP: #540231 + * HID: remove TENX iBuddy from blacklist + - LP: #540231 + * HID: add multi-input quirk for NextWindow Touchscreen. + - LP: #540231 + * HID: usbhid: introduce timeout for stuck ctrl/out URBs + - LP: #540231 + * airo: fix setting zero length WEP key + - LP: #540231 + * idr: fix a critical misallocation bug, take#2 + - LP: #540231 + * Switch proc/self to nd_set_link() + - LP: #540231 + * sparc: Align clone and signal stacks to 16 bytes. + - LP: #540231 + * sparc32: Fix page_to_phys(). + - LP: #540231 + * sparc32: Fix struct stat uid/gid types. + - LP: #540231 + * sparc: leds_resource.end assigned to itself in clock_board_probe() + - LP: #540231 + * sparc64: Fix sun4u execute bit check in TSB I-TLB load. + - LP: #540231 + * net: Fix sysctl restarts... + - LP: #540231 + * net-sysfs: Use rtnl_trylock in wireless sysfs methods. + - LP: #540231 + * net: bug fix for vlan + gro issue + - LP: #540231 + * inet: Remove bogus IGMPv3 report handling + - LP: #540231 + * ipv6: conntrack: Add member of user to nf_ct_frag6_queue structure + - LP: #540231 + * drivers/net: ks8851_mll ethernet network driver + - LP: #540231 + * sky2: fix transmit DMA map leakage + - LP: #540231 + * SCSI: qla2xxx: Obtain proper host structure during response-queue + processing. + - LP: #540231 + * rtc-core: fix memory leak + - LP: #540231 + * offb: Add support for framebuffer handoff to offb. + - LP: #540231 + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #540231 + * rndis_wlan: handle NL80211_AUTHTYPE_AUTOMATIC + - LP: #540231 + * rndis_wlan: fix buffer overflow in rndis_query_oid + - LP: #540231 + * rndis_wlan: disable stall workaround + - LP: #540231 + * net/via-rhine: Fix scheduling while atomic bugs + - LP: #540231 + * clocksource: Fix up a registration/IRQ race in the sh drivers. + - LP: #540231 + * SCSI: qla1280: Drop host_lock while requesting firmware + - LP: #540231 + * Staging: hv: add a pci device table + - LP: #540231 + * Staging: hv: match on DMI values to know if we should run. + - LP: #540231 + * Staging: mimio: remove the mimio driver + - LP: #540231 + * dvb-core: Fix DoS bug in ULE decapsulation code that can be triggered + by an invalid Payload Pointer + - LP: #540231 + * V4L/DVB (13148): uvcvideo: Handle V4L2_CTRL_TYPE_BUTTON control type in + VIDIOC_QUERYCTRL + - LP: #540231 + * PM / Hibernate: Fix preallocating of memory + - LP: #540231 + * macintosh/therm_adt746x: Fix sysfs attributes lifetime + - LP: #540231 + * macintosh/hwmon/ams: Fix device removal sequence + - LP: #540231 + * oprofile/x86: fix perfctr nmi reservation for mulitplexing + - LP: #540231 + * oprofile: remove tracing build dependency + - LP: #540231 + * oprofile/x86: remove node check in AMD IBS initialization + - LP: #540231 + * oprofile/x86: use kzalloc() instead of kmalloc() + - LP: #540231 + * oprofile/x86: fix msr access to reserved counters + - LP: #540231 + * ALSA: hda: Use 3stack quirk for Toshiba Satellite L40-10Q + - LP: #524948, #540231 + * ALSA: via82xx: add quirk for D1289 motherboard + - LP: #540231 + * ALSA: pcm core - fix fifo_size channels interval check + - LP: #540231 + * ALSA: USB MIDI support for Access Music VirusTI + - LP: #540231 + * ALSA: hda: Use LPIB for Dell Latitude 131L + - LP: #530346, #540231 + * ALSA: hda: Use LPIB for a Biostar Microtech board + - LP: #523953, #540231 + * ALSA: hda - Add a position_fix quirk for MSI Wind U115 + - LP: #540231 + * ALSA: hda - Add position_fix quirk for HP dv3 + - LP: #540231 + * ALSA: hda-intel: Add position_fix quirk for ASUS M2V-MX SE. + - LP: #540231 + * ASoC: fix ak4104 register array access + - LP: #540231 + * driver-core: fix race condition in get_device_parent() + - LP: #540231 + * Driver-Core: devtmpfs - reset inode permissions before unlinking + - LP: #540231 + * tty: Fix the ldisc hangup race + - LP: #540231 + * serial: imx: fix NULL dereference Oops when pdata == NULL + - LP: #540231 + * USB: serial: sierra driver indat_callback fix + - LP: #511157, #540231 + * USB: SIS USB2VGA DRIVER: support KAIREN's USB VGA adaptor + USB20SVGA-MB-PLUS + - LP: #540231 + * USB: fix I2C API usage in ohci-pnx4008. + - LP: #540231 + * p54usb: Add the USB ID for Belkin (Accton) FD7050E ver 1010ec + - LP: #540231 + * p54pci: handle dma mapping errors + - LP: #540231 + * gpiolib: Actually set output state in wm831x_gpio_direction_output() + - LP: #540231 + * hwmon: (tmp421) Fix temperature conversions + - LP: #540231 + * hwmon: (tmp421) Restore missing inputs + - LP: #540231 + * pata_hpt3x2n: always stretch UltraDMA timing + - LP: #540231 + * scm: Only support SCM_RIGHTS on unix domain sockets. + - LP: #540231 + * ath9k: fix beacon timer restart after a card reset + - LP: #540231 + * ath9k: fix rate control fallback rate selection + - LP: #540231 + * ath9k: disable RIFS search for AR91xx based chips + - LP: #540231 + * ath5k: use correct packet type when transmitting + - LP: #540231 + * b43/b43legacy: Wake queues in wireless_core_start + - LP: #540231 + * netfilter: xt_recent: fix buffer overflow + - LP: #540231 + * netfilter: xt_recent: fix false match + - LP: #540231 + * sunxvr500: Additional PCI id for sunxvr500 driver + - LP: #540231 + * thinkpad-acpi: fix poll thread auto-start + - LP: #540231 + * thinkpad-acpi: R52 brightness_mode has been confirmed + - LP: #540231 + * thinkpad-acpi: document HKEY event 3006 + - LP: #540231 + * thinkpad-acpi: make driver events work in NVRAM poll mode + - LP: #540231 + * thinkpad-acpi: fix bluetooth/wwan resume + - LP: #540231 + * ocfs2: Only bug out in direct io write for reflinked extent. + - LP: #540231 + * x86, ia32_aout: do not kill argument mapping + - LP: #540231 + * x86: Add iMac9,1 to pci_reboot_dmi_table + - LP: #540231 + * x86, xen: Disable highmem PTE allocation even when CONFIG_HIGHPTE=y + - LP: #540231 + * x86: Avoid race condition in pci_enable_msix() + - LP: #540231 + * x86: Fix SCI on IOAPIC != 0 + - LP: #540231 + * USB: xhci: Fix finding extended capabilities registers + - LP: #540231 + * USB: fix the idProduct value for USB-3.0 root hubs + - LP: #540231 + * USB: fix crash in uhci_scan_schedule + - LP: #540231 + * USB: remove debugging message for uevent constructions + - LP: #540231 + * USB: Move hcd free_dev call into usb_disconnect to fix oops + - LP: #540231 + * USB: ftdi_sio: isolate all device IDs to new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: sort PID/VID entries in new ftdi_sio_ids.h header + - LP: #540231 + * USB: ftdi_sio: new device id for papouch AD4USB + - LP: #540231 + * USB: ftdi_sio: add device IDs (several ELV, one Mindstorms NXT) + - LP: #540231 + * USB: add new ftdi_sio device ids + - LP: #540231 + * USB: serial: ftdi: add CONTEC vendor and product id + - LP: #540231 + * USB: cp210x: Add 81E8 (Zephyr Bioharness) + - LP: #540231 + * USB: unusual_devs: Add support for multiple Option 3G sticks + - LP: #540231 + * sunrpc: remove unnecessary svc_xprt_put + - LP: #540231 + * SUNRPC: Handle EINVAL error returns from the TCP connect operation + - LP: #540231 + * s3cmci: s3cmci_card_present: Use no_detect to decide whether there is a + card detect pin + - LP: #540231 + * rtc-coh901331: fix braces in resume code + - LP: #540231 + * NFS: Fix an allocation-under-spinlock bug + - LP: #540231 + * dm: free dm_io before bio_endio not after + - LP: #540231 + * KVM: x86 emulator: Add group8 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Forbid modifying CS segment register by mov + instruction + - LP: #540231 + * KVM: x86 emulator: Add group9 instruction decoding + - LP: #540231 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - LP: #540231 + * sched: Fix sched_mv_power_savings for !SMT + - LP: #540231 + * sched: Fix SMT scheduler regression in find_busiest_queue() + - LP: #540231 + * sched: Don't use possibly stale sched_class + - LP: #540231 + * x86, mm: Allow highmem user page tables to be disabled at boot time + - LP: #540231 + * Linux 2.6.32.10 + - LP: #540231 + * drm/i915: give up on 8xx lid status + - LP: #540231 + * drm/i915: Use a dmi quirk to skip a broken SDVO TV output. + - LP: #540231 + * drm/ttm: handle OOM in ttm_tt_swapout + - LP: #540231 + * drm/radeon/kms/atom: fix shr/shl ops + - LP: #540231 + * Linux 2.6.32.10+drm33.1 + - LP: #540231 + + -- Andy Whitcroft Wed, 31 Mar 2010 20:09:01 +0100 + +linux-ec2 (2.6.32-303.7) lucid; urgency=low + + [ Andy Whitcroft ] + + * sync with master abstraction cleanup + * rebase to Ubuntu-2.6.32-12.17 + * [Config] fix MMAP_MIN_ADDR/DEV_KMEM/USB_DEVICEFS + * rebase to Ubuntu-2.6.32-15.22 + * [Config] update configs following rebase to Ubuntu-2.6.32-15.22 + * SAUCE: XEN -- drop references to TIF_ABI_PENDING + * [Config] updateconfigs following rebase to Ubuntu-2.6.32-15.22 + * rename the debug packages to match archive standard + - LP: #527837 + * [Config] cpu_debug module is no longer built + * updateconfigs following rebase to Ubuntu-2.6.32-16.24 + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * update to standards version 3.8.4.0 + * linux-tools -- disable linux-tools generation + * rebase to Ubuntu-2.6.32-16.25 + * d-i -- do not generate any udebs + * disable linux-libc-dev for ec2 + + [ John Johansen ] + + * rebase to Ubuntu-2.6.32-16.24 + + [ Upstream Kernel Changes ] + + * Linux 2.6.32.4 + + [ Ubuntu: 2.6.32-16.25 ] + + * linux-tools -- move to Suggests: with explicit seeding + - LP: #534635 + * [Config] CONFIG_HID=m + * (pre-stable) sched: Fix SMT scheduler regression in + find_busiest_queue() + * KVM: introduce kvm_vcpu_on_spin + * KVM: VMX: Add support for Pause-Loop Exiting + + [ Ubuntu: 2.6.32-16.24 ] + + * armel -- perf userspace does not support arm + * ia64 -- libelf-dev/binutils-dev to not provide necessary libraries + + [ Ubuntu: 2.6.32-16.23 ] + + * SAUCE: PM report driver and device suspend/resume times -- move config + * update to standards version 3.8.4.0 + * printenv -- expose all of the package selectors + * source package -- cleanup source content control + * doc package -- ensure we do build package content on buildd + * lintian -- correct the address in the debian/copyright + * lintian -- update debhelper package version dependancy + * lintian -- fix ghostscript dependancy + * lintian -- add required misc:Depends + * lintian -- move our debhelper compat level to debian/compat + * perf -- build the kernel carried tools + * perf -- add linux-tools carrying the version switches and manuals + * SAUCE: fix up Kconfig for staging drivers + * [Config] enable NOUVEAU etc following drm backport + * update DRM to mainline v2.6.33 + * [Config] Remove AppArmor config options that no longer exist (ports) + * [Config] updateportsconfigs following drm update + * ubuntu: AppArmor -- update to mainline 2010-03-04 + * SAUCE: AppArmor: Reintroduce AppArmor 2.4 compatibility + * SAUCE: AppArmor: replace strim with strstrip for 2.6.32 kernels + * [Config] Remove AppArmor config options that no longer exist + * ubuntu: rtl8192se -- version 2010-0115,0014 + - LP: #530275 + * [Config] added CONFIG_RTL8192SE module. + - LP: #530275 + * [Config] Added vmw_pvscsi to d-i/scsi-modules + - LP: #531017 + * [Upstream] netfilter: xt_recent: Add an entry reaper + * Revert "KVM: x86 emulator: Check CPL level during privilege instruction + emulation" + * Revert "KVM: x86 emulator: Fix popf emulation" + * Revert "KVM: x86 emulator: Check IOPL level during io instruction + emulation" + * Revert "KVM: x86 emulator: Add Virtual-8086 mode of emulation" + * Revert "KVM: fix memory access during x86 emulation." + * Add vlan (8021.Q) module package for d-i. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + * [Upstream] docbook: need xmldoclinks for all doc types + * x86: set_personality_ia32() misses force_personality32 + * lib: Introduce generic list_sort function + * drm/nv50: Implement ctxprog/state generation. + * drm/nv50: Remove redundant/incorrect ctxvals initialisation. + * (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell + Inspiron 700m + - LP: #515246 + + [ Ubuntu: 2.6.32-15.22 ] + + * Revert "[Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT" + * Revert "SAUCE: PM report driver and device suspend/resume times." + * [Config] set CONFIG_SR_REPORT_TIME_LIMIT + * SAUCE: PM report driver and device suspend/resume times. + + [ Ubuntu: 2.6.32-15.21 ] + + * Revert "(pre-stable) drm/i915: Increase fb alignment to 64k" + * Revert "[Config] lenovo-sl-laptop -- enable" + * Revert "ubuntu: lenovo-sl-laptop -- git tip (b19a08f81f)" + * armel -- cramfs module will no longer be built + * d-i -- make all modules optional + * rename the debug packages to match archive standard + - LP: #527837 + * lenovo-sl-laptop is no longer built + * Disable 4MB page tables for Atom, work around errata AAE44 + - LP: #523112 + * ubuntu: dm-raid4-5: Depend on XOR_BLOCKS + * ubuntu: fsam7400: Depend on CHECK_SIGNATURE + * SAUCE: drm/i915: don't change DRM configuration when releasing load + detect pipe + - LP: #488328 + * [Config] armel Update versatile initrd configs + - LP: #524893 + * SAUCE: [um] Don't use nx_enabled under UML + - LP: #524849 + * [Config] added new config option CONFIG_SR_REPORT_TIME_LIMIT + * SAUCE: v3 - Add Dell Business Class Netbook LED driver + * SAUCE: PM report driver and device suspend/resume times. + * Revert "[Upstream] e1000e: enhance frame fragment detection" + - CVE-2009-4538 + * Revert "[Upstream] e1000: enhance frame fragment detection" + - CVE-2009-4536 + * [Config] Enabled CONFIG_LEDS_DELL_NETBOOKS=m + * SAUCE: (pre-stable) netfilter: xt_recent: fix buffer overflow + * SAUCE: (pre-stable) netfilter: xt_recent: fix false match + * Revert "(pre-stable) eCryptfs: Add getattr function" + * Fix potential crash with sys_move_pages + * futex_lock_pi() key refcnt fix + * futex: Handle user space corruption gracefully + * futex: Handle futex value corruption gracefully + * Fix race in tty_fasync() properly + * hwmon: (w83781d) Request I/O ports individually for probing + * hwmon: (lm78) Request I/O ports individually for probing + * hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT + * ALSA: ctxfi - fix PTP address initialization + * drm/i915: disable hotplug detect before Ironlake CRT detect + * drm/i915: enable self-refresh on 965 + * drm/i915: Disable SR when more than one pipe is enabled + * drm/i915: Fix DDC on some systems by clearing BIOS GMBUS setup. + * drm/i915: Add HP nx9020/SamsungSX20S to ACPI LID quirk list + * drm/i915: Fix the incorrect DMI string for Samsung SX20S laptop + * drm/i915: Add MALATA PC-81005 to ACPI LID quirk list + * usb: r8a66597-hcd: Flush the D-cache for the pipe-in transfer buffers. + * i2c-tiny-usb: Fix on big-endian systems + * drm/i915: handle FBC and self-refresh better + * drm/i915: Increase fb alignment to 64k + * drm/i915: Update write_domains on active list after flush. + * regulator: Fix display of null constraints for regulators + * ALSA: hda-intel: Avoid divide by zero crash + * CPUFREQ: Fix use after free of struct powernow_k8_data + * freeze_bdev: don't deactivate successfully frozen MS_RDONLY sb + * cciss: Make cciss_seq_show handle holes in the h->drv[] array + * ioat: fix infinite timeout checking in ioat2_quiesce + * resource: add helpers for fetching rlimits + * fs/exec.c: restrict initial stack space expansion to rlimit + * cifs: fix length calculation for converted unicode readdir names + * NFS: Fix a reference leak in nfs_wb_cancel_page() + * NFS: Try to commit unstable writes in nfs_release_page() + * NFSv4: Don't allow posix locking against servers that don't support it + * NFSv4: Ensure that the NFSv4 locking can recover from stateid errors + * NFS: Fix an Oops when truncating a file + * NFS: Fix a umount race + * NFS: Fix a bug in nfs_fscache_release_page() + * NFS: Fix the mapping of the NFSERR_SERVERFAULT error + * md: fix 'degraded' calculation when starting a reshape. + * V4L/DVB: dvb-core: fix initialization of feeds list in demux filter + * Export the symbol of getboottime and mmonotonic_to_bootbased + * kvmclock: count total_sleep_time when updating guest clock + * KVM: PIT: control word is write-only + * tpm_infineon: fix suspend/resume handler for pnp_driver + * amd64_edac: Do not falsely trigger kerneloops + * netfilter: nf_conntrack: fix memory corruption with multiple namespaces + * netfilter: nf_conntrack: per netns nf_conntrack_cachep + * netfilter: nf_conntrack: restrict runtime expect hashsize modifications + * netfilter: xtables: compat out of scope fix + * netfilter: nf_conntrack: fix hash resizing with namespaces + * drm/i915: remove full registers dump debug + * drm/i915: add i915_lp_ring_sync helper + * drm/i915: Don't wait interruptible for possible plane buffer flush + * dasd: remove strings from s390dbf + * crypto: padlock-sha - Add import/export support + * wmi: Free the allocated acpi objects through wmi_get_event_data + * dell-wmi, hp-wmi, msi-wmi: check wmi_get_event_data() return value + * /dev/mem: introduce size_inside_page() + * devmem: check vmalloc address on kmem read/write + * devmem: fix kmem write bug on memory holes + * SCSI: mptfusion : mptscsih_abort return value should be SUCCESS instead + of value 0. + * sh: Couple kernel and user write page perm bits for CONFIG_X2TLB + * ALSA: hda - use WARN_ON_ONCE() for zero-division detection + * dst: call cond_resched() in dst_gc_task() + * ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support + * befs: fix leak + * rtc-fm3130: add missing braces + * Call flush_dcache_page after PIO data transfers in libata-sff.c + * ahci: add Acer G725 to broken suspend list + * pktgen: Fix freezing problem + * x86/amd-iommu: Fix IOMMU-API initialization for iommu=pt + * x86/amd-iommu: Fix deassignment of a device from the pt_domain + * x86: Re-get cfg_new in case reuse/move irq_desc + * Staging: fix rtl8187se compilation errors with mac80211 + * ALSA: usb-audio - Avoid Oops after disconnect + * serial: 8250: add serial transmitter fully empty test + * sysfs: sysfs_sd_setattr set iattrs unconditionally + * class: Free the class private data in class_release + * USB: usbfs: only copy the actual data received + * USB: usbfs: properly clean up the as structure on error paths + * rtl8187: Add new device ID + * ACPI: Add NULL pointer check in acpi_bus_start + * ACPI: fix High cpu temperature with 2.6.32 + * drm/radeon/kms: use udelay for short delays + * NFS: Too many GETATTR and ACCESS calls after direct I/O + * eCryptfs: Add getattr function + * b43: Fix throughput regression + * ath9k: Fix sequence numbers for PAE frames + * mac80211: Fix probe request filtering in IBSS mode + * iwlwifi: Fix to set correct ht configuration + * dm stripe: avoid divide by zero with invalid stripe count + * dm log: userspace fix overhead_size calcuations + * Linux 2.6.32.9 + * sfc: Fix SFE4002 initialisation + * sfc: Fix sign of efx_mcdi_poll_reboot() error in efx_mcdi_poll() + * sfc: SFE4002/SFN4112F: Widen temperature and voltage tolerances + * (pre-stable) HID: handle joysticks with large number of buttons + - LP: #492056 + * (pre-stable) HID: extend mask for BUTTON usage page + - LP: #492056 + * PM: Measure device suspend and resume times + * e1000: enhance frame fragment detection + - CVE-2009-4536 + * e1000e: enhance frame fragment detection + - CVE-2009-4538 + * KVM: fix memory access during x86 emulation. + - CVE-2010-0306 + * KVM: x86 emulator: Add Virtual-8086 mode of emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check IOPL level during io instruction emulation + - CVE-2010-0306 + * KVM: x86 emulator: Fix popf emulation + - CVE-2010-0306 + * KVM: x86 emulator: Check CPL level during privilege instruction + emulation + - CVE-2010-0306 + * Input: wacom - ensure the device is initialized properly upon resume + * Input: wacom - add defines for packet lengths of various devices + * Input: wacom - add support for new LCD tablets + - LP: #516777 + + [ Ubuntu: 2.6.32-14.20 ] + + * rebuild following the GCC update to match compiler for out of tree modules + * Revert "[Config] drbd -- enable" + * Revert "ubuntu: drbd -- version 8.3.1" + * SAUCE: khubd -- switch USB product/manufacturer/serial handling to RCU + - LP: #510937 + + [ Ubuntu: 2.6.32-14.19 ] + + * ensure we build the source package contents when enabled + - LP: #522308 + * [Config] enable CONFIG_X86_MCE_XEON75XX + * SAUCE: AppArmor -- add linux/kref.h for struct kref + * [Config] enable CONFIG_HID_ORTEK + * enable udeb generation for arm versatile flavour + - LP: #522515 + * ubuntu: AppArmor -- update to mainline 2010-02-18 + - LP: #439560, #496110, #507069 + * SAUCE: HID: add support for Ortek WKB-2000 + - LP: #405390 + * tpm_tis: TPM_STS_DATA_EXPECT workaround + - LP: #490487 + * x86, mce: Xeon75xx specific interface to get corrected memory error + information + * x86, mce: Rename cpu_specific_poll to mce_cpu_specific_poll + * x86, mce: Make xeon75xx memory driver dependent on PCI + * drm/edid: Unify detailed block parsing between base and extension + blocks + - LP: #500999 + * (pre-stable) eCryptfs: Add getattr function + - LP: #390833 + + [ Ubuntu: 2.6.32-13.18 ] + + * Revert "enforcer -- make the enforcement configuration common" + * Revert "(pre-stable) Input: ALPS - add interleaved protocol support + (Dell E6x00 series)" + * Revert "(pre-stable) driver-core: fix devtmpfs crash on s390" + * Revert "(pre-stable) Driver-Core: devtmpfs - set root directory mode to + 0755" + * Revert "SAUCE: Adds support for COMPAL JHL90 webcam" + * Revert "SAUCE: fix kernel oops in VirtualBox during paravirt patching" + * Revert "SAUCE: make fc transport removal of target configurable" + * enforcer -- make the enforcement configuration common + * getabis -- add preempt flavour to the list + * [Config] enforce DEVTMPFS options + * [Config] armel -- cleanup to-be builtin modules + * [Config] cleanup ports configs + * [Config] enable CRYPTO_GHASH_CLMUL_NI_INTEL + - LP: #485536 + * add printdebian target to find branch target + * distclean -- do not remove debian.env + * [Config] generic-pae switch to M586TSC + - LP: #519448 + * git-ubuntu-log -- commonise duplicated log handling + * git-ubuntu-log -- tighten up Bug: NNNN matching + * git-ubuntu-log -- sort the bug numbers + * (pre-stable) drm/i915: Increase fb alignment to 64k + - LP: #404064 + * arm -- enable ubuntu/ directory + * SAUCE: crypto: ghash - Add PCLMULQDQ accelerated implementation + * SAUCE: crypto: ghash-intel - Fix building failure on x86_32 + * [Config] cleanup preempt configuration + * [Config] versatile: Fix video output + - LP: #517594 + * [Config] armel DEFAULT_MMAP_MIN_ADDR=32768 + * [Config] Large update to armel/versatile + * [Config] versatile: Add RTC support + * [Config] armel: Enable NEON + * [Config] versatile: Builtin MMC support + * [Config] versatile Builtin SCSI controller + * [Config] armel Disable dma_cache_sync callers + * [Config] armel Disable asm/time.h users + * [Config] armel Disable out of range udelay() + * [Config] armel Disable flush_cache_range() users + * [Config] armel -- Enable ubuntu/ drivers + * SAUCE: drm/i915: Add display hotplug event on Ironlake + * SAUCE: drm/i915: Add ACPI OpRegion support for Ironlake + * Revert "[Upstream]: oprofile/x86: add Xeon 7500 series support" + * Revert "Revert "[Bluetooth] Eliminate checks for impossible conditions + in IRQ handler"" + * clockevent: Don't remove broadcast device when cpu is dead + * clockevents: Add missing include to pacify sparse + * ACPI: don't cond_resched if irq is disabled + * be2net: Add support for next generation of BladeEngine device. + * be2net: Add the new PCI IDs to PCI_DEVICE_TABLE. + * mpt2sas: New device SAS2208 support is added + * ar9170: Add support for D-Link DWA 160 A2 + * powerpc/fsl: Add PCI device ids for new QoirQ chips + * davinci: dm646x: Add support for 3.x silicon revision + * Input: ALPS - add interleaved protocol support (Dell E6x00 series) + * Driver-Core: devtmpfs - set root directory mode to 0755 + * driver-core: fix devtmpfs crash on s390 + * vfs: get_sb_single() - do not pass options twice + * ALSA: hda - Add PCI IDs for Nvidia G2xx-series + * V4L/DVB (13569): smsusb: add autodetection support for five additional + Hauppauge USB IDs + * USB: mos7840: add device IDs for B&B electronics devices + * USB: ftdi_sio: add USB device ID's for B&B Electronics line + * V4L/DVB (13168): Add support for Asus Europa Hybrid DVB-T card (SAA7134 + SubVendor ID: 0x1043 Device ID: 0x4847) + * iTCO_wdt: Add support for Intel Ibex Peak + * atl1c:use common_task instead of reset_task and link_chg_task + * atl1e:disable NETIF_F_TSO6 for hardware limit + * V4L/DVB (13680a): DocBook/media: copy images after building HTML + * V4L/DVB (13680b): DocBook/media: create links for included sources + * netfilter: xtables: fix conntrack match v1 ipt-save output + * partitions: read whole sector with EFI GPT header + * partitions: use sector size for EFI GPT + * ALSA: ice1724 - Patch for suspend/resume for ESI Juli@ + * sched: Fix isolcpus boot option + * sched: Fix missing sched tunable recalculation on cpu add/remove + * nohz: Prevent clocksource wrapping during idle + * nfsd: Fix sort_pacl in fs/nfsd/nf4acl.c to actually sort groups + * timers, init: Limit the number of per cpu calibration bootup messages + * PCI: Always set prefetchable base/limit upper32 registers + * iscsi class: modify handling of replacement timeout + * NFS: Revert default r/wsize behavior + * HID: fixup quirk for NCR devices + * scsi_devinfo: update Hitachi entries (v2) + * scsi_dh: create sysfs file, dh_state for all SCSI disk devices + * scsi_transport_fc: remove invalid BUG_ON + * lpfc: fix hang on SGI ia64 platform + * libfc: fix typo in retry check on received PRLI + * libfc: fix ddp in fc_fcp for 0 xid + * fcoe: remove redundant checking of netdev->netdev_ops + * libfc: Fix wrong scsi return status under FC_DATA_UNDRUN + * libfc: lport: fix minor documentation errors + * libfc: don't WARN_ON in lport_timeout for RESET state + * fcoe: initialize return value in fcoe_destroy + * libfc: Fix frags in frame exceeding SKB_MAX_FRAGS in fc_fcp_send_data + * libfc: fix memory corruption caused by double frees and bad error + handling + * libfc: fix free of fc_rport_priv with timer pending + * libfc: remote port gets stuck in restart state without really + restarting + * fcoe, libfc: fix an libfc issue with queue ramp down in libfc + * fcoe: Fix checking san mac address + * fcoe: Fix getting san mac for VLAN interface + * qlge: Remove explicit setting of PCI Dev CTL reg. + * qlge: Set PCIE max read request size. + * qlge: Don't fail open when port is not initialized. + * qlge: Add handler for DCBX firmware event. + * qlge: Bonding fix for mode 6. + * PCI: AER: fix aer inject result in kernel oops + * DMI: allow omitting ident strings in DMI tables + * Input: i8042 - remove identification strings from DMI tables + * Input: i8042 - add Gigabyte M1022M to the noloop list + * Input: i8042 - add Dritek quirk for Acer Aspire 5610. + * ALSA: hda - select IbexPeak handler for Calpella + * ALSA: hda - Fix quirk for Maxdata obook4-1 + * ALSA: hda - Add missing Line-Out and PCM switches as slave + * iTCO_wdt.c - cleanup chipset documentation + * iTCO_wdt: add PCI ID for the Intel EP80579 (Tolapai) SoC + * iTCO_wdt: Add Intel Cougar Point and PCH DeviceIDs + * ahci: disable SNotification capability for ich8 + * ata_piix: fix MWDMA handling on PIIX3 + * md: fix small irregularity with start_ro module parameter + * V4L/DVB (13826): uvcvideo: Fix controls blacklisting + * cio: fix double free in case of probe failure + * cio: dont panic in non-fatal conditions + * netiucv: displayed TX bytes value much too high + * ipc ns: fix memory leak (idr) + * ALSA: hda - Fix HP T5735 automute + * hwmon: (fschmd) Fix a memleak on multiple opens of /dev/watchdog + * UBI: fix memory leak in update path + * UBI: initialise update marker + * ASoC: fix a memory-leak in wm8903 + * mac80211: check that ieee80211_set_power_mgmt only handles STA + interfaces. + * cfg80211: fix channel setting for wext + * KVM: S390: fix potential array overrun in intercept handling + * KVM: only allow one gsi per fd + * KVM: Fix race between APIC TMR and IRR + * KVM: MMU: bail out pagewalk on kvm_read_guest error + * KVM: x86: Fix host_mapping_level() + * KVM: x86: Fix probable memory leak of vcpu->arch.mce_banks + * KVM: x86: Fix leak of free lapic date in kvm_arch_vcpu_init() + * KVM: fix lock imbalance in kvm_*_irq_source_id() + * KVM: only clear irq_source_id if irqchip is present + * IPoIB: Clear ipoib_neigh.dgid in ipoib_neigh_alloc() + * x86: Reenable TSC sync check at boot, even with NONSTOP_TSC + * ACPI: enable C2 and Turbo-mode on Nehalem notebooks on A/C + - LP: #516325 + * iwlwifi: Fix throughput stall issue in HT mode for 5000 + * fnctl: f_modown should call write_lock_irqsave/restore + * x86, msr/cpuid: Pass the number of minors when unregistering MSR and + CPUID drivers. + * Linux 2.6.32.7 + * scsi_lib: Fix bug in completion of bidi commands + * mptsas: Fix issue with chain pools allocation on katmai + * mm: add new 'read_cache_page_gfp()' helper function + * drm/i915: Selectively enable self-reclaim + * firewire: ohci: fix crashes with TSB43AB23 on 64bit systems + * S390: fix single stepped svcs with TRACE_IRQFLAGS=y + * x86: Set hotpluggable nodes in nodes_possible_map + * x86: Remove "x86 CPU features in debugfs" (CONFIG_X86_CPU_DEBUG) + * libata: retry FS IOs even if it has failed with AC_ERR_INVALID + * zcrypt: Do not remove coprocessor for error 8/72 + * dasd: fix possible NULL pointer errors + * ACPI: Add a generic API for _OSC -v2 + * ACPI: Add platform-wide _OSC support. + * ACPI: fix OSC regression that caused aer and pciehp not to load + * ACPI: Advertise to BIOS in _OSC: _OST on _PPC changes + * UBI: fix volume creation input checking + * e1000/e1000e: don't use small hardware rx buffers + * drm/i915: Reload hangcheck timer too for Ironlake + * Fix a leak in affs_fill_super() + * Fix failure exits in bfs_fill_super() + * fix oops in fs/9p late mount failure + * fix leak in romfs_fill_super() + * Fix remount races with symlink handling in affs + * fix affs parse_options() + * Fix failure exit in ipathfs + * mm: fix migratetype bug which slowed swapping + * FDPIC: Respect PT_GNU_STACK exec protection markings when creating + NOMMU stack + * Split 'flush_old_exec' into two functions + * sparc: TIF_ABI_PENDING bit removal + * x86: get rid of the insane TIF_ABI_PENDING bit + * Input: winbond-cir - remove dmesg spam + * x86: Disable HPET MSI on ATI SB700/SB800 + * iwlwifi: set default aggregation frame count limit to 31 + * drm/i915: only enable hotplug for detected outputs + * firewire: core: add_descriptor size check + * SECURITY: selinux, fix update_rlimit_cpu parameter + * regulator: Specify REGULATOR_CHANGE_STATUS for WM835x LED constraints + * x86: Add Dell OptiPlex 760 reboot quirk + - LP: #488319 + * x86: Add quirk for Intel DG45FC board to avoid low memory corruption + * x86/amd-iommu: Fix possible integer overflow + * clocksource: fix compilation if no GENERIC_TIME + * tcp: update the netstamp_needed counter when cloning sockets + * sky2: Fix oops in sky2_xmit_frame() after TX timeout + * net: restore ip source validation + * af_packet: Don't use skb after dev_queue_xmit() + * ax25: netrom: rose: Fix timer oopses + * KVM: allow userspace to adjust kvmclock offset + * oprofile/x86: add Xeon 7500 series support + * oprofile/x86: fix crash when profiling more than 28 events + * libata: retry link resume if necessary + * mm: percpu-vmap fix RCU list walking + * mm: purge fragmented percpu vmap blocks + * block: fix bio_add_page for non trivial merge_bvec_fn case + * Fix 'flush_old_exec()/setup_new_exec()' split + * random: drop weird m_time/a_time manipulation + * random: Remove unused inode variable + * block: fix bugs in bio-integrity mempool usage + * usb: r8a66597-hdc disable interrupts fix + * connector: Delete buggy notification code. + * be2net: Bug fix to support newer generation of BE ASIC + * be2net: Fix memset() arg ordering. + * mm: flush dcache before writing into page to avoid alias + * mac80211: fix NULL pointer dereference when ftrace is enabled + * imxfb: correct location of callbacks in suspend and resume + * mx3fb: some debug and initialisation fixes + * starfire: clean up properly if firmware loading fails + * kernel/cred.c: use kmem_cache_free + * uartlite: fix crash when using as console + * pktcdvd: removing device does not remove its sysfs dir + * ath9k: fix eeprom INI values override for 2GHz-only cards + * ath9k: fix beacon slot/buffer leak + * powerpc: TIF_ABI_PENDING bit removal + * NET: fix oops at bootime in sysctl code + * Linux 2.6.32.8 + + [ Ubuntu: 2.6.32-12.17 ] + + * restore linux-image prefix -- master + * enforce -- we require SELINUX enabled -- master + * enforce -- ensure APPARMOR is our default LSM -- master + * make doc package completely optional -- master + * make source package completely optional -- master + * make linux-libc-dev completly optional -- master + * convert package disable to a deps list -- master + * allow common headers to switch from indep to arch -- master + * convert binary package disable to a deps list -- master + * add configuration option for a full source build tree -- master + * add support for uImage kernels in package control scripts + * getabis -- cleanup and parameterise repository list -- master + * getabis -- move configuration to etc/getabi -- master + * kernelconfig -- move configuration to etc -- master + * rules -- make debian/debian.env master for branch name + * set the current branch name -- master + * pull back common debian.master files into debian -- master + * enforcer -- make the enforcement configuration common + * insert-changes -- correctly link to debian/rules in DROOT + * future-proof ddeb handling against buildd changes + * SAUCE: Make CONFIG_{OMNIBOOK, AVERATEC_5100P, PACKARDBELL_E5} depend on + X86 + * Add modules.builtin.bin to prerm rm list + - LP: #516584 + * [Config] Implement the amd64 preempt flavour + * syslog: distinguish between /proc/kmsg and syscalls + - LP: #515623 + * sfc: Fix polling for slow MCDI operations + * sfc: Fix conditions for MDIO self-test + * sfc: QT202x: Remove unreliable MMD check at initialisation + * sfc: Add workspace for GMAC bug workaround to MCDI MAC_STATS buffer + * sfc: Use fixed-size buffers for MCDI NVRAM requests + + -- Andy Whitcroft Tue, 09 Mar 2010 16:09:44 +0000 + +linux-ec2 (2.6.32-302.6) lucid; urgency=low + + [ John Johansen ] + + * rebase to Ubuntu-2.6.32-11.15 + * import raw xen patchset + * import series file for the xen patchset + * rebase to Ubuntu-2.6.32-12.16 + * [Config] update ec2 configs to make them closer to -server flavor + - LP: #510130 + + [ Ubuntu: 2.6.32-12.16 ] + + * Revert "SAUCE: acpi battery -- delay first lookup of the battery until + first use" + * SAUCE: acpi battery -- move first lookup asynchronous + - LP: #507211 + * [Config] update configs to cleanup generic configs + * [Config] disable CONFIG_X86_CPU_DEBUG for amd64 + * [Config] enable USER_NS + - LP: #480739, #509808 + * (pre-stable) driver-core: fix devtmpfs crash on s390 + - LP: #512370 + * [Config] for server and virtual flavours make CONFIG_SCSI_SYM53C8XX_2=y + - LP: #494565 + * [Config] VIRTIO=y for server/virtual flavours + - LP: #494565 + * (pre-stable) Driver-Core: devtmpfs - set root directory mode to 0755 + - LP: #512370 + * SAUCE: x86: brk away from exec rand area + - LP: #452175 + * [Upstream] e1000: enhance frame fragment detection + - CVE-2009-4536 + * [Upstream] e1000e: enhance frame fragment detection + - CVE-2009-4538 + * (pre-stable) Input: ALPS - add interleaved protocol support (Dell E6x00 + series) + - LP: #296610 + * inotify: do not reuse watch descriptors + - LP: #485556 + * inotify: only warn once for inotify problems + * revert "drivers/video/s3c-fb.c: fix clock setting for Samsung SoC + Framebuffer" + * memcg: ensure list is empty at rmdir + * drm/i915: remove loop in Ironlake interrupt handler + * block: Fix incorrect reporting of partition alignment + * x86, mce: Thermal monitoring depends on APIC being enabled + * futexes: Remove rw parameter from get_futex_key() + * page allocator: update NR_FREE_PAGES only when necessary + * x86, apic: use physical mode for IBM summit platforms + * edac: i5000_edac critical fix panic out of bounds + * x86: SGI UV: Fix mapping of MMIO registers + * mfd: WM835x GPIO direction register is not locked + * mfd: Correct WM835x ISINK ramp time defines + * ALSA: hda - Fix missing capture mixer for ALC861/660 codecs + * V4L/DVB (13868): gspca - sn9c20x: Fix test of unsigned. + * reiserfs: truncate blocks not used by a write + * HID: add device IDs for new model of Apple Wireless Keyboard + * PCI/cardbus: Add a fixup hook and fix powerpc + * Input: pmouse - move Sentelic probe down the list + * asus-laptop: add Lenovo SL hotkey support + * sched: Fix cpu_clock() in NMIs, on !CONFIG_HAVE_UNSTABLE_SCHED_CLOCK + * sparc64: Fix NMI programming when perf events are active. + * sparc64: Fix Niagara2 perf event handling. + * i2c: Do not use device name after device_unregister + * i2c/pca: Don't use *_interruptible + * serial/8250_pnp: add a new Fujitsu Wacom Tablet PC device + * sched: Fix task priority bug + * vfs: Fix vmtruncate() regression + * Linux 2.6.32.5 + * x86, msr/cpuid: Register enough minors for the MSR and CPUID drivers + * V4L/DVB (13900): gspca - sunplus: Fix bridge exchanges. + * Staging: asus_oled: fix oops in 2.6.32.2 + * Staging: hv: fix smp problems in the hyperv core code + * tty: fix race in tty_fasync + * ecryptfs: use after free + * ecryptfs: initialize private persistent file before dereferencing + pointer + * nozomi: quick fix for the close/close bug + * serial: 8250_pnp: use wildcard for serial Wacom tablets + * usb: serial: fix memory leak in generic driver + * USB: fix bitmask merge error + * USB: Don't use GFP_KERNEL while we cannot reset a storage device + * USB: EHCI: fix handling of unusual interrupt intervals + * USB: EHCI & UHCI: fix race between root-hub suspend and port resume + * USB: add missing delay during remote wakeup + * USB: add speed values for USB 3.0 and wireless controllers + * ACPI: EC: Accelerate query execution + * ACPI: EC: Add wait for irq storm + * SCSI: enclosure: fix oops while iterating enclosure_status array + * drm/i915: Read the response after issuing DDC bus switch command + * drm/i915: try another possible DDC bus for the SDVO device with + multiple outputs + * block: bdev_stack_limits wrapper + * DM: Fix device mapper topology stacking + * x86/PCI/PAT: return EINVAL for pci mmap WC request for !pat_enabled + * USB: fix usbstorage for 2770:915d delivers no FAT + * vmalloc: remove BUG_ON due to racy counting of VM_LAZY_FREE + * perf timechart: Use tid not pid for COMM change + * perf events: Dont report side-band events on each cpu for + per-task-per-cpu events + * perf: Honour event state for aux stream data + * Linux 2.6.32.6 + + [ Ubuntu: 2.6.32-11.15 ] + + * Revert "(pre-stable) drm/radeon/kms: fix crtc vblank update for r600" + * Revert "(pre-stable) sched: Fix balance vs hotplug race" + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + * Revert "[Upstream] mmc: prevent dangling block device from accessing + stale queues" + * Revert "SAUCE: Fix nx_enable reporting" + * Revert "SAUCE: [x86] fix report of cs-limit nx-emulation" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * SAUCE: i915 -- disable powersave by default + - LP: #492392 + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + * [Upstream] b43: Declare all possible firmware files. + - LP: #488636 + * [Config] updateconfigs after adding pvscsi + - LP: #497156 + * [Config] CONFIG_BT=m + * Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu + for pre-Pentium" + * SCSI: ipr: fix EEH recovery + * SCSI: qla2xxx: dpc thread can execute before scsi host has been added + * SCSI: st: fix mdata->page_order handling + * SCSI: fc class: fix fc_transport_init error handling + * sched: Fix task_hot() test order + * x86, cpuid: Add "volatile" to asm in native_cpuid() + * sched: Select_task_rq_fair() must honour SD_LOAD_BALANCE + * clockevents: Prevent clockevent_devices list corruption on cpu hotplug + * pata_hpt3x2n: fix clock turnaround + * pata_cmd64x: fix overclocking of UDMA0-2 modes + * ASoC: wm8974: fix a wrong bit definition + * sound: sgio2audio/pdaudiocf/usb-audio: initialize PCM buffer + * ALSA: hda - Fix missing capsrc_nids for ALC88x + * acerhdf: limit modalias matching to supported + - LP: #435958 + * ACPI: EC: Fix MSI DMI detection + * ACPI: Use the return result of ACPI lid notifier chain correctly + * powerpc: Handle VSX alignment faults correctly in little-endian mode + * ASoC: Do not write to invalid registers on the wm9712. + * drm/radeon: fix build on 64-bit with some compilers. + * USB: emi62: fix crash when trying to load EMI 6|2 firmware + * USB: option: support hi speed for modem Haier CE100 + * USB: Fix a bug on appledisplay.c regarding signedness + * USB: musb: gadget_ep0: avoid SetupEnd interrupt + * Bluetooth: Prevent ill-timed autosuspend in USB driver + * USB: rename usb_configure_device + * USB: fix bugs in usb_(de)authorize_device + * drivers/net/usb: Correct code taking the size of a pointer + * x86: SGI UV: Fix writes to led registers on remote uv hubs + * md: Fix unfortunate interaction with evms + * dma: at_hdmac: correct incompatible type for argument 1 of + 'spin_lock_bh' + * dma-debug: Do not add notifier when dma debugging is disabled. + * dma-debug: Fix bug causing build warning + * cifs: NULL out tcon, pSesInfo, and srvTcp pointers when chasing DFS + referrals + * x86/amd-iommu: Fix initialization failure panic + * ioat3: fix p-disabled q-continuation + * ioat2,3: put channel hardware in known state at init + * KVM: MMU: remove prefault from invlpg handler + * KVM: LAPIC: make sure IRR bitmap is scanned after vm load + * Libertas: fix buffer overflow in lbs_get_essid() + * iwmc3200wifi: fix array out-of-boundary access + * mac80211: fix propagation of failed hardware reconfigurations + * mac80211: fix WMM AP settings application + * mac80211: Fix IBSS merge + * cfg80211: fix race between deauth and assoc response + * ath5k: fix SWI calibration interrupt storm + * ath9k: wake hardware for interface IBSS/AP/Mesh removal + * ath9k: Fix TX queue draining + * ath9k: fix missed error codes in the tx status check + * ath9k: wake hardware during AMPDU TX actions + * ath9k: fix suspend by waking device prior to stop + * ath9k_hw: Fix possible OOB array indexing in gen_timer_index[] on + 64-bit + * ath9k_hw: Fix AR_GPIO_INPUT_EN_VAL_BT_PRIORITY_BB and its shift value + in 0x4054 + * iwl3945: disable power save + * iwl3945: fix panic in iwl3945 driver + * iwlwifi: fix EEPROM/OTP reading endian annotations and a bug + * iwlwifi: fix more eeprom endian bugs + * iwlwifi: fix 40MHz operation setting on cards that do not allow it + * mac80211: fix race with suspend and dynamic_ps_disable_work + * NOMMU: Optimise away the {dac_,}mmap_min_addr tests + * 'sysctl_max_map_count' should be non-negative + * kernel/sysctl.c: fix the incomplete part of + sysctl_max_map_count-should-be-non-negative.patch + * V4L/DVB (13596): ov511.c typo: lock => unlock + * x86/ptrace: make genregs[32]_get/set more robust + * memcg: avoid oom-killing innocent task in case of use_hierarchy + * e100: Fix broken cbs accounting due to missing memset. + * ipv6: reassembly: use seperate reassembly queues for conntrack and + local delivery + * netfilter: fix crashes in bridge netfilter caused by fragment jumps + * hwmon: (sht15) Off-by-one error in array index + incorrect constants + * b43: avoid PPC fault during resume + * Keys: KEYCTL_SESSION_TO_PARENT needs TIF_NOTIFY_RESUME architecture + support + * sched: Fix balance vs hotplug race + * drm/radeon/kms: fix crtc vblank update for r600 + * drm: disable all the possible outputs/crtcs before entering KMS mode + * S390: dasd: support DIAG access for read-only devices + * xen: fix is_disconnected_device/exists_disconnected_device + * xen: improvement to wait_for_devices() + * xen: wait up to 5 minutes for device connetion + * orinoco: fix GFP_KERNEL in orinoco_set_key with interrupts disabled + * udf: Try harder when looking for VAT inode + * Add unlocked version of inode_add_bytes() function + * quota: decouple fs reserved space from quota reservation + * ext4: Convert to generic reserved quota's space management. + * ext4: fix sleep inside spinlock issue with quota and dealloc (#14739) + * x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus + * cpumask: use modern cpumask style in drivers/edac/amd64_edac.c + * amd64_edac: unify MCGCTL ECC switching + * x86, msr: Add support for non-contiguous cpumasks + * x86, msr: msrs_alloc/free for CONFIG_SMP=n + * amd64_edac: fix driver instance freeing + * amd64_edac: make driver loading more robust + * amd64_edac: fix forcing module load/unload + * sched: Sched_rt_periodic_timer vs cpu hotplug + * ext4: Update documentation to correct the inode_readahead_blks option + name + * lguest: fix bug in setting guest GDT entry + * vmscan: do not evict inactive pages when skipping an active list scan + * ksm: fix mlockfreed to munlocked + * rt2x00: Disable powersaving for rt61pci and rt2800pci. + * generic_permission: MAY_OPEN is not write access + * Linux 2.6.32.3 + * untangle the do_mremap() mess + * fasync: split 'fasync_helper()' into separate add/remove functions + * ASoC: fix params_rate() macro use in several codecs + * modules: Skip empty sections when exporting section notes + * exofs: simple_write_end does not mark_inode_dirty + * nfsd: make sure data is on disk before calling ->fsync + * sunrpc: fix peername failed on closed listener + * SUNRPC: Fix up an error return value in + gss_import_sec_context_kerberos() + * SUNRPC: Fix the return value in gss_import_sec_context() + * sunrpc: on successful gss error pipe write, don't return error + * drm/i915: Update LVDS connector status when receiving ACPI LID event + * drm/i915: fix order of fence release wrt flushing + * drm/i915: Permit pinning whilst the device is 'suspended' + * drm: remove address mask param for drm_pci_alloc() + * drm/i915: Enable/disable the dithering for LVDS based on VBT setting + * drm/i915: Make the BPC in FDI rx/transcoder be consistent with that in + pipeconf on Ironlake + * drm/i915: Select the correct BPC for LVDS on Ironlake + * drm/i915: fix unused var + * rtc_cmos: convert shutdown to new pnp_driver->shutdown + * drivers/cpuidle/governors/menu.c: fix undefined reference to + `__udivdi3' + * cgroups: fix 2.6.32 regression causing BUG_ON() in cgroup_diput() + * lib/rational.c needs module.h + * dma-debug: allow DMA_BIDIRECTIONAL mappings to be synced with + DMA_FROM_DEVICE and + * kernel/signal.c: fix kernel information leak with print-fatal-signals=1 + * mmc_block: add dev_t initialization check + * mmc_block: fix probe error cleanup bug + * mmc_block: fix queue cleanup + * ALSA: hda - Fix ALC861-VD capture source mixer + * ALSA: ac97: Add Dell Dimension 2400 to Headphone/Line Jack Sense + blacklist + * ALSA: atiixp: Specify codec for Foxconn RC4107MA-RS2 + - LP: #498863 + * ASoC: Fix WM8350 DSP mode B configuration + * netfilter: ebtables: enforce CAP_NET_ADMIN + * netfilter: nf_ct_ftp: fix out of bounds read in update_nl_seq() + * hwmon: (coretemp) Fix TjMax for Atom N450/D410/D510 CPUs + * hwmon: (adt7462) Fix pin 28 monitoring + * quota: Fix dquot_transfer for filesystems different from ext4 + * xen: fix hang on suspend. + * iwlwifi: fix iwl_queue_used bug when read_ptr == write_ptr + * ath5k: Fix eeprom checksum check for custom sized eeproms + * cfg80211: fix syntax error on user regulatory hints + * iwl: off by one bug + * mac80211: add missing sanity checks for action frames + * drm/i915: remove render reclock support + * libertas: Remove carrier signaling from the scan code + * kernel/sysctl.c: fix stable merge error in NOMMU mmap_min_addr + * mac80211: fix skb buffering issue (and fixes to that) + * fix braindamage in audit_tree.c untag_chunk() + * fix more leaks in audit_tree.c tag_chunk() + * module: handle ppc64 relocating kcrctabs when CONFIG_RELOCATABLE=y + * ipv6: skb_dst() can be NULL in ipv6_hop_jumbo(). + * agp/intel-agp: Clear entire GTT on startup + * Linux 2.6.32.4 + * ethtool: Add reset operation + * gro: Name the GRO result enumeration type + * gro: Change all receive functions to return GRO result codes + * sfc: 10Xpress: Initialise pause advertising flags + * sfc: 10Xpress: Report support for pause frames + * sfc: Remove redundant header gmii.h + * sfc: Remove redundant hardware initialisation + * sfc: Rename Falcon-specific board code and types + * sfc: Remove boards.h, moving last remaining declaration to falcon.h + * sfc: Remove versioned bitfield macros + * sfc: Move RX data FIFO thresholds out of struct efx_nic_type + * sfc: Update hardware definitions for Siena + * sfc: Rename register I/O header and functions used by both Falcon and + Siena + * sfc: Eliminate indirect lookups of queue size constants + * sfc: Define DMA address mask explicitly in terms of descriptor field + width + * sfc: Move all TX DMA length limiting into tx.c + * sfc: Change order of device removal to reverse of probe order + * sfc: Remove declarations of nonexistent functions + * sfc: Move efx_xmit_done() declaration into correct stanza + * sfc: Move shared members of struct falcon_nic_data into struct efx_nic + * sfc: Maintain interrupt moderation values in ticks, not microseconds + * sfc: Removed kernel-doc for nonexistent member of efx_phy_operations + * sfc: Remove pointless abstraction of memory BAR number + * sfc: Remove incorrect assertion from efx_pci_remove_main() + * sfc: Remove unnecessary tests of efx->membase + * sfc: Move MTD probe after netdev registration and name allocation + * sfc: Remove unused code for non-autoneg speed/duplex switching + * sfc: Rename 'xfp' file and functions to reflect reality + * sfc: Really allow RX checksum offload to be disabled + * sfc: Feed GRO result into RX allocation policy and interrupt moderation + * sfc: Enable heuristic selection between page and skb RX buffers + * sfc: Remove pointless abstraction of memory BAR number (2) + * sfc: Remove redundant gotos from __efx_rx_packet() + * sfc: Remove ridiculously paranoid assertions + * sfc: Move assertions and buffer cleanup earlier in efx_rx_packet_lro() + * sfc: Record RX queue number on GRO path + * sfc: SFT9001: Reset LED configuration correctly after blinking + * sfc: Use a single blink implementation + * sfc: Rename efx_board::init_leds to init_phy and use for SFN4111T + * sfc: Make board information explicitly Falcon-specific + * sfc: Move definition of struct falcon_nic_data into falcon.h + * sfc: Move struct falcon_board into struct falcon_nic_data + * sfc: Move all I2C stuff into struct falcon_board + * sfc: Gather link state fields in struct efx_nic into new struct + efx_link_state + * sfc: Remove unnecessary casts to struct sk_buff * + * sfc: Remove redundant efx_xmit() function + * sfc: Combine high-level header files + * sfc: Log interrupt and reset type names, not numbers + * sfc: Fix descriptor cache sizes + * sfc: Treat all MAC registers as 128-bit + * sfc: Strengthen EFX_ASSERT_RESET_SERIALISED + * sfc: Comment corrections + * sfc: Remove unused constant + * sfc: Clean up struct falcon_board and struct falcon_board_data + * sfc: Fix bugs in RX queue flushing + * sfc: Remove unused function efx_flush_queues() + * sfc: Only switch Falcon MAC clocks as necessary + * sfc: Hold MAC lock for longer in efx_init_port() + * sfc: Split MAC stats DMA initiation and completion + * sfc: Move Falcon board/PHY/MAC monitoring code to falcon.c + * sfc: Simplify XMAC link polling + * sfc: Change MAC promiscuity and multicast hash at the same time + * sfc: Move inline comment into kernel-doc + * sfc: Do not set net_device::trans_start in self-test + * sfc: Simplify PHY polling + * sfc: QT202x: Reset before reading PHY id + * sfc: Replace MDIO spinlock with mutex + * sfc: Always start Falcon using the XMAC + * sfc: Limit some hardware workarounds to Falcon + * sfc: Remove EFX_WORKAROUND_9141 macro + * sfc: Remove another unused workaround macro + * sfc: Remove some redundant whitespace + * sfc: Decouple NIC revision number from Falcon PCI revision number + * sfc: Move descriptor cache base addresses to struct efx_nic_type + * sfc: Clean up RX event handling + * sfc: Remove redundant writes to INT_ADR_KER + * sfc: Remove duplicate hardware structure definitions + * sfc: Turn pause frame generation on and off at the MAC, not the RX FIFO + * sfc: Move Falcon NIC operations to efx_nic_type + * sfc: Refactor link configuration + * sfc: Generalise link state monitoring + * sfc: Add power-management and wake-on-LAN support + * sfc: Implement ethtool reset operation + * sfc: Add efx_nic_type operation for register self-test + * sfc: Add efx_nic_type operation for NVRAM self-test + * sfc: Add efx_nic_type operation for identity LED control + * sfc: Separate shared NIC code from Falcon-specific and rename + accordingly + * sfc: Fold falcon_probe_nic_variant() into falcon_probe_nic() + * sfc: Extend loopback mode enumeration + * sfc: Remove static PHY data and enumerations + * sfc: Extend MTD driver for use with new NICs + * sfc: Allow for additional checksum offload features + * sfc: Rename falcon.h to nic.h + * sfc: Move shared NIC code from falcon.c to new source file nic.c + * sfc: Add firmware protocol definitions (MCDI) + * sfc: Add support for SFC9000 family (1) + * sfc: Add support for SFC9000 family (2) + * sfc: Implement TSO for TCP/IPv6 + * sfc: Update version, copyright dates, authors + * drivers/net/sfc: Correct code taking the size of a pointer + * sfc: Move PHY software state initialisation from init() into probe() + * sfc: Include XGXS in XMAC link status check except in XGMII loopback + * sfc: Fix DMA mapping cleanup in case of an error in TSO + * sfc: QT2025C: Work around PHY bug + * sfc: QT2025C: Switch into self-configure mode when not in loopback + * sfc: QT2025C: Work around PHY firmware initialisation bug + * sfc: QT2025C: Add error message for suspected bad SFP+ cables + * sfc: Disable TX descriptor prefetch watchdog + * [SCSI] vmw_pvscsi: SCSI driver for VMware's virtual HBA. + - LP: #497156 + + [ Ubuntu: 2.6.32-10.14 ] + + * SAUCE: drm/radeon/kms: fix LVDS setup on r4xx + - LP: #493795 + * Revert "(pre-stable) acpi: Use the ARB_DISABLE for the CPU which model + id is less than 0x0f." + * config-check -- ensure the checks get run at build time + * config-check -- check the processed config during updateconfigs + * config-check -- CONFIG_SECCOMP may not be present + * TUN is now built in ignore + * SAUCE: acpi battery -- delay first lookup of the battery until first + use + * SAUCE: async_populate_rootfs: move rootfs init earlier + * ubuntu: AppArmor -- update to mainline 2010-01-06 + * SAUCE: move RLIMIT_CORE pipe dumper marker to 1 + - LP: #498525 + * (pre-stable) drm/radeon/kms: fix crtc vblank update for r600 + * Add asix to nic-usb-modules file + - LP: #499785 + * (pre-stable) sched: Fix balance vs hotplug race + * [Config] Enable CONFIG_FUNCTION_TRACER + - LP: #497989 + * [Config] Drop lpia from getabis + * [Config] Build in TUN/TAP driver + - LP: #499491 + * [Config] DH_COMPAT=5 + * Revert "(pre-stable) drm/i915: Avoid NULL dereference with + component_only tv_modes" + * Revert "(pre-stable) drm/i915: Fix sync to vblank when VGA output is + turned off" + * USB: usb-storage: fix bug in fill_inquiry + * USB: option: add pid for ZTE + * firewire: ohci: handle receive packets with a data length of zero + * rcu: Prepare for synchronization fixes: clean up for non-NO_HZ handling + of ->completed counter + * rcu: Fix synchronization for rcu_process_gp_end() uses of ->completed + counter + * rcu: Fix note_new_gpnum() uses of ->gpnum + * rcu: Remove inline from forward-referenced functions + * perf_event: Fix invalid type in ioctl definition + * perf_event: Initialize data.period in perf_swevent_hrtimer() + * perf: Don't free perf_mmap_data until work has been done + * PM / Runtime: Fix lockdep warning in __pm_runtime_set_status() + * sched: Check for an idle shared cache in select_task_rq_fair() + * sched: Fix affinity logic in select_task_rq_fair() + * sched: Rate-limit newidle + * sched: Fix and clean up rate-limit newidle code + * x86/amd-iommu: attach devices to pre-allocated domains early + * x86/amd-iommu: un__init iommu_setup_msi + * x86, Calgary IOMMU quirk: Find nearest matching Calgary while walking + up the PCI tree + * x86: Fix iommu=nodac parameter handling + * x86: GART: pci-gart_64.c: Use correct length in strncmp + * x86: ASUS P4S800 reboot=bios quirk + - LP: #366682 + * x86, apic: Enable lapic nmi watchdog on AMD Family 11h + * ssb: Fix range check in sprom write + * ath5k: allow setting txpower to 0 + * ath5k: enable EEPROM checksum check + * hrtimer: Fix /proc/timer_list regression + * ALSA: hrtimer - Fix lock-up + * ALSA: hda - Terradici HDA controllers does not support 64-bit mode + * KVM: x86 emulator: limit instructions to 15 bytes + * KVM: s390: Fix prefix register checking in arch/s390/kvm/sigp.c + * KVM: s390: Make psw available on all exits, not just a subset + * KVM: fix irq_source_id size verification + * KVM: x86: include pvclock MSRs in msrs_to_save + * x86: Prevent GCC 4.4.x (pentium-mmx et al) function prologue wreckage + * x86: Use -maccumulate-outgoing-args for sane mcount prologues + * x86, mce: don't restart timer if disabled + * x86/mce: Set up timer unconditionally + * x86: SGI UV: Fix BAU initialization + * x86: Fix duplicated UV BAU interrupt vector + * x86: Add new Intel CPU cache size descriptors + * x86: Fix typo in Intel CPU cache size descriptor + * pata_hpt{37x|3x2n}: fix timing register masks (take 2) + * s390: clear high-order bits of registers after sam64 + * V4L/DVB: Fix test in copy_reg_bits() + * bsdacct: fix uid/gid misreporting + * UBI: flush wl before clearing update marker + * jbd2: don't wipe the journal on a failed journal checksum + * USB: xhci: Add correct email and files to MAINTAINERS entry. + * USB: musb_gadget_ep0: fix unhandled endpoint 0 IRQs, again + * USB: option.c: add support for D-Link DWM-162-U5 + * USB: usbtmc: repeat usb_bulk_msg until whole message is transfered + * USB: usb-storage: add BAD_SENSE flag + * USB: Close usb_find_interface race v3 + * pxa/em-x270: fix usb hub power up/reset sequence + * hfs: fix a potential buffer overflow + * SUNRPC: IS_ERR/PTR_ERR confusion + * NFS: Fix nfs_migrate_page() + * md/bitmap: protect against bitmap removal while being updated. + * futex: Take mmap_sem for get_user_pages in fault_in_user_writeable + * devpts_get_tty() should validate inode + * debugfs: fix create mutex racy fops and private data + * Driver core: fix race in dev_driver_string + * Serial: Do not read IIR in serial8250_start_tx when UART_BUG_TXEN + * mac80211: Fix bug in computing crc over dynamic IEs in beacon + * mac80211: Fixed bug in mesh portal paths + * mac80211: Revert 'Use correct sign for mesh active path refresh' + * mac80211: fix scan abort sanity checks + * wireless: correctly report signal value for IEEE80211_HW_SIGNAL_UNSPEC + * rtl8187: Fix wrong rfkill switch mask for some models + * x86: Fix bogus warning in apic_noop.apic_write() + * mm: hugetlb: fix hugepage memory leak in mincore() + * mm: hugetlb: fix hugepage memory leak in walk_page_range() + * powerpc/windfarm: Add detection for second cpu pump + * powerpc/therm_adt746x: Record pwm invert bit at module load time] + * powerpc: Fix usage of 64-bit instruction in 32-bit altivec code + * drm/radeon/kms: Add quirk for HIS X1300 board + * drm/radeon/kms: handle vblanks properly with dpms on + * drm/radeon/kms: fix legacy crtc2 dpms + * drm/radeon/kms: fix vram setup on rs600 + * drm/radeon/kms: rs6xx/rs740: clamp vram to aperture size + * drm/ttm: Fix build failure due to missing struct page + * drm/i915: Set the error code after failing to insert new offset into mm + ht. + * drm/i915: Add the missing clonemask for display port on Ironlake + * xen/xenbus: make DEVICE_ATTR()s static + * xen: re-register runstate area earlier on resume. + * xen: restore runstate_info even if !have_vcpu_info_placement + * xen: correctly restore pfn_to_mfn_list_list after resume + * xen: register timer interrupt with IRQF_TIMER + * xen: register runstate on secondary CPUs + * xen: don't call dpm_resume_noirq() with interrupts disabled. + * xen: register runstate info for boot CPU early + * xen: call clock resume notifier on all CPUs + * xen: improve error handling in do_suspend. + * xen: don't leak IRQs over suspend/resume. + * xen: use iret for return from 64b kernel to 32b usermode + * xen: explicitly create/destroy stop_machine workqueues outside + suspend/resume region. + * Xen balloon: fix totalram_pages counting. + * xen: try harder to balloon up under memory pressure. + * dm exception store: free tmp_store on persistent flag error + * dm snapshot: only take lock for statustype info not table + * dm crypt: move private iv fields to structs + * dm crypt: restructure essiv error path + * dm: avoid _hash_lock deadlock + * dm snapshot: cope with chunk size larger than origin + * dm crypt: separate essiv allocation from initialisation + * dm crypt: make wipe message also wipe essiv key + * slc90e66: fix UDMA handling + * tcp: Stalling connections: Fix timeout calculation routine + * ip_fragment: also adjust skb->truesize for packets not owned by a + socket + * b44 WOL setup: one-bit-off stack corruption kernel panic fix + * sparc64: Don't specify IRQF_SHARED for LDC interrupts. + * sparc64: Fix overly strict range type matching for PCI devices. + * sparc64: Fix stack debugging IRQ stack regression. + * sparc: Set UTS_MACHINE correctly. + * b43legacy: avoid PPC fault during resume + * tracing: Fix event format export + * ath9k: Fix TX hang poll routine + * ath9k: fix processing of TX PS null data frames + * ath9k: Fix maximum tx fifo settings for single stream devices + * ath9k: fix tx status reporting + * mac80211: Fix dynamic power save for scanning. + * drm/i915: Fix sync to vblank when VGA output is turned off + * memcg: fix memory.memsw.usage_in_bytes for root cgroup + * thinkpad-acpi: fix default brightness_mode for R50e/R51 + * thinkpad-acpi: preserve rfkill state across suspend/resume + * ipw2100: fix rebooting hang with driver loaded + * matroxfb: fix problems with display stability + * acerhdf: add new BIOS versions + * asus-laptop: change light sens default values. + * vmalloc: conditionalize build of pcpu_get_vm_areas() + * ACPI: Use the ARB_DISABLE for the CPU which model id is less than 0x0f. + * net: Fix userspace RTM_NEWLINK notifications. + * ext3: Fix data / filesystem corruption when write fails to copy data + * V4L/DVB (13116): gspca - ov519: Webcam 041e:4067 added. + * bcm63xx_enet: fix compilation failure after get_stats_count removal + * x86: Under BIOS control, restore AP's APIC_LVTTHMR to the BSP value + * drm/i915: Avoid NULL dereference with component_only tv_modes + * drm/i915: PineView only has LVDS and CRT ports + * drm/i915: Fix LVDS stability issue on Ironlake + * mm: sigbus instead of abusing oom + * ipvs: zero usvc and udest + * jffs2: Fix long-standing bug with symlink garbage collection. + * intel-iommu: Detect DMAR in hyperspace at probe time. + * intel-iommu: Apply BIOS sanity checks for interrupt remapping too. + * intel-iommu: Check for an RMRR which ends before it starts. + * intel-iommu: Fix oops with intel_iommu=igfx_off + * intel-iommu: ignore page table validation in pass through mode + * netfilter: xtables: document minimal required version + * perf_event: Fix incorrect range check on cpu number + * implement early_io{re,un}map for ia64 + * Linux 2.6.32.2 + + -- Andy Whitcroft Sat, 06 Feb 2010 18:04:10 +0000 + +linux-ec2 (2.6.32-301.5) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to Ubuntu-2.6.32-9.13 + * [Config] update configs following rebase to Ubuntu-2.6.31-9.13 + + [ Ubuntu: 2.6.32-9.13 ] + + * [Config] enable CONFIG_B43_PHY_LP + - LP: #493059 + * include modules.builtin in the binary debs + * config-check -- add a configuration enforcer + * config-check -- add a unit-test suite to the checker + * [Config] Enable CONFIG_SYN_COOKIES for versatile + * [Config] Enable CONFIG_SECURITY_SMACK for ports + * [Config] Enable CONFIG_SECURITY_FILE_CAPABILITIES for ports + * [Config] Disable CONFIG_COMPAT_BRK for ports + * getabis -- add armel versatile to the list + * SAUCE: Increase the default prealloc buffer for HDA audio devices + (non-modem) + * ubuntu: onmibook -- Added missing BOM file + * ubuntu: fsam7400 -- Cleanup Makefile + * Revert "ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT" + * signal: Fix alternate signal stack check + * SCSI: scsi_lib_dma: fix bug with dma maps on nested scsi objects + * SCSI: osd_protocol.h: Add missing #include + * SCSI: megaraid_sas: fix 64 bit sense pointer truncation + * ext4: fix potential buffer head leak when add_dirent_to_buf() returns + ENOSPC + * ext4: avoid divide by zero when trying to mount a corrupted file system + * ext4: fix the returned block count if EXT4_IOC_MOVE_EXT fails + * ext4: fix lock order problem in ext4_move_extents() + * ext4: fix possible recursive locking warning in EXT4_IOC_MOVE_EXT + * ext4: plug a buffer_head leak in an error path of ext4_iget() + * ext4: make sure directory and symlink blocks are revoked + * ext4: fix i_flags access in ext4_da_writepages_trans_blocks() + * ext4: journal all modifications in ext4_xattr_set_handle + * ext4: don't update the superblock in ext4_statfs() + * ext4: fix uninit block bitmap initialization when s_meta_first_bg is + non-zero + * ext4: fix block validity checks so they work correctly with meta_bg + * ext4: avoid issuing unnecessary barriers + * ext4: fix error handling in ext4_ind_get_blocks() + * ext4: make trim/discard optional (and off by default) + * ext4: make "norecovery" an alias for "noload" + * ext4: Fix double-free of blocks with EXT4_IOC_MOVE_EXT + * ext4: initialize moved_len before calling ext4_move_extents() + * ext4: move_extent_per_page() cleanup + * jbd2: Add ENOMEM checking in and for + jbd2_journal_write_metadata_buffer() + * ext4: Return the PTR_ERR of the correct pointer in + setup_new_group_blocks() + * ext4: Avoid data / filesystem corruption when write fails to copy data + * ext4: wait for log to commit when umounting + * ext4: remove blocks from inode prealloc list on failure + * ext4: ext4_get_reserved_space() must return bytes instead of blocks + * ext4: quota macros cleanup + * ext4: fix incorrect block reservation on quota transfer. + * ext4: Wait for proper transaction commit on fsync + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + * ext4: Fix potential fiemap deadlock (mmap_sem vs. i_data_sem) + * Linux 2.6.32.1 + * kbuild: generate modules.builtin + * (pre-stable) drm/i915: Fix sync to vblank when VGA output is turned off + - LP: #494461 + * (pre-stable) drm/i915: Avoid NULL dereference with component_only + tv_modes + - LP: #494045 + * (pre-stable) acpi: Use the ARB_DISABLE for the CPU which model id is + less than 0x0f. + - LP: #481765 + + [ Ubuntu: 2.6.32-8.12 ] + + * SAUCE: AppArmor -- add linux/err.h for ERR_PTR + + [ Ubuntu: 2.6.32-8.11 ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches + up" + * Revert "SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition." + * Revert "SAUCE: AppArmor: Fix refcounting bug causing leak of creds" + * Revert "SAUCE: AppArmor: Fix cap audit_caching preemption disabling" + * Revert "SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds" + * Revert "SAUCE: AppArmor: Fix oops after profile removal" + * Revert "SAUCE: AppArmor: AppArmor disallows truncate of deleted files." + * Revert "SAUCE: AppArmor: AppArmor fails to audit change_hat correctly" + * Revert "SAUCE: AppArmor: Policy load and replacement can fail to alloc + mem" + * Revert "SAUCE: AppArmor: AppArmor wrongly reports allow perms as + denied" + * Revert "SAUCE: AppArmor: Fix mediation of "deleted" paths" + * Revert "SAUCE: AppArmor: Fix off by 2 error in getprocattr mem + allocation" + * Revert "SAUCE: AppArmor: Set error code after structure + initialization." + * Revert "AppArmor -- fix pstrace_may_access rename" + * Revert "ubuntu: AppArmor security module" + * Revert "SAUCE: Add config option to set a default LSM" + * Revert "ubuntu: fsam7400 -- sw kill switch driver" + * Revert "[Config] fsam7400 -- enable" + * Revert "[Config] AUFS -- enable" + * Revert "ubuntu: AUFS -- aufs2-30 20090727" + * Revert "ubuntu: AUFS -- export various core functions -- fixes" + * Revert "ubuntu: AUFS -- export various core functions" + * Revert "[Config] ubuntu/iscsitarget -- disable" + * Revert "[Config] iscsitarget -- enable" + * Revert "ubuntu: iscsitarget -- SVN revision r214" + * update Vcs-Git to point to the correct repository + - LP: #493589 + * update build environment overrides to lucid + - LP: #493589 + * [Config] enable CONFIG_DEVTMPFS + * [Config] update all configs following AppArmor 2009-12-08 update + * SAUCE: isapnp_init: make isa PNP scans occur async + * [Config] fsam7400 -- enable + * [Config] omnibook -- enable + * [Config] cleanup CONFIG_AUDIT + * ubuntu: AUFS -- export various core functions (aufs2-base.patch) + * ubuntu: AUFS -- export various core functions (aufs2-standalone.patch) + * ubuntu: AUFS -- aufs2 20091209 + * [Config] AUFS -- enable + * [Config] iscsitarget -- enable + * SAUCE: KMS: cache the EDID information of the LVDS + * bnx2: update d-i firmware filenames + - LP: #494052 + * add cdc_ether to nic-usb-modules udeb + - LP: #495060 + * ubuntu: AppArmor -- mainline 2009-10-08 + * ubuntu: fsam7400 -- kill switch for Fujitsu Siemens Amilo M 7400 + * ubuntu: omnibook -- support Toshiba (HP) netbooks + * ubuntu: iscsitarget --- version 1.4.19 + - LP: #494693 + * SAUCE: Make populate_rootfs asynchronous + * Parallelize flavour builds and packaging + * [Config] Enable CONFIG_KSM + * Config option to set a default LSM + * LSM: Add security_path_chroot(). + * LSM: Add security_path_chroot(). + * LSM: Move security_path_chmod()/security_path_chown() to after + mutex_lock(). + * ext4: Fix insufficient checks in EXT4_IOC_MOVE_EXT + + -- Andy Whitcroft Tue, 22 Dec 2009 19:04:09 +0000 + +linux-ec2 (2.6.32-301.4) lucid; urgency=low + + [ Andy Whitcroft ] + + * sort out previous ABI files to fix FTBFS + + -- Andy Whitcroft Tue, 22 Dec 2009 15:00:05 +0000 + +linux-ec2 (2.6.32-301.3) lucid; urgency=low + + [ Andy Whitcroft ] + + * drop generated files to fix FTBFS + + -- Andy Whitcroft Tue, 22 Dec 2009 13:36:44 +0000 + +linux-ec2 (2.6.32-301.2) lucid; urgency=low + + [ Andy Whitcroft ] + + * rebase to Ubuntu-2.6.32-7.9 + * [Config] update configs following rebase to Ubuntu-2.6.32-7.9 + * rebase to Ubuntu-2.6.32-7.10 + + [ Ubuntu: 2.6.32-7.10 ] + + * [Config] disable CONFIG_THUMB2_KERNEL to fix arm FTBFS + + [ Ubuntu: 2.6.32-7.9 ] + + * SAUCE: set /proc/acpi/video/*/DOS to 4 by default + - LP: #458982 + * SAUCE: ensure vga16fb loads if no other driver claims the VGA device + * [Config] update configs following versatile switch to V7 + * rebased to v2.6.32 + * [Config] update configs following rebase to v2.6.32 + * [Config] update ports configs following rebase to v2.6.32 + * SAUCE: vfs: Add a trace point in the mark_inode_dirty function + * [SCSI] megaraid_sas: remove sysfs poll_mode_io world writeable + permissions + - CVE-2009-3939 + * SAUCE: select a v7 CPU for versatile + * SAUCE: ALSA: hda - Add power on/off counter + * rebased to v2.6.32 + + [ Ubuntu: 2.6.32-6.8 ] + + * [Config] disable SSB devices for armel + + [ Ubuntu: 2.6.32-6.7 ] + + * Revert "SAUCE: default ATI Radeon KMS to off until userspace catches up" + * Revert "SAUCE: Dell XPS710 reboot quirk" + * Revert "SAUCE: Link acpi-cpufreq.o first" + * Revert "SAUCE: LPIA Logical reset of USB port on resume" + * Revert "SAUCE: LPIA Reboot fix for Intel Crownbeach development boards" + * Revert "SAUCE: Enable HDMI audio codec on Studio XPS 1340" + * Revert "SAUCE: Dell laptop digital mic does not work, PCI 1028:0271" + * Revert "Add Dell Dimension 9200 reboot quirk" + * Revert "SAUCE: Correctly blacklist Thinkpad r40e in ACPI" + * Revert "SAUCE: tulip: Define ULI PCI ID's" + * Revert "SAUCE: Lower warning level of some PCI messages" + * Revert "mac80211: fix two issues in debugfs" + Drop a number of known redundant commits as identified in the Ubuntu + delta review blueprint. + * reenable armel versatile flavour + * [Config] disable CONFIG_USB_DEVICEFS + * [Config] udeb: Add squashfs to fs-core-modules + - LP: #352615 + * [Config] Create a real squashfs udeb + - LP: #352615 + + -- Andy Whitcroft Mon, 07 Dec 2009 21:10:30 +0000 + +linux-ec2 (2.6.32-300.1) lucid; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: fix nx-emulation when disabled by XEN + * SAUCE: fix disable of KERNEL_IMAGE_SIZE for i386 XEN builds + + [ John Johansen ] + + * Fix recursive include + * SAUCE: Fix build ASSERT for 3.0.2 compatibility + * SAUCE: ec2: Default domU console to tty. + - LP: #431103 + * [Config] Setup EC2 commit + * update configs for 2.6.32 + * rebase to Ubuntu-2.6.32-5.6 + + [ Ubuntu: 2.6.32-5.6 ] + + * rebase to v2.6.32-rc8 + * update configs following rebase to v2.6.32-rc8 + * update ports configs since rebase to v2.6.32-rc8 + * [Config] enable cgroup options + - LP: #480739 + * rebase to v2.6.32-rc8 + + [ Ubuntu: 2.6.32-4.5 ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * rebase to v2.6.32-rc7 + * resync with Karmic proposed + * SAUCE: AppArmor: Fix oops after profile removal + - LP: #475619 + * SAUCE: AppArmor: Fix Oops when in apparmor_bprm_set_creds + - LP: #437258 + * SAUCE: AppArmor: Fix cap audit_caching preemption disabling + - LP: #479102 + * SAUCE: AppArmor: Fix refcounting bug causing leak of creds + - LP: #479115 + * SAUCE: AppArmor: Fix oops there is no tracer and doing unsafe + transition. + - LP: #480112 + * resync with Karmic proposed (ddbc670a86a3dee18541a3734149f250ff307adf) + * rebase to v2.6.32-rc7 + + [ Ubuntu: 2.6.32-3.4 ] + + * [Config] SERIO_LIBPS2 and SERIO_I8042 must match + * [Upstream] add local prefix to oss local change_bits + * mtd/maps: gpio-addr-flash: pull in linux/ headers rather than asm/ + * mtd/maps: gpio-addr-flash: depend on GPIO arch support + + [ Ubuntu: 2.6.32-3.3 ] + + * rebase to v2.6.32-rc6 + * [Config] update configs following rebase to v2.6.32-rc6 + * [Config] update ports configs following rebase to v2.6.32-rc6 + * resync with Karmic Ubuntu-2.6.31-15.49 + * [Config] add module ignores for broken drivers + * SAUCE: AppArmor: AppArmor wrongly reports allow perms as denied + - LP: #453335 + * SAUCE: AppArmor: Policy load and replacement can fail to alloc mem + - LP: #458299 + * SAUCE: AppArmor: AppArmor fails to audit change_hat correctly + - LP: #462824 + * SAUCE: AppArmor: AppArmor disallows truncate of deleted files. + - LP: #451375 + * SAUCE: Fix nx_enable reporting + - LP: #454285 + * Revert "SAUCE: trace: add trace_event for the open() syscall" + * SAUCE: trace: add trace events for open(), exec() and uselib() + - LP: #462111 + * SAUCE: Fix sub-flavour script to not stop on missing directories + - LP: #453073 + * resync with Karmic Ubuntu-2.6.31-15.49 + * rebase to v2.6.32-rc6 + - LP: #464552 + + [ Ubuntu: 2.6.32-2.2 ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + * [Config] udate configs following karmic resync + * [Config] update ports configs following karmic resync + * [Upstream] lirc -- follow removal of .id element + * Use section 'admin' rather than 'base' + * Add more e100 firmware to nic-modules + - LP: #451872 + * Add qla1280 firmware to scsi-modules + - LP: #381037 + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + * SAUCE: AppArmor: Fix mediation of "deleted" paths + * SAUCE: [x86] fix report of cs-limit nx-emulation + - LP: #454285 + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + * [Config] Add sd_mod to scsi-modules udeb for powerpc + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + * SAUCE: dell-laptop: Store the HW switch status internally rather than + requerying every time + - LP: #430809 + * SAUCE: dell-laptop: Blacklist machines not supporting dell-laptop + - LP: #430809 + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + - LP: #430694 + * SAUCE: Raise the default console 'quiet' level to 2 + * [Config] CONFIG_X86_PAT=y + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + * [Config] CONFIG_X86_MCE + * [Upstream] (drop after 2.6.31) Input: synaptics - add another Protege + M300 to rate blacklist + - LP: #433801 + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + [ Ubuntu: 2.6.32-1.1 ] + + * rebase to v2.6.32-rc3 + * [Config] update configs following rebase to 2.6.32-rc3 + * [Config] update ports configs following rebase to 2.6.32-rc3 + * AppArmor -- fix pstrace_may_access rename + * staging/android -- disable + * ubuntu: dm-raid-45 -- update to compile with 2.6.32 + * ubuntu: drbd -- disable + * staging/comdi -- disable + * staging/go7007 -- disable + * [Config] staging/winbond -- disable + * [Config] ubuntu/iscsitarget -- disable + * [d-i] cbc and ecb are builtin make them optional in udebs + * rebase to v2.6.32-rc5 + * [Config] update configs following rebase to v2.6.32-rc5 + * [Config] update ports configs following rebase to v2.6.31-rc5 + * [Config] Add cpio as a build dependency. + * rebase to v2.6.32-rc3 + * rebase to v2.6.32-rc5 + + -- Andy Whitcroft Mon, 30 Nov 2009 12:48:46 +0000 + +linux-ec2 (2.6.31-302.7) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Updateconfigs after rebase to 2.6.31-14.46 + + * Rebased against linux (2.6.31-14.46) + + [ Andy Whitcroft ] + + * reinstate armel.mk with no flavours + - LP: #449637 + * [Upstream] elevator: fix fastfail checks to allow merge of readahead + requests + - LP: #444915 + * [Upstream] block: silently error unsupported empty barriers too + - LP: #420423 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix mediation of "deleted" paths + - LP: #415632 + + [ Tim Gardner ] + + * [Config] CONFIG_X86_MCE + https://lists.ubuntu.com/archives/kernel-team/2009-October/007584.html + * Revert "appletalk: Fix skb leak when ipddp interface is not loaded, + CVE-2009-2903" - Use patch from 2.6.31.4 which is slightly different. + + [ Upstream Kernel Changes ] + + * x86: fix csum_ipv6_magic asm memory clobber + * tty: Avoid dropping ldisc_mutex over hangup tty re-initialization + * x86: Don't leak 64-bit kernel register values to 32-bit processes + * tracing: correct module boundaries for ftrace_release + * ftrace: check for failure for all conversions + * futex: fix requeue_pi key imbalance + * futex: Move exit_pi_state() call to release_mm() + * futex: Nullify robust lists after cleanup + * futex: Fix locking imbalance + * NOHZ: update idle state also when NOHZ is inactive + * ima: ecryptfs fix imbalance message + * libata: fix incorrect link online check during probe + * sound: via82xx: move DXS volume controls to PCM interface + * ASoC: WM8350 capture PGA mutes are inverted + * KVM: Prevent overflow in KVM_GET_SUPPORTED_CPUID + * KVM: VMX: flush TLB with INVEPT on cpu migration + * KVM: fix LAPIC timer period overflow + * KVM: SVM: Fix tsc offset adjustment when running nested + * KVM: SVM: Handle tsc in svm_get_msr/svm_set_msr correctly + * net: Fix wrong sizeof + * mm: add_to_swap_cache() must not sleep + * sis5513: fix PIO setup for ATAPI devices + * PIT fixes to unbreak suspend/resume (bug #14222) + * IMA: open new file for read + * ACPI: Clarify resource conflict message + * ACPI: fix Compaq Evo N800c (Pentium 4m) boot hang regression + * net: restore tx timestamping for accelerated vlans + * net: unix: fix sending fds in multiple buffers + * tun: Return -EINVAL if neither IFF_TUN nor IFF_TAP is set. + * tcp: fix CONFIG_TCP_MD5SIG + CONFIG_PREEMPT timer BUG() + * net: Fix sock_wfree() race + * smsc95xx: fix transmission where ZLP is expected + * sky2: Set SKY2_HW_RAM_BUFFER in sky2_init + * appletalk: Fix skb leak when ipddp interface is not loaded + * ax25: Fix possible oops in ax25_make_new + * ax25: Fix SIOCAX25GETINFO ioctl + * sit: fix off-by-one in ipip6_tunnel_get_prl + * Linux 2.6.31.4 + * drm/i915: Fix FDI M/N setting according with correct color depth + - LP: #416792 + + * linux (2.6.31-13.45) + + [ Luke Yelavich ] + + * [Config] Add sd_mod to scsi-modules udeb for powerpc + + [ Mario Limonciello ] + + * SAUCE: Update to LIRC 0.8.6 + - LP: #432678 + + [ Tim Gardner ] + + * [Config] CONFIG_X86_PAT=y + https://lists.ubuntu.com/archives/kernel-team/2009-October/007477.html + https://lists.ubuntu.com/archives/kernel-team/2009-October/007534.html + + * [Config] Add armel arch to linux-libc-dev arches. + - LP: #449637 + + [ Upstream Kernel Changes ] + + * e1000e: swap max hw supported frame size between 82574 and 82583 + * drm/i915: Initialize HDMI outputs as HDMI connectors, not DVI. + - LP: #392017 + * ALSA: hda - Add quirks for some HP laptops + - LP: #449742 + * ALSA: hda - Add support for HP dv6 + - LP: #449742 + + -- Tim Gardner Mon, 12 Oct 2009 11:27:10 -0600 + + * linux (2.6.31-13.44) + + [ Upstream Kernel Changes ] + + * sgi-gru: Fix kernel stack buffer overrun, CVE-2009-2584 + * appletalk: Fix skb leak when ipddp interface is not loaded, + CVE-2009-2903 + Note - This patch causes an ABI change in the symbol aarp_send_ddp + which I'm ignoring. + + -- Tim Gardner Tue, 13 Oct 2009 12:00:22 -0600 + +linux-ec2 (2.6.31-301.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Added cpio as a build dependency. + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * [Config] Disable CONFIG_UEVENT_HELPER_PATH + * [Config] Enable CONFIG_USB_GADGET_DUMMY_HCD + * [Config] Disable Intel AGP/DRM + + * Rebased against linux (2.6.31-13.43) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Upstream] acerhdf: Limit modalias matching to supported + boards" + + [ Colin Watson ] + + * Use section 'admin' rather than 'base' + + [ John Johansen ] + + * SAUCE: AppArmor: Set error code after structure initialization. + - LP: #427948 + * SAUCE: AppArmor: Fix off by 2 error in getprocattr mem allocation + - LP: #446595 + + [ Luke Yelavich ] + + * SAUCE: Add sr_mod to the scsi-modules udeb for powerpc + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + (supersedes previous revert made by Andy Whitcroft) + - LP: #435958 + + * Rebased against linux (2.6.31-13.42) karmic; urgency=low + + [ Leann Ogasawara ] + + * SAUCE: (drop after 2.6.31) input: Add support for filtering input + events + - LP: #430809 + * SAUCE: (drop after 2.6.31) dell-laptop: Trigger rfkill updates on wifi + toggle switch press + - LP: #430809 + + [ Tim Gardner ] + + * SAUCE: Raise the default console 'quiet' level to 2 + This supresses all but critical and emergency level messages. + https://lists.ubuntu.com/archives/kernel-team/2009-October/007476.html + + [ Upstream Kernel Changes ] + + * TTY: fix typos + * Linux 2.6.31.3 + * V4L/DVB (12439): cx88: add support for WinFast DTV2000H rev. J + - LP: #433904 + + * Rebased against linux (2.6.31-12.41) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] CONFIG_GFS2_FS_LOCKING_DLM=y + - LP: #416325 + * SAUCE: Fix MODULE_IMPORT/MODULE_EXPORT + The original patch failed to work for amd64. + - LP: #430694 + + [ Upstream Kernel Changes ] + + * ALSA: hda - Add a white-list for MSI option + Upstream cherry-pick: Infrastructure support for #445580 + * ALSA: hda - Add HP Pavilion dv4t-1300 to MSI whitelist + - LP: #445580 + * ALSA: intel8x0 - Mute External Amplifier by default for Sony VAIO + VGN-T350P + - LP: #410933 + * ALSA: intel8x0 - Mute External Amplifier by default for Sony VAIO + VGN-B1VP + - LP: #410933 + + * Rebased against linux (2.6.31-12.40) karmic; urgency=low + + [ Tim Gardner ] + + * SAUCE: Created MODULE_EXPORT/MODULE_IMPORT macros + - LP: #430694 + * SAUCE: Use MODULE_IMPORT macro to tie intel_agp to i915 + - LP: #430694 + + [ Upstream Kernel Changes ] + + * V4L/DVB (12352): gspca - vc032x: Fix mi1310_soc preview and LED + - LP: #310760 + + * Rebased against linux (2.6.31-12.39) karmic; urgency=low + + [ Andy Whitcroft ] + + * install the full changelog with the binary package + * changelog -- explicitly note rebases and clean history + + [ Tim Gardner ] + + * Revert "SAUCE: (drop after 2.6.31) Disable iwl-1000 series wireless + adapters" + * Revert "SAUCE: (drop after 2.6.31) eCryptfs: Prevent lower dentry from + going negative during unlink" + * Revert "SAUCE: (drop after 2.6.31) em28xx: ir-kbd-i2c init data needs a + persistent object" + * Revert "SAUCE: (drop after 2.6.31) saa7134: ir-kbd-i2c init data needs + a persistent object" + * Revert "drm/i915: Check that the relocation points to within the + target" + * Revert "drm/i915: fix tiling on IGDNG" + * Revert "Driver core: add new device to bus's list before probing" + * Revert "HID: completely remove apple mightymouse from blacklist" + * Revert "KVM: x86: check for cr3 validity in ioctl_set_sregs" + + All reverts superseded by corresponding v2.6.31.2 patches + + * [Config] Add d101m_ucode.bin to d-i/firmware/nic-modules + - LP: #439456 + * [Config] Enabled CONFIG_SND_HDA_HWDEP + - LP: #443117 + * [Config] Add cpio as a build dependency. + * [Config] Set default I/O scheduler back to CFQ for desktop flavours + - LP: #381300 + + [ Upstream Kernel Changes ] + + * KVM: VMX: Fix EPT with WP bit change during paging + * pata_amd: do not filter out valid modes in nv_mode_filter + * p54usb: add Zcomax XG-705A usbid + * x86: Increase MIN_GAP to include randomized stack + * serial: bfin_5xx: fix building as module when early printk is enabled + * USB: option.c Add support for ZTE AC2726 EVDO modem + * USB: option: TELIT UC864G support + * video: s3c_fb.c: fix build with CONFIG_HOTPLUG=n + * kbuild: fix cc1 options check to ensure we do not use -fPIC when + compiling + * drivers/mfd/ab3100-core.c: fix powerpc build error + * thinkpad-acpi: don't ask about brightness_mode for fw. 1V and 1R + * ACPI: pci_slot.ko wants a 64-bit _SUN + * fbcon: only unbind from console if successfully registered + * kallsyms: fix segfault in prefix_underscores_count() + * sisfb: change SiS_DDC_Port type to SISIOADDRESS + * mmc_spi: fail gracefully if host or card do not support the switch + command + * alpha: AGP update (fixes compile failure) + * fs: make sure data stored into inode is properly seen before unlocking + new inode + * eCryptfs: Handle unrecognized tag 3 cipher codes + * eCryptfs: Check for O_RDONLY lower inodes when opening lower files + * eCryptfs: Filename encryption only supports password auth tokens + * eCryptfs: Validate global auth tok keys + * eCryptfs: Prevent lower dentry from going negative during unlink + * Re-enable Lanman security + * xen: make -fstack-protector work under Xen + * xen: only enable interrupts while actually blocking for spinlock + * xen: use stronger barrier after unlocking lock + * xen: check EFER for NX before setting up GDT mapping + * perf_counter: Fix perf_copy_attr() pointer arithmetic + * perf tools: Fix buffer allocation + * tty: serial/pcmcia: add ID for Advantech card + * PM / PCMCIA: Drop second argument of pcmcia_socket_dev_suspend() + * PM / yenta: Fix cardbus suspend/resume regression + * sony-laptop: check for rfkill hard block at load time + * nilfs2: fix missing zero-fill initialization of btree node cache + * ar9170usb: add usbid for TP-Link TL-WN821N v2 + * mtd: nand: fix ECC Correction bug for SMC ordering for NDFC driver + * mtd: ofpart: Check availability of reg property instead of name + property + * mtd: cfi_cmdset_0002: add 0xFF intolerance for M29W128G + * USB: serial: ftdi_sio: new hardware support - hameg power supply + * USB: add PIDs for FTDI based OpenDCC hardware + * USB: serial: ftdi: handle gnICE+ JTAG adaptors + * USB: CDC WDM driver doesn't support non-blocking reads + * USB: fix cdc-acm regression in open + * cdc_acm: Fix to use modern speed interfaces + * tty: remove dtr/rts use from the driver open methods + * tty: gigaset: really fix chars_in_buffer + * kaweth: Fix memory leak in kaweth_control() + * x86: SGI UV: Fix IPI macros + * USB: serial: pl2303: new hardware support - sanwa multimeter + * USB: storage: fix a resume path GFP_NOIO must be used + * USB: usb-storage fails to attach to Huawei Datacard cdrom device + * USB: usbtmc: sanity checks for DEV_DEP_MSG_IN urbs + * USB: sl811-hcd: Fix device disconnect: + * drm/i915: remove restore in resume + * drm/i915: Only destroy a constructed mmap offset + * drm/i915: prevent FIFO calculation overflows on 32 bits with high + dotclocks + * drm/i915: Add buffer to inactive list immediately during fault + * drm/i915: Check that the relocation points to within the target + * drm/i915: Fix typo for wrong LVDS clock setting on IGDNG + * drm/i915: Fix SSC frequence for IGDNG + * drm/i915: Remove DAC disable in CRT force detect on IGDNG + * drm/i915: Fix LVDS panel fitting on Arrandale + * drm/I915: Use the CRT DDC to get the EDID for DVI-connector on Mac + * drm/i915: fix tiling on IGDNG + * agp/intel: Fix the pre-9xx chipset flush. + * nfsd4: fix null dereference creating nfsv4 callback client + * can: fix NOHZ local_softirq_pending 08 warning + * ahci: restore pci_intx() handling + * pxa/sharpsl_pm: zaurus c3000 aka spitz: fix resume + * net ax25: Fix signed comparison in the sockopt handler + * net: Make the copy length in af_packet sockopt handler unsigned + * pty_write: don't do a tty_wakeup() when the buffers are full + * KVM: fix cpuid E2BIG handling for extended request types + * KVM: MMU: fix missing locking in alloc_mmu_pages + * KVM: MMU: fix bogus alloc_mmu_pages assignment + * KVM: Protect update_cr8_intercept() when running without an apic + * Fix NULL ptr regression in powernow-k8 + * perf tools: do not complain if root is owning perf.data + * netfilter: nf_nat: fix inverted logic for persistent NAT mappings + * netfilter: nf_conntrack: netns fix re reliable conntrack event delivery + * netfilter: bridge: refcount fix + * netfilter: ebt_ulog: fix checkentry return value + * ath5k: Wakeup fixes + * ath5k: do not release irq across suspend/resume + * Driver core: add new device to bus's list before probing + * tty: Add a full port_close function + * tty: USB hangup is racy + * tty: USB can now use the shutdown method for kref based freeing of + ports + * hwmon: (asus_atk0110) Add maintainer information + * tty: USB serial termios bits + * usb-serial: change referencing of port and serial structures + * usb-serial: put subroutines in logical order + * usb-serial: change logic of serial lookups + * usb-serial: acquire references when a new tty is installed + * usb-serial: fix termios initialization logic + * usb-serial: rename subroutines + * usb-serial: add missing tests and debug lines + * usb-serial: straighten out serial_open + * USB serial: update the console driver + * USB: xhci: Work around for chain bit in link TRBs. + * USB: xhci: Fix slot and endpoint context debugging. + * USB: xhci: Configure endpoint code refactoring. + * USB: xhci: Set correct max packet size for HS/FS control endpoints. + * USB: xhci: Support full speed devices. + * USB: xhci: Handle stalled control endpoints. + * USB: xhci: Add quirk for Fresco Logic xHCI hardware. + * USB: xhci: Make TRB completion code comparison readable. + * USB: xhci: Handle babbling endpoints correctly. + * USB: xhci: Don't touch xhci_td after it's freed. + * USB: xhci: Check URB's actual transfer buffer size. + * USB: xhci: Check URB_SHORT_NOT_OK before setting short packet status. + * USB: xhci: Set -EREMOTEIO when xHC gives bad transfer length. + * USB: xhci: Support interrupt transfers. + * USB: Fix SS endpoint companion descriptor parsing. + * /proc/kcore: work around a BUG() + * hugetlb: restore interleaving of bootmem huge pages (2.6.31) + * page-allocator: limit the number of MIGRATE_RESERVE pageblocks per zone + * mm: munlock use follow_page + * mm: fix anonymous dirtying + * mmap: avoid unnecessary anon_vma lock acquisition in vma_adjust() + * Fix idle time field in /proc/uptime + * drm/i915: Handle ERESTARTSYS during page fault + * em28xx: ir-kbd-i2c init data needs a persistent object + * saa7134: ir-kbd-i2c init data needs a persistent object + * powerpc/8xx: Fix regression introduced by cache coherency rewrite + * powerpc: Fix incorrect setting of __HAVE_ARCH_PTE_SPECIAL + * HID: completely remove apple mightymouse from blacklist + * mptsas : PAE Kernel more than 4 GB kernel panic + * NOMMU: Fix MAP_PRIVATE mmap() of objects where the data can be mapped + directly + * iwlwifi: Handle new firmware file with ucode build number in header + * iwlwifi: update 1000 series API version to match firmware + * iwlagn: modify digital SVR for 1000 + * iwlwifi: traverse linklist to find the valid OTP block + * iwlwifi: fix unloading driver while scanning + * Linux 2.6.31.2 + + * Rebased against linux (2.6.31-11.38) karmic; urgency=low + + [ Stefan Bader ] + + * [Upstream] acerhdf: Limit modalias matching to supported boards + - LP: #435958 + + [ Tim Gardner ] + + * [Config] Added sata_via to d-i/modules/sata-modules + - LP: #434827 + * SAUCE: (drop after 2.6.31) Disable iwl-1000 series wireless adapters + - LP: #439285 + * [Upstream] i915: Fix i2c init message + - LP: #409361 + * [Config] Add sym53c8xx.ko to virtual sub-flavour + - LP: #439415 + + [ Upstream Kernel Changes ] + + * sched: Disable NEW_FAIR_SLEEPERS for now + - LP: #436342 + + * ACPI video: ignore buggy _BQC + * ACPI video: work-around BIOS AML bug in _BQC + - LP: #428910 + * ALSA: hda - Added quirk to enable sound on Toshiba NB200 + - LP: #438318 + + -- Tim Gardner Fri, 09 Oct 2009 10:42:15 -0600 + +linux-ec2 (2.6.31-300.5) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Fix header package names and dependencies + - LP: #437784 + + -- Tim Gardner Wed, 30 Sep 2009 08:07:32 -0600 + +linux-ec2 (2.6.31-300.4) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Disable Lenovo laptop config + * Rebase against master Ubuntu-2.6.31-11.37 + + [ Upstream Kernel Changes ] + + * n_tty: honor opost flag for echoes + * n_tty: move echoctl check and clean up logic + - LP: #438310 + + -- Tim Gardner Mon, 28 Sep 2009 22:15:20 -0600 + +linux-ec2 (2.6.31-300.3) karmic; urgency=low + + [ Chuck Short ] + + * SAUCE: ec2: Default domU console to tty. + - LP: #431103 + + [ Tim Gardner ] + + * [Config] Remove dependency on wireless-crda + - LP: #434755 + * [Config] Drop bootloaders as a recommendation + - LP: #434755 + * [Config] Drop virtual sub flavours + + -- Tim Gardner Fri, 25 Sep 2009 15:18:34 -0600 + +linux-ec2 (2.6.31-300.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Use gawk in xen makefiles + * [Config] CONFIG_DMI=n for XEN_UNPRIVILEGED_GUEST + + -- Tim Gardner Tue, 08 Sep 2009 22:54:48 -0600 + +linux-ec2 (2.6.31-300.1) karmic; urgency=low + + [ Tim Gardner ] + + * Revert "[Config] Let lenovo-sl-laptop build" + * Revert "SAUCE: [x86] implement cs-limit nx-emulation for ia32" + * [Config] Initial EC2 commit + * [Config] Removed ports + * [Config] Removed lpia + * [Config] Settled on the single EC2 flavour + * [Config] Disable udebs + * SAUCE: Prepare swap.h for Xen patches + * SAUCE: Xen 3.02 + * [Config] Target vmlinuz + * [Config] Build with correct arch + + [ Upstream Kernel Changes ] + + * Revert "PCI SR-IOV: correct broken resource alignment calculations" + + -- Tim Gardner Tue, 08 Sep 2009 20:31:57 -0600 + +linux-ec2 (2.6.31-300.0) karmic; urgency=low + + * Dummy entry + + -- Tim Gardner Tue, 08 Sep 2009 20:31:57 -0600 + +linux (2.6.31-10.30) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Enable CONFIG_USB_DEVICEFS + - LP: #417748 + * [Config] Populate the config-update template a bit more + + [ Andy Whitcroft ] + + * rebase to v2.6.31-rc9 + * [Config] update configs following rebase to v2.6.31-rc9 + * [Config] update ports configs following rebase to v2.6.31-rc9 + + [ Colin Ian King ] + + * SAUCE: wireless: hostap, fix oops due to early probing interrupt + - LP: #254837 + + [ Jerone Young ] + + * [Upstream] ACPI: Add Thinkpad T400 & Thinkpad T500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X200, X200s, X200t to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad X300 & Thinkpad X301 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad R400 & Thinkpad R500 to OSI(Linux) + white-list + - LP: #281732 + * [Upstream] ACPI: Add Thinkpad W500, W700, & W700ds to OSI(Linux) + white-list + - LP: #281732 + + [ John Johansen ] + + * SAUCE: AppArmor: Fix profile attachment for regexp based profile names + - LP: #419308 + * SAUCE: AppArmor: Return the correct error codes on profile + addition/removal + - LP: #408473 + * SAUCE: AppArmor: Fix OOPS in profile listing, and display full list + - LP: #408454 + * SAUCE: AppArmor: Fix mapping of pux to new internal permission format + - LP: #419222 + * SAUCE: AppArmor: Fix change_profile failure + - LP: #401931 + * SAUCE: AppArmor: Tell git to ignore generated include files + - LP: #419505 + + [ Stefan Bader ] + + * [Upstream] acpi: video: Loosen strictness of video bus detection code + - LP: #333386 + * SAUCE: Remove ov511 driver from ubuntu subdirectory + + [ Tim Gardner ] + + * [Config] Exclude char-modules from non-x86 udeb creation + * SAUCE: Notify the ACPI call chain of AC events + * [Config] CONFIG_SATA_VIA=m + - LP: #403385 + * [Config] Build in all phylib support modules. + * [Config] Don't fail when sub-flavour files are missing + - LP: #423426 + * [Config] Set CONFIG_LSM_MMAP_MIN_ADDR=0 + - LP: #423513 + + [ Upstream ] + + * Rebased against v2.6.31-rc9 + + -- Andy Whitcroft Mon, 07 Sep 2009 11:33:45 +0100 + +linux (2.6.31-9.29) karmic; urgency=low + + [ Leann Ogasawara ] + + * [Upstream] agp/intel: support for new chip variant of IGDNG mobile + - LP: #419993 + * [Config] d-i/modules: Add new char-modules file, initialize with + intel-agp + - LP: #420605 + + [ Upstream ] + + * Rebased against 2.6.31-rc8 plus some inotify regression patches: + up through git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + adda766193ea1cf3137484a9521972d080d0b7af. + + -- Tim Gardner Fri, 28 Aug 2009 06:31:30 -0600 + +linux (2.6.31-8.28) karmic; urgency=low + + [ Ike Panhc ] + + * [Config] Let nic-shared-modules depends on crypto-modules + - LP: #360966 + + [ Leann Ogasawara ] + + * [Upstream] (drop after 2.6.31) drm/i915: increase default latency + constant + - LP: #412492 + + [ Mario Limonciello ] + + * [Upstream]: (drop after 2.6.31) dell-laptop: don't change softblock + status if HW switch is disabled + - LP: #418721 + * [Upstream]: (drop after 2.6.31) compal-laptop: Add support for known + Compal made Dell laptops + * [Upstream]: (drop after 2.6.31) compal-laptop: Replace sysfs support + with rfkill support + + [ Tim Gardner ] + + * [Config] Add acpiphp to virtual sub-flavour + - LP: #364916 + * Drop KSM patch set for now because of instabilities with encrypted swap. + - LP: #418781 + + -- Tim Gardner Wed, 26 Aug 2009 08:14:26 -0600 + +linux (2.6.31-7.27) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] updateconfigs updateportsconfigs after 2.6.31-rc7 rebase + * SAUCE: (drop after 2.6.31) Added KSM from mmotm-2009-08-20-19-18 + Replaces previous ksm patches from 2.6.31-6.25 + * [Config] KSM=y + + -- Tim Gardner Sat, 22 Aug 2009 20:32:11 -0600 + +linux (2.6.31-6.26) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] enable CONFIG_AUFS_BR_RAMFS + - LP: #414738 + * split out debian directory ready for abstraction + * add printdebian target to find branch target + * abstracted debian -- debian/files is not abstracted + * abstracted debian -- packages must be built in debian/ + * abstracted debian -- kernel-wedge needs to work in debian/ + * abstracted debian -- ensure we install the copyright file + * abstracted-debian -- drop the debian directories from headers + * abstracted-debian -- drop the debian directories from headers part 2 + * SAUCE: ubuntu-insert-changes -- follow abstracted debian + * [Upstream] aoe: ensure we initialise the request_queue correctly V2 + - LP: #410198 + + [ Luke Yelavich ] + + * [Config] Ports: Disable CONFIG_CPU_FREQ_DEBUG on powerpc-smp + * [Config] Ports: Re-enable windfarm modules on powerpc64-smp + - LP: #413150 + * [Config] Ports: Build all cpu frequency scaling governors into ports + kernels + * [Config] Ports: Build ext2 and ext3 modules into ports kernels + * [Config] Ports: CONFIG_PACKET=y for all ports kernels + * [Config] Ports: Enable PS3 network driver + + [ Stefan Bader ] + + * abstracted debian -- call $(DEBIAN)/rules using make + + [ Tim Gardner ] + + * [Config] Abstract the debian directory + * SAUCE: Improve error reporting in postinst + - LP: #358564 + + -- Tim Gardner Sun, 16 Aug 2009 20:33:28 -0600 + +linux (2.6.31-6.25) karmic; urgency=low + + [ Andy Whitcroft ] + + * script to generate Ubuntu changes from changelog + * [Config] standardise ANDROID options + * [Config] standardise CONFIG_ATM as module + * [Config] standardise CONFIG_LIB80211 as module + * [Config] disable CONFIG_PRINT_QUOTA_WARNING + * [Config] set CONFIG_CRAMFS as module + * [Config] enable CONFIG_DAB and modules + * [Config] set CONFIG_MAC80211_HWSIM as module + * [Config] set CONFIG_NET_CLS_FLOW as module + * [Config] set CONFIG_NF_CONNTRACK_SANE as module + * [Config] set CONFIG_NF_CT_PROTO_DCCP as module + * [Config] set CONFIG_RTC_DRV_DS1511 as module + * [Config] set CONFIG_RTC_DRV_R9701 as module + * [Config] set CONFIG_RTC_DRV_S35390A as module + * [Config] set CONFIG_TOIM3232_DONGLE as module + * [Config] standardise CONFIG_USB_MIDI_GADGET as module + * [Config] standardise CONFIG_USB_G_PRINTER as module + * [Config] standardise CONFIG_USB_SERIAL_IR as module + * [Config] set CONFIG_USB_SERIAL_IUU as module + * [Config] standardise CONFIG_USB_STORAGE_CYPRESS_ATACB as module + * [Config] standardise CONFIG_USB_STORAGE_ONETOUCH as module + * cleanup remains of dm-loop + * drop thinkpad ec and smapi support + * drop appleir + * [Config] update configs following rebase to v2.6.31-rc6 + + [ Hugh Dickins ] + + * SAUCE: ksm patch 1, drop after 2.6.31 + * SAUCE: ksm patch 2, drop after 2.6.31 + * SAUCE: ksm patch 3, drop after 2.6.31 + * SAUCE: ksm patch 4, drop after 2.6.31 + * SAUCE: ksm patch 5, drop after 2.6.31 + * SAUCE: ksm patch 7, drop after 2.6.31 + + [ Izik Eidus ] + + * SAUCE: ksm patch 0, drop after 2.6.31 + * SAUCE: ksm patch 6, drop after 2.6.31 + * SAUCE: ksm patch 8, drop after 2.6.31 + * SAUCE: ksm patch 9, drop after 2.6.31 + + [ Luke Yelavich ] + + * [Config] Ports: Re-add PS3 modules to udebs + + [ Michael Casadevall ] + + * [Config] Update SPARC config and d-i files to reflect what can be built + + [ Tim Gardner ] + + * [Config] Removed armel package support + * [Config] Enabled CONFIG_KSM=y + + [ Upstream Kernel Changes ] + + * ARM: Cleanup: Revert "ARM: Add more cache memory types macros" + * ARM: Cleanup: Revert "Do not use OOB with MLC NAND" + * ARM: Cleanup: Revert "ARM: Make ARM arch aware of ubuntu/ drivers" + * ARM: Cleanup: Revert "ARM: IMX51: Make video capture drivers compile" + * ARM: Cleanup: Revert "ARM: IMX51: Fix isl29003 HWMON driver for i2c + changes" + * ARM: Cleanup: Revert "ARM: IMX51: IPU irq handler deadlock fix" + * ARM: Cleanup: Revert "ARM: IMX51: Babbage 2.5 needs a different system + revision" + * ARM: Cleanup: Revert "ARM: IMX51: Compile-in the IMX51 cpufreq driver + by default" + * ARM: Cleanup: Revert "ARM: IMX51: Enable ZONE_DMA for ARCH_MXC" + * ARM: Cleanup: Revert "ARM: IMX51: Make ARCH_MXC auto-enable + ARCH_MXC_CANONICAL" + * ARM: Cleanup: Revert "ARM: IMX51: Unconditionally disable + CONFIG_GPIOLIB" + * ARM: Cleanup: Revert "ARM: IMX51: Minimal changes for USB to work on + 2.6.31" + * ARM: Cleanup: Revert "ARM: IMX51: Fix plat-mxc/timer.c to handle imx51" + * ARM: Cleanup: Revert "ARM: IMX51: Make it compile." + * ARM: Cleanup: Revert "ARM: IMX51: Clean-up the craziness of including + mxc_uart.h _everywhere_" + * ARM: Cleanup: Revert "ARM: IMX51: Move board-mx51* header files to the + correct location" + * ARM: Cleanup: Revert "ARM: IMX51: Changed from snd_card_new to + snd_card_create" + * ARM: Cleanup: Revert "ARM: IMX51: Fix up merge error in Kconfig" + * ARM: Cleanup: Revert "ARM: IMX51: mxc_timer_init prototype" + * ARM: Cleanup: Revert "ARM: IMX51: Removed the mxc_gpio_port structure." + * ARM: Cleanup: Revert "ARM: IMX51: Added external declaration for + mxc_map_io." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: Get to bus_id by calling dev_name." + * ARM: Cleanup: Revert "ARM: IMX51: snd_soc_machine structure replaced + with snd_soc_card." + * ARM: Cleanup: Revert "ARM: IMX51: codec structure was moved to the card + structure" + * ARM: Cleanup: Revert "ARM: IMX51: Hack to add defines for + DMA_MODE_READ/WRITE/MASK" + * ARM: Cleanup: Revert "ARM: IMX51: Add SoC and board support for + Freescale mx51 platform" + * Driver core: add new device to bus's list before probing + * [Upstream] (drop after 2.6.31) ALSA: hda - Reduce click noise at + power-saving + - LP: #381693, #399750, #380892 + + -- Andy Whitcroft Fri, 14 Aug 2009 11:32:23 +0100 + +linux (2.6.31-5.24) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Make video capture drivers compile + * [Config] IMX51: Config updates + + [ Andy Whitcroft ] + + * remove leftovers of dm-bbr + + [ Leann Ogasawara ] + + * Add pata_cs5535 to pata-modules + - LP: #318805 + + [ Luke Yelavich ] + + * [Config] CONFIG_PPC64=y for powerpc64-smp + * [Config] Set the maximum number of CPUs to 1024 for powerpc64-smp + * [Config] CONFIG_PPC_PS3=y for powerpc64-smp + * [Config] CONFIG_PPC_MAPLE=y on powerpc64-smp + * [Config] CONFIG_PPC_PASEMI=y on powerpc64-smp + * [Config] CONFIG_CPU_FREQ_PMAC64=y on powerpc64-smp + * [Config] Enable all PS3 drivers in powerpc64-smp + + [ Mario Limonciello ] + + * LIRC -- fix lirc-i2c 2.6.31 compilation + + [ Matthew Garrett ] + + * [Upstream] dell-laptop: Fix rfkill state queries + + [ Tim Gardner ] + + * [Config] Ignore armel ABI and module changes + * [Config] Update configs after rebase against 2.6.31-rc5 + + [ Upstream ] + + * Rebased to 2.6.31-rc5 + + -- Andy Whitcroft Tue, 28 Jul 2009 10:10:09 +0100 + +linux (2.6.31-4.23) karmic; urgency=low + + [ Andy Whitcroft ] + + * AUFS -- update to aufs2-30 20090727 + * [Config] enable AUFS FUSE support + + [ Luke Yelavich ] + + * [Config] CONFIG_JFS_FS=m on sparc + + [ Tim Gardner ] + + * [Upstream] dell-laptop: Fix rfkill state setting. + + -- Andy Whitcroft Mon, 27 Jul 2009 11:11:47 +0100 + +linux (2.6.31-4.22) karmic; urgency=low + + [ Amit Kucheria ] + + * ARM: IMX51: Add SoC and board support for Freescale mx51 platform + * ARM: IMX51: Move board-mx51* header files to the correct location + * ARM: IMX51: Clean-up the craziness of including mxc_uart.h _everywhere_ + * ARM: IMX51: Make it compile. + * ARM: IMX51: Unconditionally disable CONFIG_GPIOLIB + * ARM: IMX51: Make ARCH_MXC auto-enable ARCH_MXC_CANONICAL + * ARM: IMX51: Enable ZONE_DMA for ARCH_MXC + * ARM: IMX51: Compile-in the IMX51 cpufreq driver by default + * ARM: IMX51: Fix isl29003 HWMON driver for i2c changes + * ARM: USB: musb: Refer to musb_otg_timer_func under correct #ifdef + * ARM: staging: udlfb: Add vmalloc.h include + * UBUNTU [Config]: Bring imx51 config upto date with other flavours + + [ Brad Figg ] + + * ARM: IMX51: Hack to add defines for DMA_MODE_READ/WRITE/MASK + * ARM: IMX51: codec structure was moved to the card structure + * ARM: IMX51: snd_soc_machine structure replaced with snd_soc_card. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Get to bus_id by calling dev_name. + * ARM: IMX51: Added external declaration for mxc_map_io. + * ARM: IMX51: Removed the mxc_gpio_port structure. + * ARM: IMX51: mxc_timer_init prototype + * ARM: IMX51: Fix up merge error in Kconfig + * ARM: IMX51: Changed from snd_card_new to snd_card_create + + [ Dinh Nguyen ] + + * ARM: IMX51: Fix plat-mxc/timer.c to handle imx51 + * ARM: IMX51: Minimal changes for USB to work on 2.6.31 + * ARM: IMX51: Babbage 2.5 needs a different system revision + * ARM: IMX51: IPU irq handler deadlock fix + + [ Tim Gardner ] + + * [Config] Enabled CONFIG_CAN=m + - LP: #327243 + * [Config] Enabled CONFIG_SERIAL=m + - LP: #397189 + + -- Tim Gardner Fri, 24 Jul 2009 06:19:10 -0600 + +linux (2.6.31-4.21) karmic; urgency=low + + [ Amit Kucheria ] + + * dm-raid-4-5: Add missing brackets around test_bit() + + [ John Johansen ] + + * AppArmor: Fix change_profile failing lpn401931 + * AppArmor: Fix determination of forced AUDIT messages. + * AppArmor: Fix oops in auditing of the policy interface offset + + -- Andy Whitcroft Thu, 23 Jul 2009 19:18:30 +0100 + +linux (2.6.31-4.20) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: iscsitarget -- update to SVN revision r214 + * SAUCE: iscsitarget -- renable driver + * [Config] consolidate lpia/lpia and i386/generic configs + * [Config] enable CRYPTO modules for all architectures + * [Config] enable cryptoloop + * [Config] enable various filesystems for armel + * [Config] sync i386 generic and generic-pae + * [Config] add the 386 (486 processors and above) flavour + * [Config] re-set DEFAULT_MMAP_MIN_ADDR + - LP: #399914 + * add genconfigs/genportsconfigs to extract the built configs + * updateconfigs -- alter concatenation order allow easier updates + * intelfb -- INTELFB now conflicts with DRM_I915 + * printchanges -- rebase tree does not have stable tags use changelog + * AppArmor: fix argument size missmatch on 64 bit builds + + [ Ike Panhc ] + + * Ship bnx2x firmware in nic-modules udeb + - LP: #360966 + + [ Jeff Mahoney ] + + * AppArmor: fix build failure on ia64 + + [ John Johansen ] + + * AppArmour: ensure apparmor enabled parmater is off if AppArmor fails to + initialize. + * AppArmour: fix auditing of domain transitions to include target profile + information + * AppArmor: fix C99 violation + * AppArmor: revert reporting of create to write permission. + * SAUCE: Add config option to set a default LSM + * [Config] enable AppArmor by default + * AppArmor: Fix NULL pointer dereference oops in profile attachment. + + [ Keith Packard ] + + * SAUCE: drm/i915: Allow frame buffers up to 4096x4096 on 915/945 class + hardware + - LP: #351756 + + [ Luke Yelavich ] + + * [Config] add .o files found in arch/powerpc/lib to all powerpc kernel + header packages + - LP: #355344 + + [ Michael Casadevall ] + + * [Config] update SPARC config files to allow success build + + [ Scott James Remnant ] + + * SAUCE: trace: add trace_event for the open() syscall + + [ Stefan Bader ] + + * SAUCE: jfs: Fix early release of acl in jfs_get_acl + - LP: #396780 + + [ Tim Gardner ] + + * [Upstream] Fix Soltech TA12 volume hotkeys not sending key release + - LP: #397499 + * [Upstream] USB Option driver - Add USB ID for Novatel MC727/U727/USB727 + refresh + - LP: #365291 + * [Config] SSB/B44 are common across all arches/flavours. + + [ Upstream ] + + * Rebased to 2.6.31-rc4 + + -- Andy Whitcroft Thu, 23 Jul 2009 08:41:39 +0100 + +linux (2.6.31-3.19) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "[Config] Disabled NDISWRAPPER" + * ndiswrapper -- fix i386 compilation failures on cmpxchg8b + * AUFS -- export various core functions + * AUFS -- export various core functions -- fixes + * AUFS -- core filesystem + * AUFS -- track changes in v2.6.31 + * [Config] Enable AUFS + * droppped 'iwl3945: do not send scan command if channel count zero' as it + is already upstream but failed to auto-drop on rebase. + + [ Eric Paris ] + + * SAUCE: fsnotify: use def_bool in kconfig instead of letting the user + choose + * SAUCE: inotify: check filename before dropping repeat events + * SAUCE: fsnotify: fix inotify tail drop check with path entries + + -- Andy Whitcroft Tue, 14 Jul 2009 12:52:55 +0100 + +linux (2.6.31-3.18) karmic; urgency=low + + [ Andy Whitcroft ] + + * Revert "Add splice-2.6.23.patch from AUFS to export a symbol needed by + AUFS" + * Revert "Add put_filp.patch from AUFS to export a symbol needed by AUFS" + * Revert "Add sec_perm-2.6.24.patch from AUFS - export + security_inode_permission" + * clear out left over AUFS files and modifications + + [ Luke Yelavich ] + + * [Config] Enable CONFIG_USB_ISP116X_HCD on sparc + * SAUCE: Explicitly include header files to allow apparmor to build on + powerpc + * [Config] Enable CONFIG_BLK_DEV_IDECD on powerpc + + [ Tim Gardner ] + + * [Config] Dropped ubuntu/misc/wireless/acx + * [Config] Disabled NDISWRAPPER until the compile issues are fixed. + + [ Upstream ] + + * Rebased to 2.6.31-rc3 + + -- Andy Whitcroft Fri, 10 Jul 2009 18:59:33 +0100 + +linux (2.6.31-2.17) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_BLK_DEV_CRYPTOLOOP=m for sparc + * compcache -- remove redundant Kconfig entries part 2 + * compcache -- clean up CCFLAGS declarations + * [Config] enable AppArmor + * AppArmor: fix operator precidence issue in as_path_link + + [ John Johansen ] + + * AppArmor security module + * AppArmor: Correct mapping of file permissions. + * AppArmor: Turn auditing of ptrace on + + [ Luke Yelavich ] + + * [Config] disable CONFIG_DM_RAID45 on powerpc + + -- Andy Whitcroft Fri, 10 Jul 2009 15:02:05 +0100 + +linux (2.6.31-2.16) karmic; urgency=low + + [ Andy Whitcroft ] + + * compcache -- remove redundant Kconfig entries + added ignore and ignore.modules for all arches since the compcache update + changes the modules names as well as some compcache ABI values. + + [ Manoj Iyer ] + + * SAUCE: updated dm-raid45 module version to 2009.04.24 (2.6.30-rc3) + * SAUCE: update compcache version to 0.5.3 + + [ Tim Gardner ] + + * [Config]: Fix sparc FTBS by adding ignore.modules + + -- Tim Gardner Mon, 06 Jul 2009 13:35:29 -0600 + +linux (2.6.31-2.15) karmic; urgency=low + + [ Andy Whitcroft ] + + * SAUCE: default ATI Radeon KMS to off until userspace catches up + * [Config] Update configs following rebase to 2.6.31-rc2 + * [Config] update ports configs following update to 2.6.31-rc2 + + [ Luke Yelavich ] + + * [Config] powerpc - Disable CONFIG_RDS + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + [ Upstream Kernel Changes ] + + * rebased to mainline 2.6.31-rc2 + + -- Andy Whitcroft Sat, 04 Jul 2009 17:39:13 +0100 + +linux (2.6.31-1.14) karmic; urgency=low + + [ Andy Whitcroft ] + + * update ndiswrapper to 1.55 + * remove leftovers of gfs + * [Config] powerpc: enable CONFIG_PPC_DISABLE_WERROR + + [ Luke Yelavich ] + + * [Config] re-enable and build the ide-pmac driver into powerpc kernels + * [Config] Build the ServerWorks Frodo / Apple K2 SATA driver into the + kernel + + [ Manoj Iyer ] + + * Remove snd-bt-sco ubuntu driver + + [ Michael Casadevall ] + + * [Config] updates ia64 config and d-i folders to allow succesful build + * [Config] Update powerpc and sparc for 2.6.31 + + [ Upstream Kernel Changes ] + + * intel-iommu: fix Identity Mapping to be arch independent + - LP: #384695 + * ACPI: video: prevent NULL deref in acpi_get_pci_dev() + + -- Andy Whitcroft Tue, 30 Jun 2009 17:47:32 +0100 + +linux (2.6.31-1.13) karmic; urgency=low + + [ Andy Whitcroft ] + + * REBASE: rebased to mainline 2.6.31-rc1 + - "UBUNTU: SAUCE: UHCI USB quirk for resume" + no longer applies, using deprecated interfaces, LPIA only, dropped + - "UBUNTU: SAUCE: Mask off garbage in Dell WMI scan code data" + changes now upstream, dropped + * [Config] Update configs following rebase to 2.6.31-rc1 + * [Config] update ports configs following update to 2.6.31-rc1 + + * [Config] disable broken staging driver CONFIG_STLC45XX + * SAUCE: fix compcache to use updates accessors + * [Config] disable staging driver CONFIG_VT6655 + * SAUCE: fix DRDB to use updates accessors + * [Disable] ndiswrapper needs update + * [Disable] LIRC I2C needs update + * [Disable] CONFIG_LENOVO_SL_LAPTOP needs update + * [Config] disable I2C_DESIGNWARE does not compile + * [Config] disable CONFIG_TLSUP for lpia + * [Config] disable CONFIG_FB_UDL for arm + * SAUCE: disable adding scsi headers to linux-libc-dev + + [ Mario Limonciello ] + + * SAUCE: Add LIRC drivers + + -- Andy Whitcroft Thu, 25 Jun 2009 12:06:22 +0100 + +linux (2.6.30-10.12) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] split out the ports configs into their own family + * [Config] update configs following introduction of ports family + + [ Upstream Kernel Changes ] + + * Revert "Rename linux-doc-PKGVER to linux-doc and clean up its + description". Fixes linux-doc package name conflicts for now. + - LP: #382115 + + -- Tim Gardner Mon, 22 Jun 2009 09:17:14 -0600 + +linux (2.6.30-10.11) karmic; urgency=low + + [ Amit Kucheria ] + + * [Config] Comment splitconfig.pl and misc cleanup + * [Config] Rename all configs to the new naming scheme + * [Config] Splitconfig rework + * [Config] Rename scripts/misc/oldconfig to kernelconfig + * [Config] Fix build system for new config split + * [Config] Run updateconfigs after the splitconfig rework + + [ Andy Whitcroft ] + + * Revert "SAUCE: Default to i915.modeset=0 if CONFIG_DRM_I915_KMS=y" + * [Config] standardise CONFIG_STAGING=y + * [Config] standardise CONFIG_RD_LZMA=y + * [Config] CONFIG_PCI_IOV=y + * [Config] CONFIG_PCI_STUB=m + * [Config] merge kernel configs more agressively + + [ Colin Watson ] + + * [Config] Run kernel-wedge in $(builddir) rather than at the top level + * [Config] Add support for including firmware in udebs + * [Config] Ship bnx2 firmware in nic-modules udeb + - LP: #384861 + + [ Luke Yelavich ] + + * [Config] ports - Import of ports architectures into kernel packaging + infrastructure + * [Config] ports - Do not update ports kernel configurations by default + * [Config] ports - Disable ABI checking for ports architectures + * [Config] ports - Build drivers in ubuntu sub-directory on powerpc + * [Config] ports - Add control.d/vars.* files for ports architectures + * [Config] ports - Add ports architectures for linux-libc-dev + * [Config] ports - Create powerpc specific message-modules and + block-modules udebs + * [Config] ports - Add configuration files for ports architectures + + [ Manoj Iyer ] + + * [Config] Enable CONFIG_BLK_DEV_AEC62XX=m for amd64 and i386 + - LP: #329864 + + [ Michael Casadevall ] + + * [Config] ports - Fix compression of kernels + + [ Stefan Bader ] + + * [Upstream] mmc: prevent dangling block device from accessing stale + queues + - LP: #383668 + + [ Tim Gardner ] + + * [Config] Recommend grub-pc in linux-image + - LP: #385741 + * [Config] Implement i386 generic and generic-pae flavours + * [Config] ports - Add control info after integrating ports arches + * [Config] Removed auto-generated files from git + * [Config] Added netxen_nic to nic-modules + - LP: #389603 + + [ Matt Zimmerman ] + + * Rename linux-doc-PKGVER to linux-doc and clean up its description + - LP: #382115 + + -- Tim Gardner Mon, 15 Jun 2009 14:38:26 -0600 + +linux (2.6.30-9.10) karmic; urgency=low + + [ Andy Whitcroft ] + + * [Config] CONFIG_SECURITY_TOMOYO=y (amd64, i386, lpia) + * [Config] CONFIG_KEXEC_JUMP=y (amd64, lpia) + * [Config] CONFIG_LENOVO_SL_LAPTOP=m (amd64, lpia) + * [Config] CONFIG_POHMELFS_CRYPTO=y (i386, amd64) + * [Config] CONFIG_SERIAL_MAX3100=m (i386, amd64, lpia) + * [Config] CONFIG_VIDEO_GO7007=m (amd64, i386) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30 final + + -- Andy Whitcroft Fri, 05 Jun 2009 11:42:53 +0100 + +linux (2.6.30-8.9) karmic; urgency=low + + [ Andy Whitcroft ] + + * Config update removed the following options: + CONFIG_EDAC_AMD8111=m + CONFIG_EDAC_AMD8131=m + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc8 + + -- Andy Whitcroft Wed, 03 Jun 2009 09:21:13 +0100 + +linux (2.6.30-7.8) karmic; urgency=low + + [ Andy Whitcroft ] + + * Enabled NEW configration options: + Paravirtualization layer for spinlocks (PARAVIRT_SPINLOCKS) [N/y/?] Y + Cisco FNIC Driver (FCOE_FNIC) [N/m/y/?] M + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc7 + + -- Andy Whitcroft Sat, 23 May 2009 23:47:24 +0100 + +linux (2.6.30-6.7) karmic; urgency=low + + [ Andy Whitcroft ] + + * Dropped: UBUNTU: SAUCE: input: Blacklist digitizers from joydev.c (now + upstream) + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc6 + + -- Andy Whitcroft Mon, 18 May 2009 18:05:54 +0100 + +linux (2.6.30-5.6) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enable Keyspan USB serial device firmware in kernel module + - LP: #334285 + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc5 + + -- Tim Gardner Mon, 11 May 2009 12:02:16 -0600 + +linux (2.6.30-4.5) karmic; urgency=low + + [ Colin Watson ] + + * Build-Conflict with findutils (= 4.4.1-1ubuntu1), to avoid + /usr/include/asm/* going missing + - LP: #373214 + + -- Stefan Bader Fri, 08 May 2009 11:09:08 +0200 + +linux (2.6.30-3.4) karmic; urgency=low + + [ Kees Cook ] + + * SAUCE: [x86] implement cs-limit nx-emulation for ia32 + - LP: #369978 + + [ Stefan Bader ] + + * SAUCE: input: Blacklist digitizers from joydev.c + - LP: #300143 + + -- Tim Gardner Fri, 01 May 2009 14:00:42 -0600 + +linux (2.6.30-2.3) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] Enabled CC_STACKPROTECTOR=y for all x86en + - LP: #369152 + * SAUCE: Default to i915_modeset=0 if CONFIG_DRM_I915_KMS=y + * [Config] CONFIG_DRM_I915_KMS=y + * [Config] Set CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR to appropriate ARCH + minimums + + [ Upstream Kernel Changes ] + + * rebased to 2.6.30-rc4 + + -- Tim Gardner Thu, 30 Apr 2009 09:17:05 -0600 + +linux (2.6.30-1.2) karmic; urgency=low + + [ Tim Gardner ] + + * [Config] armel: disable staging drivers, fixes FTBS + * [Config] armel imx51: Disable CONFIG_MTD_NAND_MXC, fixes FTBS + + [ Upstream Kernel Changes ] + + * mpt2sas: Change reset_type enum to avoid namespace collision. + Submitted upstream. + + -- Tim Gardner Tue, 28 Apr 2009 16:54:41 -0600 + +linux (2.6.30-1.1) karmic; urgency=low + + * Initial release after rebasing against v2.6.30-rc3 + + -- Tim Gardner Thu, 12 Mar 2009 19:16:07 -0600 --- linux-ec2-2.6.32.orig/debian.ec2/rules.d/amd64.mk +++ linux-ec2-2.6.32/debian.ec2/rules.d/amd64.mk @@ -0,0 +1,12 @@ +build_arch = x86_64 +header_arch = $(build_arch) +asm_link = $(build_arch) +defconfig = defconfig +flavours = ec2 +build_image = vmlinuz +kernel_file = arch/$(build_arch)/boot/vmlinuz +install_file = vmlinuz +loader = grub + +do_libc_dev_package = false +do_tools = false --- linux-ec2-2.6.32.orig/debian.ec2/rules.d/i386.mk +++ linux-ec2-2.6.32/debian.ec2/rules.d/i386.mk @@ -0,0 +1,12 @@ +build_arch = x86 +header_arch = x86 +asm_link = x86 +defconfig = defconfig +flavours = ec2 +build_image = vmlinuz +kernel_file = arch/$(build_arch)/boot/vmlinuz +install_file = vmlinuz +loader = grub + +do_libc_dev_package = false +do_tools = false --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-patch-2.6.32.9-10 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-patch-2.6.32.9-10 @@ -0,0 +1,175 @@ +From: Greg Kroah-Hartman +Subject: Linux 2.6.32.10 +Patch-mainline: 2.6.32.10 + +Signed-off-by: Greg Kroah-Hartman + +Automatically created from "patches.kernel.org/patch-2.6.32.9-10" by xen-port-patches.py + +--- sle11sp1-2010-09-22.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-11-06 10:52:09.000000000 +0100 ++++ sle11sp1-2010-09-22/arch/x86/include/mach-xen/asm/pgalloc.h 2010-03-22 12:47:01.000000000 +0100 +@@ -27,6 +27,11 @@ pmd_t *early_get_pmd(unsigned long va); + #endif + + /* ++ * Flags to use when allocating a user page table page. ++ */ ++extern gfp_t __userpte_alloc_gfp; ++ ++/* + * Allocate and free page tables. + */ + extern pgd_t *pgd_alloc(struct mm_struct *); +--- sle11sp1-2010-09-22.orig/arch/x86/kernel/apic/io_apic-xen.c 2010-08-06 17:02:21.000000000 +0200 ++++ sle11sp1-2010-09-22/arch/x86/kernel/apic/io_apic-xen.c 2010-08-06 17:02:25.000000000 +0200 +@@ -1626,6 +1626,60 @@ static void __init setup_IO_APIC_irqs(vo + " (apicid-pin) not connected\n"); + } + ++/* ++ * for the gsit that is not in first ioapic ++ * but could not use acpi_register_gsi() ++ * like some special sci in IBM x3330 ++ */ ++void setup_IO_APIC_irq_extra(u32 gsi) ++{ ++ int apic_id = 0, pin, idx, irq; ++ int node = cpu_to_node(boot_cpu_id); ++ struct irq_desc *desc; ++ struct irq_cfg *cfg; ++ ++ /* ++ * Convert 'gsi' to 'ioapic.pin'. ++ */ ++ apic_id = mp_find_ioapic(gsi); ++ if (apic_id < 0) ++ return; ++ ++ pin = mp_find_ioapic_pin(apic_id, gsi); ++ idx = find_irq_entry(apic_id, pin, mp_INT); ++ if (idx == -1) ++ return; ++ ++ irq = pin_2_irq(idx, apic_id, pin); ++#ifdef CONFIG_XEN ++ if (irq < PIRQ_BASE || irq >= PIRQ_BASE + nr_pirqs) ++ return; ++#endif ++#ifdef CONFIG_SPARSE_IRQ ++ desc = irq_to_desc(irq); ++ if (desc) ++ return; ++#endif ++ desc = irq_to_desc_alloc_node(irq, node); ++ if (!desc) { ++ printk(KERN_INFO "can not get irq_desc for %d\n", irq); ++ return; ++ } ++ ++ cfg = desc->chip_data; ++ add_pin_to_irq_node(cfg, node, apic_id, pin); ++ ++ if (test_bit(pin, mp_ioapic_routing[apic_id].pin_programmed)) { ++ pr_debug("Pin %d-%d already programmed\n", ++ mp_ioapics[apic_id].apicid, pin); ++ return; ++ } ++ set_bit(pin, mp_ioapic_routing[apic_id].pin_programmed); ++ ++ setup_IO_APIC_irq(apic_id, pin, irq, desc, ++ irq_trigger(idx), irq_polarity(idx)); ++} ++ + #ifndef CONFIG_XEN + /* + * Set up the timer pin, possibly with the 8259A-master behind. +@@ -3273,12 +3327,9 @@ unsigned int create_irq_nr(unsigned int + } + spin_unlock_irqrestore(&vector_lock, flags); + +- if (irq > 0) { +- dynamic_irq_init(irq); +- /* restore it, in case dynamic_irq_init clear it */ +- if (desc_new) +- desc_new->chip_data = cfg_new; +- } ++ if (irq > 0) ++ dynamic_irq_init_keep_chip_data(irq); ++ + return irq; + } + +@@ -3301,17 +3352,12 @@ void destroy_irq(unsigned int irq) + { + unsigned long flags; + struct irq_cfg *cfg; +- struct irq_desc *desc; + +- /* store it, in case dynamic_irq_cleanup clear it */ +- desc = irq_to_desc(irq); +- cfg = desc->chip_data; +- dynamic_irq_cleanup(irq); +- /* connect back irq_cfg */ +- desc->chip_data = cfg; ++ dynamic_irq_cleanup_keep_chip_data(irq); + + free_irte(irq); + spin_lock_irqsave(&vector_lock, flags); ++ cfg = irq_to_desc(irq)->chip_data; + __clear_irq_vector(irq, cfg); + spin_unlock_irqrestore(&vector_lock, flags); + } +--- sle11sp1-2010-09-22.orig/arch/x86/mm/pgtable-xen.c 2010-09-22 16:14:48.000000000 +0200 ++++ sle11sp1-2010-09-22/arch/x86/mm/pgtable-xen.c 2010-09-22 16:19:06.000000000 +0200 +@@ -10,6 +10,14 @@ + + #define PGALLOC_GFP GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO + ++#ifdef CONFIG_HIGHPTE ++#define PGALLOC_USER_GFP __GFP_HIGHMEM ++#else ++#define PGALLOC_USER_GFP 0 ++#endif ++ ++gfp_t __userpte_alloc_gfp = PGALLOC_GFP | PGALLOC_USER_GFP; ++ + pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) + { + pte_t *pte = (pte_t *)__get_free_page(PGALLOC_GFP); +@@ -28,11 +36,7 @@ pgtable_t pte_alloc_one(struct mm_struct + { + struct page *pte; + +-#ifdef CONFIG_HIGHPTE +- pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0); +-#else +- pte = alloc_pages(PGALLOC_GFP, 0); +-#endif ++ pte = alloc_pages(__userpte_alloc_gfp, 0); + if (pte) { + pgtable_page_ctor(pte); + SetPageForeign(pte, _pte_free); +@@ -41,6 +45,23 @@ pgtable_t pte_alloc_one(struct mm_struct + return pte; + } + ++static int __init setup_userpte(char *arg) ++{ ++ if (!arg) ++ return -EINVAL; ++ ++ /* ++ * "userpte=nohigh" disables allocation of user pagetables in ++ * high memory. ++ */ ++ if (strcmp(arg, "nohigh") == 0) ++ __userpte_alloc_gfp &= ~__GFP_HIGHMEM; ++ else ++ return -EINVAL; ++ return 0; ++} ++early_param("userpte", setup_userpte); ++ + void __pte_free(pgtable_t pte) + { + if (!PageHighMem(pte)) { --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-kdb-x86 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-kdb-x86 @@ -0,0 +1,42 @@ +From: SGI KDB Development +Subject: kdb-v4.4-2.6.27-rc8-x86-1 +References: FATE#303971 +X-URL: ftp://oss.sgi.com/www/projects/kdb/download/v4.4/ + +The KDB x86 code. + +Acked-by: Bernhard Walle + +Automatically created from "patches.suse/kdb-x86" by xen-port-patches.py + +--- head-2009-10-12.orig/arch/x86/kdb/kdba_bt.c 2009-10-12 15:43:36.000000000 +0200 ++++ head-2009-10-12/arch/x86/kdb/kdba_bt.c 2009-10-13 17:01:44.000000000 +0200 +@@ -721,7 +721,7 @@ static const char *bb_spurious[] = { + /* relocate_kernel */ + "relocate_new_kernel", + #endif /* CONFIG_KEXEC */ +-#ifdef CONFIG_XEN ++#ifdef CONFIG_PARAVIRT_XEN + /* arch/i386/xen/xen-asm.S */ + "xen_irq_enable_direct_end", + "xen_irq_disable_direct_end", +@@ -4873,7 +4873,7 @@ kdb_bb_all(int argc, const char **argv) + #ifdef CONFIG_MATH_EMULATION + " CONFIG_MATH_EMULATION" + #endif +-#ifdef CONFIG_XEN ++#ifdef CONFIG_PARAVIRT_XEN + " CONFIG_XEN" + #endif + #ifdef CONFIG_DEBUG_INFO +--- head-2009-10-12.orig/arch/x86/kdb/kdba_support.c 2009-10-12 11:47:00.000000000 +0200 ++++ head-2009-10-12/arch/x86/kdb/kdba_support.c 2009-10-13 17:01:44.000000000 +0200 +@@ -1528,7 +1528,7 @@ extern void halt_current_cpu(struct pt_r + + void kdba_kdump_shutdown_slave(struct pt_regs *regs) + { +-#ifndef CONFIG_XEN ++#ifndef CONFIG_PARAVIRT_XEN + halt_current_cpu(regs); + #endif /* CONFIG_XEN */ + } --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-kconfig-compat +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-kconfig-compat @@ -0,0 +1,32 @@ +From: jbeulich@novell.com +Subject: add 3.2.0-compatibility configure option +Patch-mainline: obsolete + +--- head-2009-12-16.orig/drivers/xen/Kconfig 2009-12-18 12:30:34.000000000 +0100 ++++ head-2009-12-16/drivers/xen/Kconfig 2009-12-18 12:30:46.000000000 +0100 +@@ -319,6 +319,15 @@ choice + config XEN_COMPAT_030100_AND_LATER + bool "3.1.0 and later" + ++ config XEN_COMPAT_030200_AND_LATER ++ bool "3.2.0 and later" ++ ++ config XEN_COMPAT_030300_AND_LATER ++ bool "3.3.0 and later" ++ ++ config XEN_COMPAT_030400_AND_LATER ++ bool "3.4.0 and later" ++ + config XEN_COMPAT_LATEST_ONLY + bool "no compatibility code" + +@@ -327,6 +336,9 @@ endchoice + config XEN_COMPAT + hex + default 0xffffff if XEN_COMPAT_LATEST_ONLY ++ default 0x030400 if XEN_COMPAT_030400_AND_LATER ++ default 0x030300 if XEN_COMPAT_030300_AND_LATER ++ default 0x030200 if XEN_COMPAT_030200_AND_LATER + default 0x030100 if XEN_COMPAT_030100_AND_LATER + default 0x030004 if XEN_COMPAT_030004_AND_LATER + default 0x030002 if XEN_COMPAT_030002_AND_LATER --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-patch-2.6.20 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-patch-2.6.20 @@ -0,0 +1,7156 @@ +From: www.kernel.org +Subject: Linux 2.6.20 +Patch-mainline: 2.6.20 + +Automatically created from "patches.kernel.org/patch-2.6.20" by xen-port-patches.py + +Acked-by: jbeulich@novell.com + +--- head-2010-01-18.orig/arch/x86/Kconfig 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/Kconfig 2009-11-20 11:00:05.000000000 +0100 +@@ -1657,6 +1657,7 @@ config PHYSICAL_START + + config RELOCATABLE + bool "Build a relocatable kernel" ++ depends on !X86_XEN + default y + ---help--- + This builds a kernel image that retains relocation information +@@ -1679,7 +1680,8 @@ config X86_NEED_RELOCS + + config PHYSICAL_ALIGN + hex +- prompt "Alignment value to which kernel should be aligned" if X86_32 ++ prompt "Alignment value to which kernel should be aligned" if X86_32 && !XEN ++ default 0x2000 if XEN + default "0x1000000" + range 0x2000 0x1000000 + ---help--- +--- head-2010-01-18.orig/arch/x86/kernel/asm-offsets_32.c 2009-12-04 10:44:46.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/asm-offsets_32.c 2009-11-06 10:46:27.000000000 +0100 +@@ -55,6 +55,7 @@ void foo(void) + OFFSET(TI_exec_domain, thread_info, exec_domain); + OFFSET(TI_flags, thread_info, flags); + OFFSET(TI_status, thread_info, status); ++ OFFSET(TI_cpu, thread_info, cpu); + OFFSET(TI_preempt_count, thread_info, preempt_count); + OFFSET(TI_addr_limit, thread_info, addr_limit); + OFFSET(TI_restart_block, thread_info, restart_block); +@@ -110,6 +111,11 @@ void foo(void) + + OFFSET(crypto_tfm_ctx_offset, crypto_tfm, __crt_ctx); + ++#ifdef CONFIG_XEN ++ BLANK(); ++ OFFSET(XEN_START_mfn_list, start_info, mfn_list); ++#endif ++ + #ifdef CONFIG_PARAVIRT + BLANK(); + OFFSET(PARAVIRT_enabled, pv_info, paravirt_enabled); +--- head-2010-01-18.orig/arch/x86/kernel/cpu/common-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/common-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -22,6 +22,7 @@ + #define phys_pkg_id(a,b) a + #endif + #endif ++#include + #include + + #include "cpu.h" +@@ -29,10 +30,8 @@ + DEFINE_PER_CPU(struct Xgt_desc_struct, cpu_gdt_descr); + EXPORT_PER_CPU_SYMBOL(cpu_gdt_descr); + +-#ifndef CONFIG_XEN +-DEFINE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); +-EXPORT_PER_CPU_SYMBOL(cpu_16bit_stack); +-#endif ++struct i386_pda *_cpu_pda[NR_CPUS] __read_mostly; ++EXPORT_SYMBOL(_cpu_pda); + + static int cachesize_override __cpuinitdata = -1; + static int disable_x86_fxsr __cpuinitdata; +@@ -60,7 +59,7 @@ static struct cpu_dev __cpuinitdata defa + .c_init = default_init, + .c_vendor = "Unknown", + }; +-static struct cpu_dev * this_cpu = &default_cpu; ++static struct cpu_dev * this_cpu __cpuinitdata = &default_cpu; + + static int __init cachesize_setup(char *str) + { +@@ -242,29 +241,14 @@ static int __cpuinit have_cpuid_p(void) + return flag_is_changeable_p(X86_EFLAGS_ID); + } + +-/* Do minimum CPU detection early. +- Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment. +- The others are not touched to avoid unwanted side effects. +- +- WARNING: this function is only called on the BP. Don't add code here +- that is supposed to run on all CPUs. */ +-static void __init early_cpu_detect(void) ++void __init cpu_detect(struct cpuinfo_x86 *c) + { +- struct cpuinfo_x86 *c = &boot_cpu_data; +- +- c->x86_cache_alignment = 32; +- +- if (!have_cpuid_p()) +- return; +- + /* Get vendor name */ + cpuid(0x00000000, &c->cpuid_level, + (int *)&c->x86_vendor_id[0], + (int *)&c->x86_vendor_id[8], + (int *)&c->x86_vendor_id[4]); + +- get_cpu_vendor(c, 1); +- + c->x86 = 4; + if (c->cpuid_level >= 0x00000001) { + u32 junk, tfms, cap0, misc; +@@ -281,6 +265,26 @@ static void __init early_cpu_detect(void + } + } + ++/* Do minimum CPU detection early. ++ Fields really needed: vendor, cpuid_level, family, model, mask, cache alignment. ++ The others are not touched to avoid unwanted side effects. ++ ++ WARNING: this function is only called on the BP. Don't add code here ++ that is supposed to run on all CPUs. */ ++static void __init early_cpu_detect(void) ++{ ++ struct cpuinfo_x86 *c = &boot_cpu_data; ++ ++ c->x86_cache_alignment = 32; ++ ++ if (!have_cpuid_p()) ++ return; ++ ++ cpu_detect(c); ++ ++ get_cpu_vendor(c, 1); ++} ++ + static void __cpuinit generic_identify(struct cpuinfo_x86 * c) + { + u32 tfms, xlvl; +@@ -317,6 +321,8 @@ static void __cpuinit generic_identify(s + c->apicid = (ebx >> 24) & 0xFF; + #endif + #endif ++ if (c->x86_capability[0] & (1<<19)) ++ c->x86_clflush_size = ((ebx >> 8) & 0xff) * 8; + } else { + /* Have CPUID level 0 only - unheard of */ + c->x86 = 4; +@@ -381,6 +387,7 @@ void __cpuinit identify_cpu(struct cpuin + c->x86_vendor_id[0] = '\0'; /* Unset */ + c->x86_model_id[0] = '\0'; /* Unset */ + c->x86_max_cores = 1; ++ c->x86_clflush_size = 32; + memset(&c->x86_capability, 0, sizeof c->x86_capability); + + if (!have_cpuid_p()) { +@@ -601,61 +608,23 @@ void __init early_cpu_init(void) + #endif + } + +-static void __cpuinit cpu_gdt_init(const struct Xgt_desc_struct *gdt_descr) ++/* Make sure %gs is initialized properly in idle threads */ ++struct pt_regs * __devinit idle_regs(struct pt_regs *regs) + { +- unsigned long frames[16]; +- unsigned long va; +- int f; +- +- for (va = gdt_descr->address, f = 0; +- va < gdt_descr->address + gdt_descr->size; +- va += PAGE_SIZE, f++) { +- frames[f] = virt_to_mfn(va); +- make_lowmem_page_readonly( +- (void *)va, XENFEAT_writable_descriptor_tables); +- } +- if (HYPERVISOR_set_gdt(frames, (gdt_descr->size + 1) / 8)) +- BUG(); ++ memset(regs, 0, sizeof(struct pt_regs)); ++ regs->xgs = __KERNEL_PDA; ++ return regs; + } + +-/* +- * cpu_init() initializes state that is per-CPU. Some data is already +- * initialized (naturally) in the bootstrap process, such as the GDT +- * and IDT. We reload them nevertheless, this function acts as a +- * 'CPU state barrier', nothing should get across. +- */ +-void __cpuinit cpu_init(void) ++static __cpuinit int alloc_gdt(int cpu) + { +- int cpu = smp_processor_id(); +-#ifndef CONFIG_X86_NO_TSS +- struct tss_struct * t = &per_cpu(init_tss, cpu); +-#endif +- struct thread_struct *thread = ¤t->thread; +- struct desc_struct *gdt; + struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu); ++ struct desc_struct *gdt; ++ struct i386_pda *pda; + +- if (cpu_test_and_set(cpu, cpu_initialized)) { +- printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); +- for (;;) local_irq_enable(); +- } +- printk(KERN_INFO "Initializing CPU#%d\n", cpu); +- +- if (cpu_has_vme || cpu_has_de) +- clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); +- if (tsc_disable && cpu_has_tsc) { +- printk(KERN_NOTICE "Disabling TSC...\n"); +- /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/ +- clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability); +- set_in_cr4(X86_CR4_TSD); +- } ++ gdt = (struct desc_struct *)cpu_gdt_descr->address; ++ pda = cpu_pda(cpu); + +-#ifndef CONFIG_XEN +- /* The CPU hotplug case */ +- if (cpu_gdt_descr->address) { +- gdt = (struct desc_struct *)cpu_gdt_descr->address; +- memset(gdt, 0, PAGE_SIZE); +- goto old_gdt; +- } + /* + * This is a horrible hack to allocate the GDT. The problem + * is that cpu_init() is called really early for the boot CPU +@@ -663,54 +632,141 @@ void __cpuinit cpu_init(void) + * CPUs, when bootmem will have gone away + */ + if (NODE_DATA(0)->bdata->node_bootmem_map) { +- gdt = (struct desc_struct *)alloc_bootmem_pages(PAGE_SIZE); +- /* alloc_bootmem_pages panics on failure, so no check */ ++ BUG_ON(gdt != NULL || pda != NULL); ++ ++ gdt = alloc_bootmem_pages(PAGE_SIZE); ++ pda = alloc_bootmem(sizeof(*pda)); ++ /* alloc_bootmem(_pages) panics on failure, so no check */ ++ + memset(gdt, 0, PAGE_SIZE); ++ memset(pda, 0, sizeof(*pda)); + } else { +- gdt = (struct desc_struct *)get_zeroed_page(GFP_KERNEL); +- if (unlikely(!gdt)) { +- printk(KERN_CRIT "CPU%d failed to allocate GDT\n", cpu); +- for (;;) +- local_irq_enable(); ++ /* GDT and PDA might already have been allocated if ++ this is a CPU hotplug re-insertion. */ ++ if (gdt == NULL) ++ gdt = (struct desc_struct *)get_zeroed_page(GFP_KERNEL); ++ ++ if (pda == NULL) ++ pda = kmalloc_node(sizeof(*pda), GFP_KERNEL, cpu_to_node(cpu)); ++ ++ if (unlikely(!gdt || !pda)) { ++ free_pages((unsigned long)gdt, 0); ++ kfree(pda); ++ return 0; + } + } +-old_gdt: ++ ++ cpu_gdt_descr->address = (unsigned long)gdt; ++ cpu_pda(cpu) = pda; ++ ++ return 1; ++} ++ ++/* Initial PDA used by boot CPU */ ++struct i386_pda boot_pda = { ++ ._pda = &boot_pda, ++ .cpu_number = 0, ++ .pcurrent = &init_task, ++}; ++ ++static inline void set_kernel_gs(void) ++{ ++ /* Set %gs for this CPU's PDA. Memory clobber is to create a ++ barrier with respect to any PDA operations, so the compiler ++ doesn't move any before here. */ ++ asm volatile ("mov %0, %%gs" : : "r" (__KERNEL_PDA) : "memory"); ++} ++ ++/* Initialize the CPU's GDT and PDA. The boot CPU does this for ++ itself, but secondaries find this done for them. */ ++__cpuinit int init_gdt(int cpu, struct task_struct *idle) ++{ ++ struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu); ++ struct desc_struct *gdt; ++ struct i386_pda *pda; ++ ++ /* For non-boot CPUs, the GDT and PDA should already have been ++ allocated. */ ++ if (!alloc_gdt(cpu)) { ++ printk(KERN_CRIT "CPU%d failed to allocate GDT or PDA\n", cpu); ++ return 0; ++ } ++ ++ gdt = (struct desc_struct *)cpu_gdt_descr->address; ++ pda = cpu_pda(cpu); ++ ++ BUG_ON(gdt == NULL || pda == NULL); ++ + /* + * Initialize the per-CPU GDT with the boot GDT, + * and set up the GDT descriptor: + */ + memcpy(gdt, cpu_gdt_table, GDT_SIZE); ++ cpu_gdt_descr->size = GDT_SIZE - 1; + +- /* Set up GDT entry for 16bit stack */ +- *(__u64 *)(&gdt[GDT_ENTRY_ESPFIX_SS]) |= +- ((((__u64)stk16_off) << 16) & 0x000000ffffff0000ULL) | +- ((((__u64)stk16_off) << 32) & 0xff00000000000000ULL) | +- (CPU_16BIT_STACK_SIZE - 1); ++ pack_descriptor((u32 *)&gdt[GDT_ENTRY_PDA].a, ++ (u32 *)&gdt[GDT_ENTRY_PDA].b, ++ (unsigned long)pda, sizeof(*pda) - 1, ++ 0x80 | DESCTYPE_S | 0x2, 0); /* present read-write data segment */ ++ ++ memset(pda, 0, sizeof(*pda)); ++ pda->_pda = pda; ++ pda->cpu_number = cpu; ++ pda->pcurrent = idle; + +- cpu_gdt_descr->size = GDT_SIZE - 1; +- cpu_gdt_descr->address = (unsigned long)gdt; +-#else +- if (cpu == 0 && cpu_gdt_descr->address == 0) { +- gdt = (struct desc_struct *)alloc_bootmem_pages(PAGE_SIZE); +- /* alloc_bootmem_pages panics on failure, so no check */ +- memset(gdt, 0, PAGE_SIZE); ++ return 1; ++} + +- memcpy(gdt, cpu_gdt_table, GDT_SIZE); +- +- cpu_gdt_descr->size = GDT_SIZE; +- cpu_gdt_descr->address = (unsigned long)gdt; ++void __cpuinit cpu_set_gdt(int cpu) ++{ ++ struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu); ++ unsigned long va, frames[16]; ++ int f; ++ ++ for (va = cpu_gdt_descr->address, f = 0; ++ va < cpu_gdt_descr->address + cpu_gdt_descr->size; ++ va += PAGE_SIZE, f++) { ++ frames[f] = virt_to_mfn(va); ++ make_lowmem_page_readonly( ++ (void *)va, XENFEAT_writable_descriptor_tables); + } ++ BUG_ON(HYPERVISOR_set_gdt(frames, (cpu_gdt_descr->size + 1) / 8)); ++ ++ set_kernel_gs(); ++} ++ ++/* Common CPU init for both boot and secondary CPUs */ ++static void __cpuinit _cpu_init(int cpu, struct task_struct *curr) ++{ ++#ifndef CONFIG_X86_NO_TSS ++ struct tss_struct * t = &per_cpu(init_tss, cpu); + #endif ++ struct thread_struct *thread = &curr->thread; ++ ++ if (cpu_test_and_set(cpu, cpu_initialized)) { ++ printk(KERN_WARNING "CPU#%d already initialized!\n", cpu); ++ for (;;) local_irq_enable(); ++ } + +- cpu_gdt_init(cpu_gdt_descr); ++ printk(KERN_INFO "Initializing CPU#%d\n", cpu); ++ ++ if (cpu_has_vme || cpu_has_de) ++ clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); ++ if (tsc_disable && cpu_has_tsc) { ++ printk(KERN_NOTICE "Disabling TSC...\n"); ++ /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/ ++ clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability); ++ set_in_cr4(X86_CR4_TSD); ++ } + + /* + * Set up and load the per-CPU TSS and LDT + */ + atomic_inc(&init_mm.mm_count); +- current->active_mm = &init_mm; +- BUG_ON(current->mm); +- enter_lazy_tlb(&init_mm, current); ++ curr->active_mm = &init_mm; ++ if (curr->mm) ++ BUG(); ++ enter_lazy_tlb(&init_mm, curr); + + load_esp0(t, thread); + +@@ -721,8 +777,8 @@ old_gdt: + __set_tss_desc(cpu, GDT_ENTRY_DOUBLEFAULT_TSS, &doublefault_tss); + #endif + +- /* Clear %fs and %gs. */ +- asm volatile ("movl %0, %%fs; movl %0, %%gs" : : "r" (0)); ++ /* Clear %fs. */ ++ asm volatile ("mov %0, %%fs" : : "r" (0)); + + /* Clear all 6 debug registers: */ + set_debugreg(0, 0); +@@ -740,6 +796,38 @@ old_gdt: + mxcsr_feature_mask_init(); + } + ++/* Entrypoint to initialize secondary CPU */ ++void __cpuinit secondary_cpu_init(void) ++{ ++ int cpu = smp_processor_id(); ++ struct task_struct *curr = current; ++ ++ _cpu_init(cpu, curr); ++} ++ ++/* ++ * cpu_init() initializes state that is per-CPU. Some data is already ++ * initialized (naturally) in the bootstrap process, such as the GDT ++ * and IDT. We reload them nevertheless, this function acts as a ++ * 'CPU state barrier', nothing should get across. ++ */ ++void __cpuinit cpu_init(void) ++{ ++ int cpu = smp_processor_id(); ++ struct task_struct *curr = current; ++ ++ /* Set up the real GDT and PDA, so we can transition from the ++ boot versions. */ ++ if (!init_gdt(cpu, curr)) { ++ /* failed to allocate something; not much we can do... */ ++ for (;;) ++ local_irq_enable(); ++ } ++ ++ cpu_set_gdt(cpu); ++ _cpu_init(cpu, curr); ++} ++ + #ifdef CONFIG_HOTPLUG_CPU + void __cpuinit cpu_uninit(void) + { +--- head-2010-01-18.orig/arch/x86/kernel/cpu/mtrr/main-xen.c 2008-01-28 12:24:18.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/mtrr/main-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -12,7 +12,7 @@ + static DEFINE_MUTEX(mtrr_mutex); + + void generic_get_mtrr(unsigned int reg, unsigned long *base, +- unsigned int *size, mtrr_type * type) ++ unsigned long *size, mtrr_type * type) + { + struct xen_platform_op op; + +@@ -115,8 +115,7 @@ int mtrr_del_page(int reg, unsigned long + { + unsigned i; + mtrr_type ltype; +- unsigned long lbase; +- unsigned int lsize; ++ unsigned long lbase, lsize; + int error = -EINVAL; + struct xen_platform_op op; + +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2010-01-18/arch/x86/kernel/e820_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -0,0 +1,1002 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#ifdef CONFIG_EFI ++int efi_enabled = 0; ++EXPORT_SYMBOL(efi_enabled); ++#endif ++ ++struct e820map e820; ++struct change_member { ++ struct e820entry *pbios; /* pointer to original bios entry */ ++ unsigned long long addr; /* address for this change point */ ++}; ++static struct change_member change_point_list[2*E820MAX] __initdata; ++static struct change_member *change_point[2*E820MAX] __initdata; ++static struct e820entry *overlap_list[E820MAX] __initdata; ++static struct e820entry new_bios[E820MAX] __initdata; ++/* For PCI or other memory-mapped resources */ ++unsigned long pci_mem_start = 0x10000000; ++#ifdef CONFIG_PCI ++EXPORT_SYMBOL(pci_mem_start); ++#endif ++extern int user_defined_memmap; ++struct resource data_resource = { ++ .name = "Kernel data", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_MEM ++}; ++ ++struct resource code_resource = { ++ .name = "Kernel code", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_MEM ++}; ++ ++static struct resource system_rom_resource = { ++ .name = "System ROM", ++ .start = 0xf0000, ++ .end = 0xfffff, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}; ++ ++static struct resource extension_rom_resource = { ++ .name = "Extension ROM", ++ .start = 0xe0000, ++ .end = 0xeffff, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}; ++ ++static struct resource adapter_rom_resources[] = { { ++ .name = "Adapter ROM", ++ .start = 0xc8000, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}, { ++ .name = "Adapter ROM", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}, { ++ .name = "Adapter ROM", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}, { ++ .name = "Adapter ROM", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}, { ++ .name = "Adapter ROM", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}, { ++ .name = "Adapter ROM", ++ .start = 0, ++ .end = 0, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++} }; ++ ++static struct resource video_rom_resource = { ++ .name = "Video ROM", ++ .start = 0xc0000, ++ .end = 0xc7fff, ++ .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM ++}; ++ ++static struct resource video_ram_resource = { ++ .name = "Video RAM area", ++ .start = 0xa0000, ++ .end = 0xbffff, ++ .flags = IORESOURCE_BUSY | IORESOURCE_MEM ++}; ++ ++static struct resource standard_io_resources[] = { { ++ .name = "dma1", ++ .start = 0x0000, ++ .end = 0x001f, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "pic1", ++ .start = 0x0020, ++ .end = 0x0021, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "timer0", ++ .start = 0x0040, ++ .end = 0x0043, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "timer1", ++ .start = 0x0050, ++ .end = 0x0053, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "keyboard", ++ .start = 0x0060, ++ .end = 0x006f, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "dma page reg", ++ .start = 0x0080, ++ .end = 0x008f, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "pic2", ++ .start = 0x00a0, ++ .end = 0x00a1, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "dma2", ++ .start = 0x00c0, ++ .end = 0x00df, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++}, { ++ .name = "fpu", ++ .start = 0x00f0, ++ .end = 0x00ff, ++ .flags = IORESOURCE_BUSY | IORESOURCE_IO ++} }; ++ ++static int romsignature(const unsigned char *x) ++{ ++ unsigned short sig; ++ int ret = 0; ++ if (probe_kernel_address((const unsigned short *)x, sig) == 0) ++ ret = (sig == 0xaa55); ++ return ret; ++} ++ ++static int __init romchecksum(unsigned char *rom, unsigned long length) ++{ ++ unsigned char *p, sum = 0; ++ ++ for (p = rom; p < rom + length; p++) ++ sum += *p; ++ return sum == 0; ++} ++ ++static void __init probe_roms(void) ++{ ++ unsigned long start, length, upper; ++ unsigned char *rom; ++ int i; ++ ++#ifdef CONFIG_XEN ++ /* Nothing to do if not running in dom0. */ ++ if (!is_initial_xendomain()) ++ return; ++#endif ++ ++ /* video rom */ ++ upper = adapter_rom_resources[0].start; ++ for (start = video_rom_resource.start; start < upper; start += 2048) { ++ rom = isa_bus_to_virt(start); ++ if (!romsignature(rom)) ++ continue; ++ ++ video_rom_resource.start = start; ++ ++ /* 0 < length <= 0x7f * 512, historically */ ++ length = rom[2] * 512; ++ ++ /* if checksum okay, trust length byte */ ++ if (length && romchecksum(rom, length)) ++ video_rom_resource.end = start + length - 1; ++ ++ request_resource(&iomem_resource, &video_rom_resource); ++ break; ++ } ++ ++ start = (video_rom_resource.end + 1 + 2047) & ~2047UL; ++ if (start < upper) ++ start = upper; ++ ++ /* system rom */ ++ request_resource(&iomem_resource, &system_rom_resource); ++ upper = system_rom_resource.start; ++ ++ /* check for extension rom (ignore length byte!) */ ++ rom = isa_bus_to_virt((unsigned long)extension_rom_resource.start); ++ if (romsignature(rom)) { ++ length = extension_rom_resource.end - extension_rom_resource.start + 1; ++ if (romchecksum(rom, length)) { ++ request_resource(&iomem_resource, &extension_rom_resource); ++ upper = extension_rom_resource.start; ++ } ++ } ++ ++ /* check for adapter roms on 2k boundaries */ ++ for (i = 0; i < ARRAY_SIZE(adapter_rom_resources) && start < upper; start += 2048) { ++ rom = isa_bus_to_virt(start); ++ if (!romsignature(rom)) ++ continue; ++ ++ /* 0 < length <= 0x7f * 512, historically */ ++ length = rom[2] * 512; ++ ++ /* but accept any length that fits if checksum okay */ ++ if (!length || start + length > upper || !romchecksum(rom, length)) ++ continue; ++ ++ adapter_rom_resources[i].start = start; ++ adapter_rom_resources[i].end = start + length - 1; ++ request_resource(&iomem_resource, &adapter_rom_resources[i]); ++ ++ start = adapter_rom_resources[i++].end & ~2047UL; ++ } ++} ++ ++#ifdef CONFIG_XEN ++static struct e820map machine_e820 __initdata; ++#define e820 machine_e820 ++#endif ++ ++/* ++ * Request address space for all standard RAM and ROM resources ++ * and also for regions reported as reserved by the e820. ++ */ ++static void __init ++legacy_init_iomem_resources(struct resource *code_resource, struct resource *data_resource) ++{ ++ int i; ++ ++ probe_roms(); ++ for (i = 0; i < e820.nr_map; i++) { ++ struct resource *res; ++#ifndef CONFIG_RESOURCES_64BIT ++ if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) ++ continue; ++#endif ++ res = kzalloc(sizeof(struct resource), GFP_ATOMIC); ++ switch (e820.map[i].type) { ++ case E820_RAM: res->name = "System RAM"; break; ++ case E820_ACPI: res->name = "ACPI Tables"; break; ++ case E820_NVS: res->name = "ACPI Non-volatile Storage"; break; ++ default: res->name = "reserved"; ++ } ++ res->start = e820.map[i].addr; ++ res->end = res->start + e820.map[i].size - 1; ++ res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; ++ if (request_resource(&iomem_resource, res)) { ++ kfree(res); ++ continue; ++ } ++ if (e820.map[i].type == E820_RAM) { ++ /* ++ * We don't know which RAM region contains kernel data, ++ * so we try it repeatedly and let the resource manager ++ * test it. ++ */ ++#ifndef CONFIG_XEN ++ request_resource(res, code_resource); ++ request_resource(res, data_resource); ++#endif ++#ifdef CONFIG_KEXEC ++ request_resource(res, &crashk_res); ++#ifdef CONFIG_XEN ++ xen_machine_kexec_register_resources(res); ++#endif ++#endif ++ } ++ } ++} ++ ++#undef e820 ++ ++/* ++ * Request address space for all standard resources ++ * ++ * This is called just before pcibios_init(), which is also a ++ * subsys_initcall, but is linked in later (in arch/i386/pci/common.c). ++ */ ++static int __init request_standard_resources(void) ++{ ++ int i; ++ ++ /* Nothing to do if not running in dom0. */ ++ if (!is_initial_xendomain()) ++ return 0; ++ ++ printk("Setting up standard PCI resources\n"); ++ if (efi_enabled) ++ efi_initialize_iomem_resources(&code_resource, &data_resource); ++ else ++ legacy_init_iomem_resources(&code_resource, &data_resource); ++ ++ /* EFI systems may still have VGA */ ++ request_resource(&iomem_resource, &video_ram_resource); ++ ++ /* request I/O space for devices used on all i[345]86 PCs */ ++ for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++) ++ request_resource(&ioport_resource, &standard_io_resources[i]); ++ return 0; ++} ++ ++subsys_initcall(request_standard_resources); ++ ++void __init add_memory_region(unsigned long long start, ++ unsigned long long size, int type) ++{ ++ int x; ++ ++ if (!efi_enabled) { ++ x = e820.nr_map; ++ ++ if (x == E820MAX) { ++ printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); ++ return; ++ } ++ ++ e820.map[x].addr = start; ++ e820.map[x].size = size; ++ e820.map[x].type = type; ++ e820.nr_map++; ++ } ++} /* add_memory_region */ ++ ++/* ++ * Sanitize the BIOS e820 map. ++ * ++ * Some e820 responses include overlapping entries. The following ++ * replaces the original e820 map with a new one, removing overlaps. ++ * ++ */ ++int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map) ++{ ++ struct change_member *change_tmp; ++ unsigned long current_type, last_type; ++ unsigned long long last_addr; ++ int chgidx, still_changing; ++ int overlap_entries; ++ int new_bios_entry; ++ int old_nr, new_nr, chg_nr; ++ int i; ++ ++ /* ++ Visually we're performing the following (1,2,3,4 = memory types)... ++ ++ Sample memory map (w/overlaps): ++ ____22__________________ ++ ______________________4_ ++ ____1111________________ ++ _44_____________________ ++ 11111111________________ ++ ____________________33__ ++ ___________44___________ ++ __________33333_________ ++ ______________22________ ++ ___________________2222_ ++ _________111111111______ ++ _____________________11_ ++ _________________4______ ++ ++ Sanitized equivalent (no overlap): ++ 1_______________________ ++ _44_____________________ ++ ___1____________________ ++ ____22__________________ ++ ______11________________ ++ _________1______________ ++ __________3_____________ ++ ___________44___________ ++ _____________33_________ ++ _______________2________ ++ ________________1_______ ++ _________________4______ ++ ___________________2____ ++ ____________________33__ ++ ______________________4_ ++ */ ++ printk("sanitize start\n"); ++ /* if there's only one memory region, don't bother */ ++ if (*pnr_map < 2) { ++ printk("sanitize bail 0\n"); ++ return -1; ++ } ++ ++ old_nr = *pnr_map; ++ ++ /* bail out if we find any unreasonable addresses in bios map */ ++ for (i=0; iaddr = biosmap[i].addr; ++ change_point[chgidx++]->pbios = &biosmap[i]; ++ change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size; ++ change_point[chgidx++]->pbios = &biosmap[i]; ++ } ++ } ++ chg_nr = chgidx; /* true number of change-points */ ++ ++ /* sort change-point list by memory addresses (low -> high) */ ++ still_changing = 1; ++ while (still_changing) { ++ still_changing = 0; ++ for (i=1; i < chg_nr; i++) { ++ /* if > , swap */ ++ /* or, if current= & last=, swap */ ++ if ((change_point[i]->addr < change_point[i-1]->addr) || ++ ((change_point[i]->addr == change_point[i-1]->addr) && ++ (change_point[i]->addr == change_point[i]->pbios->addr) && ++ (change_point[i-1]->addr != change_point[i-1]->pbios->addr)) ++ ) ++ { ++ change_tmp = change_point[i]; ++ change_point[i] = change_point[i-1]; ++ change_point[i-1] = change_tmp; ++ still_changing=1; ++ } ++ } ++ } ++ ++ /* create a new bios memory map, removing overlaps */ ++ overlap_entries=0; /* number of entries in the overlap table */ ++ new_bios_entry=0; /* index for creating new bios map entries */ ++ last_type = 0; /* start with undefined memory type */ ++ last_addr = 0; /* start with 0 as last starting address */ ++ /* loop through change-points, determining affect on the new bios map */ ++ for (chgidx=0; chgidx < chg_nr; chgidx++) ++ { ++ /* keep track of all overlapping bios entries */ ++ if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr) ++ { ++ /* add map entry to overlap list (> 1 entry implies an overlap) */ ++ overlap_list[overlap_entries++]=change_point[chgidx]->pbios; ++ } ++ else ++ { ++ /* remove entry from list (order independent, so swap with last) */ ++ for (i=0; ipbios) ++ overlap_list[i] = overlap_list[overlap_entries-1]; ++ } ++ overlap_entries--; ++ } ++ /* if there are overlapping entries, decide which "type" to use */ ++ /* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */ ++ current_type = 0; ++ for (i=0; itype > current_type) ++ current_type = overlap_list[i]->type; ++ /* continue building up new bios map based on this information */ ++ if (current_type != last_type) { ++ if (last_type != 0) { ++ new_bios[new_bios_entry].size = ++ change_point[chgidx]->addr - last_addr; ++ /* move forward only if the new size was non-zero */ ++ if (new_bios[new_bios_entry].size != 0) ++ if (++new_bios_entry >= E820MAX) ++ break; /* no more space left for new bios entries */ ++ } ++ if (current_type != 0) { ++ new_bios[new_bios_entry].addr = change_point[chgidx]->addr; ++ new_bios[new_bios_entry].type = current_type; ++ last_addr=change_point[chgidx]->addr; ++ } ++ last_type = current_type; ++ } ++ } ++ new_nr = new_bios_entry; /* retain count for new bios entries */ ++ ++ /* copy new bios mapping into original location */ ++ memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry)); ++ *pnr_map = new_nr; ++ ++ printk("sanitize end\n"); ++ return 0; ++} ++ ++/* ++ * Copy the BIOS e820 map into a safe place. ++ * ++ * Sanity-check it while we're at it.. ++ * ++ * If we're lucky and live on a modern system, the setup code ++ * will have given us a memory map that we can use to properly ++ * set up memory. If we aren't, we'll fake a memory map. ++ * ++ * We check to see that the memory map contains at least 2 elements ++ * before we'll use it, because the detection code in setup.S may ++ * not be perfect and most every PC known to man has two memory ++ * regions: one from 0 to 640k, and one from 1mb up. (The IBM ++ * thinkpad 560x, for example, does not cooperate with the memory ++ * detection code.) ++ */ ++int __init copy_e820_map(struct e820entry * biosmap, int nr_map) ++{ ++#ifndef CONFIG_XEN ++ /* Only one memory region (or negative)? Ignore it */ ++ if (nr_map < 2) ++ return -1; ++#else ++ BUG_ON(nr_map < 1); ++#endif ++ ++ do { ++ unsigned long long start = biosmap->addr; ++ unsigned long long size = biosmap->size; ++ unsigned long long end = start + size; ++ unsigned long type = biosmap->type; ++ printk("copy_e820_map() start: %016Lx size: %016Lx end: %016Lx type: %ld\n", start, size, end, type); ++ ++ /* Overflow in 64 bits? Ignore the memory map. */ ++ if (start > end) ++ return -1; ++ ++#ifndef CONFIG_XEN ++ /* ++ * Some BIOSes claim RAM in the 640k - 1M region. ++ * Not right. Fix it up. ++ */ ++ if (type == E820_RAM) { ++ printk("copy_e820_map() type is E820_RAM\n"); ++ if (start < 0x100000ULL && end > 0xA0000ULL) { ++ printk("copy_e820_map() lies in range...\n"); ++ if (start < 0xA0000ULL) { ++ printk("copy_e820_map() start < 0xA0000ULL\n"); ++ add_memory_region(start, 0xA0000ULL-start, type); ++ } ++ if (end <= 0x100000ULL) { ++ printk("copy_e820_map() end <= 0x100000ULL\n"); ++ continue; ++ } ++ start = 0x100000ULL; ++ size = end - start; ++ } ++ } ++#endif ++ add_memory_region(start, size, type); ++ } while (biosmap++,--nr_map); ++ ++#ifdef CONFIG_XEN ++ if (is_initial_xendomain()) { ++ struct xen_memory_map memmap; ++ ++ memmap.nr_entries = E820MAX; ++ set_xen_guest_handle(memmap.buffer, machine_e820.map); ++ ++ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)) ++ BUG(); ++ machine_e820.nr_map = memmap.nr_entries; ++ } else ++ machine_e820 = e820; ++#endif ++ ++ return 0; ++} ++ ++/* ++ * Callback for efi_memory_walk. ++ */ ++static int __init ++efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) ++{ ++ unsigned long *max_pfn = arg, pfn; ++ ++ if (start < end) { ++ pfn = PFN_UP(end -1); ++ if (pfn > *max_pfn) ++ *max_pfn = pfn; ++ } ++ return 0; ++} ++ ++static int __init ++efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) ++{ ++ memory_present(0, PFN_UP(start), PFN_DOWN(end)); ++ return 0; ++} ++ ++/* ++ * Find the highest page frame number we have available ++ */ ++void __init find_max_pfn(void) ++{ ++ int i; ++ ++ max_pfn = 0; ++ if (efi_enabled) { ++ efi_memmap_walk(efi_find_max_pfn, &max_pfn); ++ efi_memmap_walk(efi_memory_present_wrapper, NULL); ++ return; ++ } ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ unsigned long start, end; ++ /* RAM? */ ++ if (e820.map[i].type != E820_RAM) ++ continue; ++ start = PFN_UP(e820.map[i].addr); ++ end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); ++ if (start >= end) ++ continue; ++ if (end > max_pfn) ++ max_pfn = end; ++ memory_present(0, start, end); ++ } ++} ++ ++/* ++ * Free all available memory for boot time allocation. Used ++ * as a callback function by efi_memory_walk() ++ */ ++ ++static int __init ++free_available_memory(unsigned long start, unsigned long end, void *arg) ++{ ++ /* check max_low_pfn */ ++ if (start >= (max_low_pfn << PAGE_SHIFT)) ++ return 0; ++ if (end >= (max_low_pfn << PAGE_SHIFT)) ++ end = max_low_pfn << PAGE_SHIFT; ++ if (start < end) ++ free_bootmem(start, end - start); ++ ++ return 0; ++} ++/* ++ * Register fully available low RAM pages with the bootmem allocator. ++ */ ++void __init register_bootmem_low_pages(unsigned long max_low_pfn) ++{ ++ int i; ++ ++ if (efi_enabled) { ++ efi_memmap_walk(free_available_memory, NULL); ++ return; ++ } ++ for (i = 0; i < e820.nr_map; i++) { ++ unsigned long curr_pfn, last_pfn, size; ++ /* ++ * Reserve usable low memory ++ */ ++ if (e820.map[i].type != E820_RAM) ++ continue; ++ /* ++ * We are rounding up the start address of usable memory: ++ */ ++ curr_pfn = PFN_UP(e820.map[i].addr); ++ if (curr_pfn >= max_low_pfn) ++ continue; ++ /* ++ * ... and at the end of the usable range downwards: ++ */ ++ last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size); ++ ++#ifdef CONFIG_XEN ++ /* ++ * Truncate to the number of actual pages currently ++ * present. ++ */ ++ if (last_pfn > xen_start_info->nr_pages) ++ last_pfn = xen_start_info->nr_pages; ++#endif ++ ++ if (last_pfn > max_low_pfn) ++ last_pfn = max_low_pfn; ++ ++ /* ++ * .. finally, did all the rounding and playing ++ * around just make the area go away? ++ */ ++ if (last_pfn <= curr_pfn) ++ continue; ++ ++ size = last_pfn - curr_pfn; ++ free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size)); ++ } ++} ++ ++void __init e820_register_memory(void) ++{ ++ unsigned long gapstart, gapsize, round; ++ unsigned long long last; ++ int i; ++ ++#ifdef CONFIG_XEN ++#define e820 machine_e820 ++#endif ++ /* ++ * Search for the bigest gap in the low 32 bits of the e820 ++ * memory space. ++ */ ++ last = 0x100000000ull; ++ gapstart = 0x10000000; ++ gapsize = 0x400000; ++ i = e820.nr_map; ++ while (--i >= 0) { ++ unsigned long long start = e820.map[i].addr; ++ unsigned long long end = start + e820.map[i].size; ++ ++ /* ++ * Since "last" is at most 4GB, we know we'll ++ * fit in 32 bits if this condition is true ++ */ ++ if (last > end) { ++ unsigned long gap = last - end; ++ ++ if (gap > gapsize) { ++ gapsize = gap; ++ gapstart = end; ++ } ++ } ++ if (start < last) ++ last = start; ++ } ++#undef e820 ++ ++ /* ++ * See how much we want to round up: start off with ++ * rounding to the next 1MB area. ++ */ ++ round = 0x100000; ++ while ((gapsize >> 4) > round) ++ round += round; ++ /* Fun with two's complement */ ++ pci_mem_start = (gapstart + round) & -round; ++ ++ printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n", ++ pci_mem_start, gapstart, gapsize); ++} ++ ++void __init print_memory_map(char *who) ++{ ++ int i; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ printk(" %s: %016Lx - %016Lx ", who, ++ e820.map[i].addr, ++ e820.map[i].addr + e820.map[i].size); ++ switch (e820.map[i].type) { ++ case E820_RAM: printk("(usable)\n"); ++ break; ++ case E820_RESERVED: ++ printk("(reserved)\n"); ++ break; ++ case E820_ACPI: ++ printk("(ACPI data)\n"); ++ break; ++ case E820_NVS: ++ printk("(ACPI NVS)\n"); ++ break; ++ default: printk("type %lu\n", e820.map[i].type); ++ break; ++ } ++ } ++} ++ ++static __init __always_inline void efi_limit_regions(unsigned long long size) ++{ ++ unsigned long long current_addr = 0; ++ efi_memory_desc_t *md, *next_md; ++ void *p, *p1; ++ int i, j; ++ ++ j = 0; ++ p1 = memmap.map; ++ for (p = p1, i = 0; p < memmap.map_end; p += memmap.desc_size, i++) { ++ md = p; ++ next_md = p1; ++ current_addr = md->phys_addr + ++ PFN_PHYS(md->num_pages); ++ if (is_available_memory(md)) { ++ if (md->phys_addr >= size) continue; ++ memcpy(next_md, md, memmap.desc_size); ++ if (current_addr >= size) { ++ next_md->num_pages -= ++ PFN_UP(current_addr-size); ++ } ++ p1 += memmap.desc_size; ++ next_md = p1; ++ j++; ++ } else if ((md->attribute & EFI_MEMORY_RUNTIME) == ++ EFI_MEMORY_RUNTIME) { ++ /* In order to make runtime services ++ * available we have to include runtime ++ * memory regions in memory map */ ++ memcpy(next_md, md, memmap.desc_size); ++ p1 += memmap.desc_size; ++ next_md = p1; ++ j++; ++ } ++ } ++ memmap.nr_map = j; ++ memmap.map_end = memmap.map + ++ (memmap.nr_map * memmap.desc_size); ++} ++ ++void __init limit_regions(unsigned long long size) ++{ ++ unsigned long long current_addr = 0; ++ int i; ++ ++ print_memory_map("limit_regions start"); ++ if (efi_enabled) { ++ efi_limit_regions(size); ++ return; ++ } ++ for (i = 0; i < e820.nr_map; i++) { ++ current_addr = e820.map[i].addr + e820.map[i].size; ++ if (current_addr < size) ++ continue; ++ ++ if (e820.map[i].type != E820_RAM) ++ continue; ++ ++ if (e820.map[i].addr >= size) { ++ /* ++ * This region starts past the end of the ++ * requested size, skip it completely. ++ */ ++ e820.nr_map = i; ++ } else { ++ e820.nr_map = i + 1; ++ e820.map[i].size -= current_addr - size; ++ } ++ print_memory_map("limit_regions endfor"); ++ return; ++ } ++#ifdef CONFIG_XEN ++ if (current_addr < size) { ++ /* ++ * The e820 map finished before our requested size so ++ * extend the final entry to the requested address. ++ */ ++ --i; ++ if (e820.map[i].type == E820_RAM) ++ e820.map[i].size -= current_addr - size; ++ else ++ add_memory_region(current_addr, size - current_addr, E820_RAM); ++ } ++#endif ++ print_memory_map("limit_regions endfunc"); ++} ++ ++/* ++ * This function checks if any part of the range is mapped ++ * with type. ++ */ ++int ++e820_any_mapped(u64 start, u64 end, unsigned type) ++{ ++ int i; ++ ++#ifndef CONFIG_XEN ++ for (i = 0; i < e820.nr_map; i++) { ++ const struct e820entry *ei = &e820.map[i]; ++#else ++ if (!is_initial_xendomain()) ++ return 0; ++ for (i = 0; i < machine_e820.nr_map; ++i) { ++ const struct e820entry *ei = &machine_e820.map[i]; ++#endif ++ ++ if (type && ei->type != type) ++ continue; ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ return 1; ++ } ++ return 0; ++} ++EXPORT_SYMBOL_GPL(e820_any_mapped); ++ ++ /* ++ * This function checks if the entire range is mapped with type. ++ * ++ * Note: this function only works correct if the e820 table is sorted and ++ * not-overlapping, which is the case ++ */ ++int __init ++e820_all_mapped(unsigned long s, unsigned long e, unsigned type) ++{ ++ u64 start = s; ++ u64 end = e; ++ int i; ++ ++#ifndef CONFIG_XEN ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++#else ++ if (!is_initial_xendomain()) ++ return 0; ++ for (i = 0; i < machine_e820.nr_map; ++i) { ++ const struct e820entry *ei = &machine_e820.map[i]; ++#endif ++ ++ if (type && ei->type != type) ++ continue; ++ /* is the region (part) in overlap with the current region ?*/ ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ /* if the region is at the beginning of we move ++ * start to the end of the region since it's ok until there ++ */ ++ if (ei->addr <= start) ++ start = ei->addr + ei->size; ++ /* if start is now at or beyond end, we're done, full ++ * coverage */ ++ if (start >= end) ++ return 1; /* we're done */ ++ } ++ return 0; ++} ++ ++static int __init parse_memmap(char *arg) ++{ ++ if (!arg) ++ return -EINVAL; ++ ++ if (strcmp(arg, "exactmap") == 0) { ++#ifdef CONFIG_CRASH_DUMP ++ /* If we are doing a crash dump, we ++ * still need to know the real mem ++ * size before original memory map is ++ * reset. ++ */ ++ find_max_pfn(); ++ saved_max_pfn = max_pfn; ++#endif ++ e820.nr_map = 0; ++ user_defined_memmap = 1; ++ } else { ++ /* If the user specifies memory size, we ++ * limit the BIOS-provided memory map to ++ * that size. exactmap can be used to specify ++ * the exact map. mem=number can be used to ++ * trim the existing memory map. ++ */ ++ unsigned long long start_at, mem_size; ++ ++ mem_size = memparse(arg, &arg); ++ if (*arg == '@') { ++ start_at = memparse(arg+1, &arg); ++ add_memory_region(start_at, mem_size, E820_RAM); ++ } else if (*arg == '#') { ++ start_at = memparse(arg+1, &arg); ++ add_memory_region(start_at, mem_size, E820_ACPI); ++ } else if (*arg == '$') { ++ start_at = memparse(arg+1, &arg); ++ add_memory_region(start_at, mem_size, E820_RESERVED); ++ } else { ++ limit_regions(mem_size); ++ user_defined_memmap = 1; ++ } ++ } ++ return 0; ++} ++early_param("memmap", parse_memmap); +--- head-2010-01-18.orig/arch/x86/kernel/entry_32-xen.S 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/entry_32-xen.S 2009-11-06 10:46:27.000000000 +0100 +@@ -30,12 +30,13 @@ + * 18(%esp) - %eax + * 1C(%esp) - %ds + * 20(%esp) - %es +- * 24(%esp) - orig_eax +- * 28(%esp) - %eip +- * 2C(%esp) - %cs +- * 30(%esp) - %eflags +- * 34(%esp) - %oldesp +- * 38(%esp) - %oldss ++ * 24(%esp) - %gs ++ * 28(%esp) - orig_eax ++ * 2C(%esp) - %eip ++ * 30(%esp) - %cs ++ * 34(%esp) - %eflags ++ * 38(%esp) - %oldesp ++ * 3C(%esp) - %oldss + * + * "current" is in register %ebx during any slow entries. + */ +@@ -48,27 +49,25 @@ + #include + #include + #include ++#include + #include + #include "irq_vectors.h" + #include + +-#define nr_syscalls ((syscall_table_size)/4) ++/* ++ * We use macros for low-level operations which need to be overridden ++ * for paravirtualization. The following will never clobber any registers: ++ * INTERRUPT_RETURN (aka. "iret") ++ * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax") ++ * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit"). ++ * ++ * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must ++ * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY). ++ * Allowing a register to be clobbered can shrink the paravirt replacement ++ * enough to patch inline, increasing performance. ++ */ + +-EBX = 0x00 +-ECX = 0x04 +-EDX = 0x08 +-ESI = 0x0C +-EDI = 0x10 +-EBP = 0x14 +-EAX = 0x18 +-DS = 0x1C +-ES = 0x20 +-ORIG_EAX = 0x24 +-EIP = 0x28 +-CS = 0x2C +-EFLAGS = 0x30 +-OLDESP = 0x34 +-OLDSS = 0x38 ++#define nr_syscalls ((syscall_table_size)/4) + + CF_MASK = 0x00000001 + TF_MASK = 0x00000100 +@@ -79,61 +78,16 @@ VM_MASK = 0x00020000 + /* Pseudo-eflags. */ + NMI_MASK = 0x80000000 + +-#ifndef CONFIG_XEN +-/* These are replaces for paravirtualization */ +-#define DISABLE_INTERRUPTS cli +-#define ENABLE_INTERRUPTS sti +-#define ENABLE_INTERRUPTS_SYSEXIT sti; sysexit +-#define INTERRUPT_RETURN iret +-#define GET_CR0_INTO_EAX movl %cr0, %eax +-#else +-/* Offsets into shared_info_t. */ +-#define evtchn_upcall_pending /* 0 */ +-#define evtchn_upcall_mask 1 +- +-#define sizeof_vcpu_shift 6 +- +-#ifdef CONFIG_SMP +-#define GET_VCPU_INFO movl TI_cpu(%ebp),%esi ; \ +- shl $sizeof_vcpu_shift,%esi ; \ +- addl HYPERVISOR_shared_info,%esi +-#else +-#define GET_VCPU_INFO movl HYPERVISOR_shared_info,%esi +-#endif +- +-#define __DISABLE_INTERRUPTS movb $1,evtchn_upcall_mask(%esi) +-#define __ENABLE_INTERRUPTS movb $0,evtchn_upcall_mask(%esi) +-#define __TEST_PENDING testb $0xFF,evtchn_upcall_pending(%esi) +-#define DISABLE_INTERRUPTS GET_VCPU_INFO ; \ +- __DISABLE_INTERRUPTS +-#define ENABLE_INTERRUPTS GET_VCPU_INFO ; \ +- __ENABLE_INTERRUPTS +-#define ENABLE_INTERRUPTS_SYSEXIT __ENABLE_INTERRUPTS ; \ +-sysexit_scrit: /**** START OF SYSEXIT CRITICAL REGION ****/ ; \ +- __TEST_PENDING ; \ +- jnz 14f # process more events if necessary... ; \ +- movl ESI(%esp), %esi ; \ +- sysexit ; \ +-14: __DISABLE_INTERRUPTS ; \ +- TRACE_IRQS_OFF ; \ +-sysexit_ecrit: /**** END OF SYSEXIT CRITICAL REGION ****/ ; \ +- push %esp ; \ +- call evtchn_do_upcall ; \ +- add $4,%esp ; \ +- jmp ret_from_intr +-#define INTERRUPT_RETURN iret +-#endif +- + #ifdef CONFIG_PREEMPT +-#define preempt_stop DISABLE_INTERRUPTS; TRACE_IRQS_OFF ++#define preempt_stop(clobbers) DISABLE_INTERRUPTS(clobbers); TRACE_IRQS_OFF + #else +-#define preempt_stop ++#define preempt_stop(clobbers) + #define resume_kernel restore_nocheck + #endif + + .macro TRACE_IRQS_IRET + #ifdef CONFIG_TRACE_IRQFLAGS +- testl $IF_MASK,EFLAGS(%esp) # interrupts off? ++ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off? + jz 1f + TRACE_IRQS_ON + 1: +@@ -148,6 +102,9 @@ sysexit_ecrit: /**** END OF SYSEXIT CRIT + + #define SAVE_ALL \ + cld; \ ++ pushl %gs; \ ++ CFI_ADJUST_CFA_OFFSET 4;\ ++ /*CFI_REL_OFFSET gs, 0;*/\ + pushl %es; \ + CFI_ADJUST_CFA_OFFSET 4;\ + /*CFI_REL_OFFSET es, 0;*/\ +@@ -177,7 +134,9 @@ sysexit_ecrit: /**** END OF SYSEXIT CRIT + CFI_REL_OFFSET ebx, 0;\ + movl $(__USER_DS), %edx; \ + movl %edx, %ds; \ +- movl %edx, %es; ++ movl %edx, %es; \ ++ movl $(__KERNEL_PDA), %edx; \ ++ movl %edx, %gs + + #define RESTORE_INT_REGS \ + popl %ebx; \ +@@ -210,17 +169,22 @@ sysexit_ecrit: /**** END OF SYSEXIT CRIT + 2: popl %es; \ + CFI_ADJUST_CFA_OFFSET -4;\ + /*CFI_RESTORE es;*/\ +-.section .fixup,"ax"; \ +-3: movl $0,(%esp); \ +- jmp 1b; \ ++3: popl %gs; \ ++ CFI_ADJUST_CFA_OFFSET -4;\ ++ /*CFI_RESTORE gs;*/\ ++.pushsection .fixup,"ax"; \ + 4: movl $0,(%esp); \ ++ jmp 1b; \ ++5: movl $0,(%esp); \ + jmp 2b; \ +-.previous; \ ++6: movl $0,(%esp); \ ++ jmp 3b; \ + .section __ex_table,"a";\ + .align 4; \ +- .long 1b,3b; \ +- .long 2b,4b; \ +-.previous ++ .long 1b,4b; \ ++ .long 2b,5b; \ ++ .long 3b,6b; \ ++.popsection + + #define RING0_INT_FRAME \ + CFI_STARTPROC simple;\ +@@ -239,18 +203,18 @@ sysexit_ecrit: /**** END OF SYSEXIT CRIT + #define RING0_PTREGS_FRAME \ + CFI_STARTPROC simple;\ + CFI_SIGNAL_FRAME;\ +- CFI_DEF_CFA esp, OLDESP-EBX;\ +- /*CFI_OFFSET cs, CS-OLDESP;*/\ +- CFI_OFFSET eip, EIP-OLDESP;\ +- /*CFI_OFFSET es, ES-OLDESP;*/\ +- /*CFI_OFFSET ds, DS-OLDESP;*/\ +- CFI_OFFSET eax, EAX-OLDESP;\ +- CFI_OFFSET ebp, EBP-OLDESP;\ +- CFI_OFFSET edi, EDI-OLDESP;\ +- CFI_OFFSET esi, ESI-OLDESP;\ +- CFI_OFFSET edx, EDX-OLDESP;\ +- CFI_OFFSET ecx, ECX-OLDESP;\ +- CFI_OFFSET ebx, EBX-OLDESP ++ CFI_DEF_CFA esp, PT_OLDESP-PT_EBX;\ ++ /*CFI_OFFSET cs, PT_CS-PT_OLDESP;*/\ ++ CFI_OFFSET eip, PT_EIP-PT_OLDESP;\ ++ /*CFI_OFFSET es, PT_ES-PT_OLDESP;*/\ ++ /*CFI_OFFSET ds, PT_DS-PT_OLDESP;*/\ ++ CFI_OFFSET eax, PT_EAX-PT_OLDESP;\ ++ CFI_OFFSET ebp, PT_EBP-PT_OLDESP;\ ++ CFI_OFFSET edi, PT_EDI-PT_OLDESP;\ ++ CFI_OFFSET esi, PT_ESI-PT_OLDESP;\ ++ CFI_OFFSET edx, PT_EDX-PT_OLDESP;\ ++ CFI_OFFSET ecx, PT_ECX-PT_OLDESP;\ ++ CFI_OFFSET ebx, PT_EBX-PT_OLDESP + + ENTRY(ret_from_fork) + CFI_STARTPROC +@@ -278,17 +242,18 @@ ENTRY(ret_from_fork) + ALIGN + RING0_PTREGS_FRAME + ret_from_exception: +- preempt_stop ++ preempt_stop(CLBR_ANY) + ret_from_intr: + GET_THREAD_INFO(%ebp) + check_userspace: +- movl EFLAGS(%esp), %eax # mix EFLAGS and CS +- movb CS(%esp), %al ++ movl PT_EFLAGS(%esp), %eax # mix EFLAGS and CS ++ movb PT_CS(%esp), %al + andl $(VM_MASK | SEGMENT_RPL_MASK), %eax + cmpl $USER_RPL, %eax + jb resume_kernel # not returning to v8086 or userspace ++ + ENTRY(resume_userspace) +- DISABLE_INTERRUPTS # make sure we don't miss an interrupt ++ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + movl TI_flags(%ebp), %ecx +@@ -299,14 +264,14 @@ ENTRY(resume_userspace) + + #ifdef CONFIG_PREEMPT + ENTRY(resume_kernel) +- DISABLE_INTERRUPTS ++ DISABLE_INTERRUPTS(CLBR_ANY) + cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ? + jnz restore_nocheck + need_resched: + movl TI_flags(%ebp), %ecx # need_resched set ? + testb $_TIF_NEED_RESCHED, %cl + jz restore_all +- testl $IF_MASK,EFLAGS(%esp) # interrupts off (exception path) ? ++ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off (exception path) ? + jz restore_all + call preempt_schedule_irq + jmp need_resched +@@ -328,7 +293,7 @@ sysenter_past_esp: + * No need to follow this irqs on/off section: the syscall + * disabled irqs and here we enable it straight after entry: + */ +- ENABLE_INTERRUPTS ++ ENABLE_INTERRUPTS(CLBR_NONE) + pushl $(__USER_DS) + CFI_ADJUST_CFA_OFFSET 4 + /*CFI_REL_OFFSET ss, 0*/ +@@ -340,12 +305,16 @@ sysenter_past_esp: + pushl $(__USER_CS) + CFI_ADJUST_CFA_OFFSET 4 + /*CFI_REL_OFFSET cs, 0*/ ++#ifndef CONFIG_COMPAT_VDSO + /* + * Push current_thread_info()->sysenter_return to the stack. + * A tiny bit of offset fixup is necessary - 4*4 means the 4 words + * pushed above; +8 corresponds to copy_thread's esp0 setting. + */ + pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp) ++#else ++ pushl $SYSENTER_RETURN ++#endif + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET eip, 0 + +@@ -372,19 +341,27 @@ sysenter_past_esp: + cmpl $(nr_syscalls), %eax + jae syscall_badsys + call *sys_call_table(,%eax,4) +- movl %eax,EAX(%esp) +- DISABLE_INTERRUPTS ++ movl %eax,PT_EAX(%esp) ++ DISABLE_INTERRUPTS(CLBR_ECX|CLBR_EDX) + TRACE_IRQS_OFF + movl TI_flags(%ebp), %ecx + testw $_TIF_ALLWORK_MASK, %cx + jne syscall_exit_work + /* if something modifies registers it must also disable sysexit */ +- movl EIP(%esp), %edx +- movl OLDESP(%esp), %ecx ++ movl PT_EIP(%esp), %edx ++ movl PT_OLDESP(%esp), %ecx + xorl %ebp,%ebp + TRACE_IRQS_ON ++1: mov PT_GS(%esp), %gs + ENABLE_INTERRUPTS_SYSEXIT + CFI_ENDPROC ++.pushsection .fixup,"ax" ++2: movl $0,PT_GS(%esp) ++ jmp 1b ++.section __ex_table,"a" ++ .align 4 ++ .long 1b,2b ++.popsection + + # pv sysenter call handler stub + ENTRY(sysenter_entry_pv) +@@ -419,7 +396,7 @@ ENTRY(system_call) + CFI_ADJUST_CFA_OFFSET 4 + SAVE_ALL + GET_THREAD_INFO(%ebp) +- testl $TF_MASK,EFLAGS(%esp) ++ testl $TF_MASK,PT_EFLAGS(%esp) + jz no_singlestep + orl $_TIF_SINGLESTEP,TI_flags(%ebp) + no_singlestep: +@@ -431,9 +408,9 @@ no_singlestep: + jae syscall_badsys + syscall_call: + call *sys_call_table(,%eax,4) +- movl %eax,EAX(%esp) # store the return value ++ movl %eax,PT_EAX(%esp) # store the return value + syscall_exit: +- DISABLE_INTERRUPTS # make sure we don't miss an interrupt ++ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + TRACE_IRQS_OFF +@@ -443,12 +420,12 @@ syscall_exit: + + restore_all: + #ifndef CONFIG_XEN +- movl EFLAGS(%esp), %eax # mix EFLAGS, SS and CS +- # Warning: OLDSS(%esp) contains the wrong/random values if we ++ movl PT_EFLAGS(%esp), %eax # mix EFLAGS, SS and CS ++ # Warning: PT_OLDSS(%esp) contains the wrong/random values if we + # are returning to the kernel. + # See comments in process.c:copy_thread() for details. +- movb OLDSS(%esp), %ah +- movb CS(%esp), %al ++ movb PT_OLDSS(%esp), %ah ++ movb PT_CS(%esp), %al + andl $(VM_MASK | (SEGMENT_TI_MASK << 8) | SEGMENT_RPL_MASK), %eax + cmpl $((SEGMENT_LDT << 8) | USER_RPL), %eax + CFI_REMEMBER_STATE +@@ -456,7 +433,7 @@ restore_all: + restore_nocheck: + #else + restore_nocheck: +- movl EFLAGS(%esp), %eax ++ movl PT_EFLAGS(%esp), %eax + testl $(VM_MASK|NMI_MASK), %eax + CFI_REMEMBER_STATE + jnz hypervisor_iret +@@ -470,13 +447,13 @@ restore_nocheck: + TRACE_IRQS_IRET + restore_nocheck_notrace: + RESTORE_REGS +- addl $4, %esp ++ addl $4, %esp # skip orig_eax/error_code + CFI_ADJUST_CFA_OFFSET -4 + 1: INTERRUPT_RETURN + .section .fixup,"ax" + iret_exc: + #ifndef CONFIG_XEN +- ENABLE_INTERRUPTS ++ ENABLE_INTERRUPTS(CLBR_NONE) + #endif + pushl $0 # no error code + pushl $do_iret_error +@@ -490,33 +467,42 @@ iret_exc: + CFI_RESTORE_STATE + #ifndef CONFIG_XEN + ldt_ss: +- larl OLDSS(%esp), %eax ++ larl PT_OLDSS(%esp), %eax + jnz restore_nocheck + testl $0x00400000, %eax # returning to 32bit stack? + jnz restore_nocheck # allright, normal return ++ ++#ifdef CONFIG_PARAVIRT ++ /* ++ * The kernel can't run on a non-flat stack if paravirt mode ++ * is active. Rather than try to fixup the high bits of ++ * ESP, bypass this code entirely. This may break DOSemu ++ * and/or Wine support in a paravirt VM, although the option ++ * is still available to implement the setting of the high ++ * 16-bits in the INTERRUPT_RETURN paravirt-op. ++ */ ++ cmpl $0, paravirt_ops+PARAVIRT_enabled ++ jne restore_nocheck ++#endif ++ + /* If returning to userspace with 16bit stack, + * try to fix the higher word of ESP, as the CPU + * won't restore it. + * This is an "official" bug of all the x86-compatible + * CPUs, which we can try to work around to make + * dosemu and wine happy. */ +- subl $8, %esp # reserve space for switch16 pointer +- CFI_ADJUST_CFA_OFFSET 8 +- DISABLE_INTERRUPTS ++ movl PT_OLDESP(%esp), %eax ++ movl %esp, %edx ++ call patch_espfix_desc ++ pushl $__ESPFIX_SS ++ CFI_ADJUST_CFA_OFFSET 4 ++ pushl %eax ++ CFI_ADJUST_CFA_OFFSET 4 ++ DISABLE_INTERRUPTS(CLBR_EAX) + TRACE_IRQS_OFF +- movl %esp, %eax +- /* Set up the 16bit stack frame with switch32 pointer on top, +- * and a switch16 pointer on top of the current frame. */ +- call setup_x86_bogus_stack +- CFI_ADJUST_CFA_OFFSET -8 # frame has moved +- TRACE_IRQS_IRET +- RESTORE_REGS +- lss 20+4(%esp), %esp # switch to 16bit stack +-1: INTERRUPT_RETURN +-.section __ex_table,"a" +- .align 4 +- .long 1b,iret_exc +-.previous ++ lss (%esp), %esp ++ CFI_ADJUST_CFA_OFFSET -8 ++ jmp restore_nocheck + #else + ALIGN + restore_all_enable_events: +@@ -540,7 +526,7 @@ ecrit: /**** END OF CRITICAL REGION *** + + CFI_RESTORE_STATE + hypervisor_iret: +- andl $~NMI_MASK, EFLAGS(%esp) ++ andl $~NMI_MASK, PT_EFLAGS(%esp) + RESTORE_REGS + addl $4, %esp + CFI_ADJUST_CFA_OFFSET -4 +@@ -556,7 +542,7 @@ work_pending: + jz work_notifysig + work_resched: + call schedule +- DISABLE_INTERRUPTS # make sure we don't miss an interrupt ++ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt + # setting need_resched or sigpending + # between sampling and the iret + TRACE_IRQS_OFF +@@ -569,7 +555,8 @@ work_resched: + + work_notifysig: # deal with pending signals and + # notify-resume requests +- testl $VM_MASK, EFLAGS(%esp) ++#ifdef CONFIG_VM86 ++ testl $VM_MASK, PT_EFLAGS(%esp) + movl %esp, %eax + jne work_notifysig_v86 # returning to kernel-space or + # vm86-space +@@ -579,29 +566,30 @@ work_notifysig: # deal with pending s + + ALIGN + work_notifysig_v86: +-#ifdef CONFIG_VM86 + pushl %ecx # save ti_flags for do_notify_resume + CFI_ADJUST_CFA_OFFSET 4 + call save_v86_state # %eax contains pt_regs pointer + popl %ecx + CFI_ADJUST_CFA_OFFSET -4 + movl %eax, %esp ++#else ++ movl %esp, %eax ++#endif + xorl %edx, %edx + call do_notify_resume + jmp resume_userspace_sig +-#endif + + # perform syscall exit tracing + ALIGN + syscall_trace_entry: +- movl $-ENOSYS,EAX(%esp) ++ movl $-ENOSYS,PT_EAX(%esp) + movl %esp, %eax + xorl %edx,%edx + call do_syscall_trace + cmpl $0, %eax + jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU, + # so must skip actual syscall +- movl ORIG_EAX(%esp), %eax ++ movl PT_ORIG_EAX(%esp), %eax + cmpl $(nr_syscalls), %eax + jnae syscall_call + jmp syscall_exit +@@ -612,7 +600,7 @@ syscall_exit_work: + testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl + jz work_pending + TRACE_IRQS_ON +- ENABLE_INTERRUPTS # could let do_syscall_trace() call ++ ENABLE_INTERRUPTS(CLBR_ANY) # could let do_syscall_trace() call + # schedule() instead + movl %esp, %eax + movl $1, %edx +@@ -626,40 +614,39 @@ syscall_fault: + CFI_ADJUST_CFA_OFFSET 4 + SAVE_ALL + GET_THREAD_INFO(%ebp) +- movl $-EFAULT,EAX(%esp) ++ movl $-EFAULT,PT_EAX(%esp) + jmp resume_userspace + + syscall_badsys: +- movl $-ENOSYS,EAX(%esp) ++ movl $-ENOSYS,PT_EAX(%esp) + jmp resume_userspace + CFI_ENDPROC + + #ifndef CONFIG_XEN + #define FIXUP_ESPFIX_STACK \ +- movl %esp, %eax; \ +- /* switch to 32bit stack using the pointer on top of 16bit stack */ \ +- lss %ss:CPU_16BIT_STACK_SIZE-8, %esp; \ +- /* copy data from 16bit stack to 32bit stack */ \ +- call fixup_x86_bogus_stack; \ +- /* put ESP to the proper location */ \ +- movl %eax, %esp; +-#define UNWIND_ESPFIX_STACK \ ++ /* since we are on a wrong stack, we cant make it a C code :( */ \ ++ movl %gs:PDA_cpu, %ebx; \ ++ PER_CPU(cpu_gdt_descr, %ebx); \ ++ movl GDS_address(%ebx), %ebx; \ ++ GET_DESC_BASE(GDT_ENTRY_ESPFIX_SS, %ebx, %eax, %ax, %al, %ah); \ ++ addl %esp, %eax; \ ++ pushl $__KERNEL_DS; \ ++ CFI_ADJUST_CFA_OFFSET 4; \ + pushl %eax; \ + CFI_ADJUST_CFA_OFFSET 4; \ ++ lss (%esp), %esp; \ ++ CFI_ADJUST_CFA_OFFSET -8; ++#define UNWIND_ESPFIX_STACK \ + movl %ss, %eax; \ +- /* see if on 16bit stack */ \ ++ /* see if on espfix stack */ \ + cmpw $__ESPFIX_SS, %ax; \ +- je 28f; \ +-27: popl %eax; \ +- CFI_ADJUST_CFA_OFFSET -4; \ +-.section .fixup,"ax"; \ +-28: movl $__KERNEL_DS, %eax; \ ++ jne 27f; \ ++ movl $__KERNEL_DS, %eax; \ + movl %eax, %ds; \ + movl %eax, %es; \ +- /* switch to 32bit stack */ \ ++ /* switch to normal stack */ \ + FIXUP_ESPFIX_STACK; \ +- jmp 27b; \ +-.previous ++27:; + + /* + * Build the entry stubs and pointer table with +@@ -723,13 +710,16 @@ KPROBE_ENTRY(page_fault) + CFI_ADJUST_CFA_OFFSET 4 + ALIGN + error_code: ++ /* the function address is in %gs's slot on the stack */ ++ pushl %es ++ CFI_ADJUST_CFA_OFFSET 4 ++ /*CFI_REL_OFFSET es, 0*/ + pushl %ds + CFI_ADJUST_CFA_OFFSET 4 + /*CFI_REL_OFFSET ds, 0*/ + pushl %eax + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET eax, 0 +- xorl %eax, %eax + pushl %ebp + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebp, 0 +@@ -742,7 +732,6 @@ error_code: + pushl %edx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET edx, 0 +- decl %eax # eax = -1 + pushl %ecx + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ecx, 0 +@@ -750,18 +739,20 @@ error_code: + CFI_ADJUST_CFA_OFFSET 4 + CFI_REL_OFFSET ebx, 0 + cld +- pushl %es ++ pushl %gs + CFI_ADJUST_CFA_OFFSET 4 +- /*CFI_REL_OFFSET es, 0*/ ++ /*CFI_REL_OFFSET gs, 0*/ ++ movl $(__KERNEL_PDA), %ecx ++ movl %ecx, %gs + UNWIND_ESPFIX_STACK + popl %ecx + CFI_ADJUST_CFA_OFFSET -4 + /*CFI_REGISTER es, ecx*/ +- movl ES(%esp), %edi # get the function address +- movl ORIG_EAX(%esp), %edx # get the error code +- movl %eax, ORIG_EAX(%esp) +- movl %ecx, ES(%esp) +- /*CFI_REL_OFFSET es, ES*/ ++ movl PT_GS(%esp), %edi # get the function address ++ movl PT_ORIG_EAX(%esp), %edx # get the error code ++ movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart ++ mov %ecx, PT_GS(%esp) ++ /*CFI_REL_OFFSET gs, ES*/ + movl $(__USER_DS), %ecx + movl %ecx, %ds + movl %ecx, %es +@@ -793,8 +784,8 @@ ENTRY(hypervisor_callback) + pushl %eax + CFI_ADJUST_CFA_OFFSET 4 + SAVE_ALL +- movl CS(%esp),%ecx +- movl EIP(%esp),%eax ++ movl PT_CS(%esp),%ecx ++ movl PT_EIP(%esp),%eax + andl $SEGMENT_RPL_MASK,%ecx + cmpl $USER_RPL,%ecx + jae .Ldo_upcall +@@ -808,7 +799,7 @@ ENTRY(hypervisor_callback) + jb .Ldo_upcall + cmpl $sysexit_ecrit,%eax + ja .Ldo_upcall +- addl $OLDESP,%esp # Remove eflags...ebx from stack frame. ++ addl $PT_OLDESP,%esp # Remove eflags...ebx from stack frame. + #endif + .Ldo_upcall: + push %esp +@@ -830,7 +821,7 @@ critical_region_fixup: + movsbl critical_fixup_table-scrit(%eax),%ecx # %ecx contains num slots popped + testl %ecx,%ecx + leal (%esp,%ecx,4),%esi # %esi points at end of src region +- leal OLDESP(%esp),%edi # %edi points at end of dst region ++ leal PT_OLDESP(%esp),%edi # %edi points at end of dst region + jle 17f # skip loop if nothing to copy + 16: subl $4,%esi # pre-decrementing copy loop + subl $4,%edi +@@ -853,8 +844,9 @@ critical_fixup_table: + .byte 6 # pop %eax + .byte 7 # pop %ds + .byte 8 # pop %es +- .byte 9,9,9 # add $4,%esp +- .byte 10 # iret ++ .byte 9,9 # pop %gs ++ .byte 10,10,10 # add $4,%esp ++ .byte 11 # iret + .byte -1,-1,-1,-1 # movb $1,1(%esi) = __DISABLE_INTERRUPTS + .previous + +@@ -944,7 +936,7 @@ ENTRY(device_not_available) + jmp ret_from_exception + device_available_emulate: + #endif +- preempt_stop ++ preempt_stop(CLBR_ANY) + call math_state_restore + jmp ret_from_exception + CFI_ENDPROC +@@ -1014,7 +1006,7 @@ KPROBE_ENTRY(nmi) + cmpw $__ESPFIX_SS, %ax + popl %eax + CFI_ADJUST_CFA_OFFSET -4 +- je nmi_16bit_stack ++ je nmi_espfix_stack + cmpl $sysenter_entry,(%esp) + je nmi_stack_fixup + pushl %eax +@@ -1057,7 +1049,7 @@ nmi_debug_stack_check: + FIX_STACK(24,nmi_stack_correct, 1) + jmp nmi_stack_correct + +-nmi_16bit_stack: ++nmi_espfix_stack: + /* We have a RING0_INT_FRAME here. + * + * create the pointer to lss back +@@ -1066,7 +1058,6 @@ nmi_16bit_stack: + CFI_ADJUST_CFA_OFFSET 4 + pushl %esp + CFI_ADJUST_CFA_OFFSET 4 +- movzwl %sp, %esp + addw $4, (%esp) + /* copy the iret frame of 12 bytes */ + .rept 3 +@@ -1077,11 +1068,11 @@ nmi_16bit_stack: + CFI_ADJUST_CFA_OFFSET 4 + SAVE_ALL + FIXUP_ESPFIX_STACK # %eax == %esp +- CFI_ADJUST_CFA_OFFSET -20 # the frame has now moved + xorl %edx,%edx # zero error code + call do_nmi + RESTORE_REGS +- lss 12+4(%esp), %esp # back to 16bit stack ++ lss 12+4(%esp), %esp # back to espfix stack ++ CFI_ADJUST_CFA_OFFSET -24 + 1: INTERRUPT_RETURN + CFI_ENDPROC + .section __ex_table,"a" +@@ -1097,12 +1088,25 @@ KPROBE_ENTRY(nmi) + xorl %edx,%edx # zero error code + movl %esp,%eax # pt_regs pointer + call do_nmi +- orl $NMI_MASK, EFLAGS(%esp) ++ orl $NMI_MASK, PT_EFLAGS(%esp) + jmp restore_all + CFI_ENDPROC + #endif + KPROBE_END(nmi) + ++#ifdef CONFIG_PARAVIRT ++ENTRY(native_iret) ++1: iret ++.section __ex_table,"a" ++ .align 4 ++ .long 1b,iret_exc ++.previous ++ ++ENTRY(native_irq_enable_sysexit) ++ sti ++ sysexit ++#endif ++ + KPROBE_ENTRY(int3) + RING0_INT_FRAME + pushl $-1 # mark this as an int +@@ -1218,37 +1222,6 @@ ENTRY(spurious_interrupt_bug) + CFI_ENDPROC + #endif /* !CONFIG_XEN */ + +-#ifdef CONFIG_STACK_UNWIND +-ENTRY(arch_unwind_init_running) +- CFI_STARTPROC +- movl 4(%esp), %edx +- movl (%esp), %ecx +- leal 4(%esp), %eax +- movl %ebx, EBX(%edx) +- xorl %ebx, %ebx +- movl %ebx, ECX(%edx) +- movl %ebx, EDX(%edx) +- movl %esi, ESI(%edx) +- movl %edi, EDI(%edx) +- movl %ebp, EBP(%edx) +- movl %ebx, EAX(%edx) +- movl $__USER_DS, DS(%edx) +- movl $__USER_DS, ES(%edx) +- movl %ebx, ORIG_EAX(%edx) +- movl %ecx, EIP(%edx) +- movl 12(%esp), %ecx +- movl $__KERNEL_CS, CS(%edx) +- movl %ebx, EFLAGS(%edx) +- movl %eax, OLDESP(%edx) +- movl 8(%esp), %eax +- movl %ecx, 8(%esp) +- movl EBX(%edx), %ebx +- movl $__KERNEL_DS, OLDSS(%edx) +- jmpl *%eax +- CFI_ENDPROC +-ENDPROC(arch_unwind_init_running) +-#endif +- + ENTRY(fixup_4gb_segment) + RING0_EC_FRAME + pushl $do_fixup_4gb_segment +--- head-2010-01-18.orig/arch/x86/kernel/head_32-xen.S 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/head_32-xen.S 2009-11-06 10:46:27.000000000 +0100 +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -35,6 +36,8 @@ ENTRY(startup_32) + /* Set up the stack pointer */ + movl $(init_thread_union+THREAD_SIZE),%esp + ++ call setup_pda ++ + /* get vendor info */ + xorl %eax,%eax # call CPUID with 0 -> return vendor ID + XEN_CPUID +@@ -57,14 +60,58 @@ ENTRY(startup_32) + + movb $1,X86_HARD_MATH + +- xorl %eax,%eax # Clear FS/GS and LDT ++ xorl %eax,%eax # Clear FS + movl %eax,%fs +- movl %eax,%gs ++ ++ movl $(__KERNEL_PDA),%eax ++ mov %eax,%gs ++ + cld # gcc2 wants the direction flag cleared at all times + + pushl $0 # fake return address for unwinder + jmp start_kernel + ++/* ++ * Point the GDT at this CPU's PDA. This will be ++ * cpu_gdt_table and boot_pda. ++ */ ++setup_pda: ++ /* get the PDA pointer */ ++ movl $boot_pda, %eax ++ ++ /* slot the PDA address into the GDT */ ++ mov $cpu_gdt_table, %ecx ++ mov %ax, (__KERNEL_PDA+0+2)(%ecx) /* base & 0x0000ffff */ ++ shr $16, %eax ++ mov %al, (__KERNEL_PDA+4+0)(%ecx) /* base & 0x00ff0000 */ ++ mov %ah, (__KERNEL_PDA+4+3)(%ecx) /* base & 0xff000000 */ ++ ++ # %esi still points to start_info, and no registers ++ # need to be preserved. ++ ++ movl XEN_START_mfn_list(%esi), %ebx ++ movl $(cpu_gdt_table - __PAGE_OFFSET), %eax ++ shrl $PAGE_SHIFT, %eax ++ movl (%ebx,%eax,4), %ecx ++ pushl %ecx # frame number for set_gdt below ++ ++ xorl %esi, %esi ++ xorl %edx, %edx ++ shldl $PAGE_SHIFT, %ecx, %edx ++ shll $PAGE_SHIFT, %ecx ++ orl $0x61, %ecx ++ movl $cpu_gdt_table, %ebx ++ movl $__HYPERVISOR_update_va_mapping, %eax ++ int $0x82 ++ ++ movl $(PAGE_SIZE_asm / 8), %ecx ++ movl %esp, %ebx ++ movl $__HYPERVISOR_set_gdt, %eax ++ int $0x82 ++ ++ popl %ecx ++ ret ++ + #define HYPERCALL_PAGE_OFFSET 0x1000 + .org HYPERCALL_PAGE_OFFSET + ENTRY(hypercall_page) +@@ -93,7 +140,8 @@ ENTRY(empty_zero_page) + /* + * The Global Descriptor Table contains 28 quadwords, per-CPU. + */ +- .align L1_CACHE_BYTES ++ .section .data.page_aligned, "aw" ++ .align PAGE_SIZE_asm + ENTRY(cpu_gdt_table) + .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x0000000000000000 /* 0x0b reserved */ +@@ -135,12 +183,13 @@ ENTRY(cpu_gdt_table) + .quad 0x0000000000000000 /* 0xc0 APM CS 16 code (16 bit) */ + .quad 0x0000000000000000 /* 0xc8 APM DS data */ + +- .quad 0x0000000000000000 /* 0xd0 - ESPFIX 16-bit SS */ +- .quad 0x0000000000000000 /* 0xd8 - unused */ ++ .quad 0x0000000000000000 /* 0xd0 - ESPFIX SS */ ++ .quad 0x00cf92000000ffff /* 0xd8 - PDA */ + .quad 0x0000000000000000 /* 0xe0 - unused */ + .quad 0x0000000000000000 /* 0xe8 - unused */ + .quad 0x0000000000000000 /* 0xf0 - unused */ + .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ ++ .align PAGE_SIZE_asm + + #if CONFIG_XEN_COMPAT <= 0x030002 + /* +@@ -165,9 +214,9 @@ ENTRY(cpu_gdt_table) + .ascii ",ELF_PADDR_OFFSET=0x" + utoa __PAGE_OFFSET + .ascii ",VIRT_ENTRY=0x" +- utoa (__PAGE_OFFSET + __PHYSICAL_START + VIRT_ENTRY_OFFSET) ++ utoa (__PAGE_OFFSET + LOAD_PHYSICAL_ADDR + VIRT_ENTRY_OFFSET) + .ascii ",HYPERCALL_PAGE=0x" +- utoa ((__PHYSICAL_START+HYPERCALL_PAGE_OFFSET)>>PAGE_SHIFT) ++ utoa ((LOAD_PHYSICAL_ADDR+HYPERCALL_PAGE_OFFSET)>>PAGE_SHIFT) + .ascii ",FEATURES=writable_page_tables" + .ascii "|writable_descriptor_tables" + .ascii "|auto_translated_physmap" +--- head-2010-01-18.orig/arch/x86/kernel/io_apic_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/io_apic_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -199,14 +200,20 @@ static struct IO_APIC_route_entry ioapic + * the interrupt, and we need to make sure the entry is fully populated + * before that happens. + */ +-static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) ++static void ++__ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) + { +- unsigned long flags; + union entry_union eu; + eu.entry = e; +- spin_lock_irqsave(&ioapic_lock, flags); + io_apic_write(apic, 0x11 + 2*pin, eu.w2); + io_apic_write(apic, 0x10 + 2*pin, eu.w1); ++} ++ ++static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) ++{ ++ unsigned long flags; ++ spin_lock_irqsave(&ioapic_lock, flags); ++ __ioapic_write_entry(apic, pin, e); + spin_unlock_irqrestore(&ioapic_lock, flags); + } + +@@ -889,8 +896,7 @@ static int __init find_isa_irq_pin(int i + + if ((mp_bus_id_to_type[lbus] == MP_BUS_ISA || + mp_bus_id_to_type[lbus] == MP_BUS_EISA || +- mp_bus_id_to_type[lbus] == MP_BUS_MCA || +- mp_bus_id_to_type[lbus] == MP_BUS_NEC98 ++ mp_bus_id_to_type[lbus] == MP_BUS_MCA + ) && + (mp_irqs[i].mpc_irqtype == type) && + (mp_irqs[i].mpc_srcbusirq == irq)) +@@ -909,8 +915,7 @@ static int __init find_isa_irq_apic(int + + if ((mp_bus_id_to_type[lbus] == MP_BUS_ISA || + mp_bus_id_to_type[lbus] == MP_BUS_EISA || +- mp_bus_id_to_type[lbus] == MP_BUS_MCA || +- mp_bus_id_to_type[lbus] == MP_BUS_NEC98 ++ mp_bus_id_to_type[lbus] == MP_BUS_MCA + ) && + (mp_irqs[i].mpc_irqtype == type) && + (mp_irqs[i].mpc_srcbusirq == irq)) +@@ -1043,12 +1048,6 @@ static int EISA_ELCR(unsigned int irq) + #define default_MCA_trigger(idx) (1) + #define default_MCA_polarity(idx) (0) + +-/* NEC98 interrupts are always polarity zero edge triggered, +- * when listed as conforming in the MP table. */ +- +-#define default_NEC98_trigger(idx) (0) +-#define default_NEC98_polarity(idx) (0) +- + static int __init MPBIOS_polarity(int idx) + { + int bus = mp_irqs[idx].mpc_srcbus; +@@ -1083,11 +1082,6 @@ static int __init MPBIOS_polarity(int id + polarity = default_MCA_polarity(idx); + break; + } +- case MP_BUS_NEC98: /* NEC 98 pin */ +- { +- polarity = default_NEC98_polarity(idx); +- break; +- } + default: + { + printk(KERN_WARNING "broken BIOS!!\n"); +@@ -1157,11 +1151,6 @@ static int MPBIOS_trigger(int idx) + trigger = default_MCA_trigger(idx); + break; + } +- case MP_BUS_NEC98: /* NEC 98 pin */ +- { +- trigger = default_NEC98_trigger(idx); +- break; +- } + default: + { + printk(KERN_WARNING "broken BIOS!!\n"); +@@ -1223,7 +1212,6 @@ static int pin_2_irq(int idx, int apic, + case MP_BUS_ISA: /* ISA pin */ + case MP_BUS_EISA: + case MP_BUS_MCA: +- case MP_BUS_NEC98: + { + irq = mp_irqs[idx].mpc_srcbusirq; + break; +@@ -1291,7 +1279,7 @@ static inline int IO_APIC_irq_trigger(in + } + + /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */ +-u8 irq_vector[NR_IRQ_VECTORS] __read_mostly; /* = { FIRST_DEVICE_VECTOR , 0 }; */ ++static u8 irq_vector[NR_IRQ_VECTORS] __read_mostly; /* = { FIRST_DEVICE_VECTOR , 0 }; */ + + static int __assign_irq_vector(int irq) + { +@@ -1417,8 +1405,8 @@ static void __init setup_IO_APIC_irqs(vo + if (!apic && (irq < 16)) + disable_8259A_irq(irq); + } +- ioapic_write_entry(apic, pin, entry); + spin_lock_irqsave(&ioapic_lock, flags); ++ __ioapic_write_entry(apic, pin, entry); + set_native_irq_info(irq, TARGET_CPUS); + spin_unlock_irqrestore(&ioapic_lock, flags); + } +@@ -1988,6 +1976,15 @@ static void __init setup_ioapic_ids_from + #endif + + #ifndef CONFIG_XEN ++static int no_timer_check __initdata; ++ ++static int __init notimercheck(char *s) ++{ ++ no_timer_check = 1; ++ return 1; ++} ++__setup("no_timer_check", notimercheck); ++ + /* + * There is a nasty bug in some older SMP boards, their mptable lies + * about the timer IRQ. We do the following to work around the situation: +@@ -1996,10 +1993,13 @@ static void __init setup_ioapic_ids_from + * - if this function detects that timer IRQs are defunct, then we fall + * back to ISA timer IRQs + */ +-static int __init timer_irq_works(void) ++int __init timer_irq_works(void) + { + unsigned long t1 = jiffies; + ++ if (no_timer_check) ++ return 1; ++ + local_irq_enable(); + /* Let ten ticks pass... */ + mdelay((10 * 1000) / HZ); +@@ -2226,9 +2226,15 @@ static inline void unlock_ExtINT_logic(v + unsigned char save_control, save_freq_select; + + pin = find_isa_irq_pin(8, mp_INT); ++ if (pin == -1) { ++ WARN_ON_ONCE(1); ++ return; ++ } + apic = find_isa_irq_apic(8, mp_INT); +- if (pin == -1) ++ if (apic == -1) { ++ WARN_ON_ONCE(1); + return; ++ } + + entry0 = ioapic_read_entry(apic, pin); + clear_IO_APIC_pin(apic, pin); +@@ -2273,7 +2279,7 @@ int timer_uses_ioapic_pin_0; + * is so screwy. Thanks to Brian Perkins for testing/hacking this beast + * fanatically on his truly buggy board. + */ +-static inline void check_timer(void) ++static inline void __init check_timer(void) + { + int apic1, pin1, apic2, pin2; + int vector; +@@ -2558,7 +2564,7 @@ device_initcall(ioapic_init_sysfs); + int create_irq(void) + { + /* Allocate an unused irq */ +- int irq, new, vector; ++ int irq, new, vector = 0; + unsigned long flags; + + irq = -ENOSPC; +@@ -2939,8 +2945,8 @@ int io_apic_set_pci_routing (int ioapic, + if (!ioapic && (irq < 16)) + disable_8259A_irq(irq); + +- ioapic_write_entry(ioapic, pin, entry); + spin_lock_irqsave(&ioapic_lock, flags); ++ __ioapic_write_entry(ioapic, pin, entry); + set_native_irq_info(irq, TARGET_CPUS); + spin_unlock_irqrestore(&ioapic_lock, flags); + +--- head-2010-01-18.orig/arch/x86/kernel/ldt_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/ldt_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -177,16 +177,14 @@ static int read_default_ldt(void __user + { + int err; + unsigned long size; +- void *address; + + err = 0; +- address = &default_ldt[0]; + size = 5*sizeof(struct desc_struct); + if (size > bytecount) + size = bytecount; + + err = size; +- if (copy_to_user(ptr, address, size)) ++ if (clear_user(ptr, size)) + err = -EFAULT; + + return err; +--- head-2010-01-18.orig/arch/x86/kernel/microcode-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/microcode-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -1,7 +1,7 @@ + /* + * Intel CPU Microcode Update Driver for Linux + * +- * Copyright (C) 2000-2004 Tigran Aivazian ++ * Copyright (C) 2000-2006 Tigran Aivazian + * 2006 Shaohua Li + * + * This driver allows to upgrade microcode on Intel processors +@@ -43,7 +43,7 @@ + #include + + MODULE_DESCRIPTION("Intel CPU (IA-32) Microcode Update Driver"); +-MODULE_AUTHOR("Tigran Aivazian "); ++MODULE_AUTHOR("Tigran Aivazian "); + MODULE_LICENSE("GPL"); + + static int verbose; +@@ -195,7 +195,7 @@ static int __init microcode_init (void) + request_microcode(); + + printk(KERN_INFO +- "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " \n"); ++ "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " \n"); + return 0; + } + +--- head-2010-01-18.orig/arch/x86/kernel/mpparse_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/mpparse_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -36,7 +36,7 @@ + + /* Have we found an MP table */ + int smp_found_config; +-unsigned int __initdata maxcpus = NR_CPUS; ++unsigned int __cpuinitdata maxcpus = NR_CPUS; + + /* + * Various Linux-internal data structures created from the +@@ -102,10 +102,10 @@ static int __init mpf_checksum(unsigned + */ + + static int mpc_record; +-static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __initdata; ++static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __cpuinitdata; + + #ifndef CONFIG_XEN +-static void __devinit MP_processor_info (struct mpc_config_processor *m) ++static void __cpuinit MP_processor_info (struct mpc_config_processor *m) + { + int ver, apicid; + physid_mask_t phys_cpu; +@@ -221,7 +221,7 @@ static void __devinit MP_processor_info + bios_cpu_apicid[num_processors - 1] = m->mpc_apicid; + } + #else +-void __init MP_processor_info (struct mpc_config_processor *m) ++static void __cpuinit MP_processor_info (struct mpc_config_processor *m) + { + num_processors++; + } +@@ -256,8 +256,6 @@ static void __init MP_bus_info (struct m + mp_current_pci_id++; + } else if (strncmp(str, BUSTYPE_MCA, sizeof(BUSTYPE_MCA)-1) == 0) { + mp_bus_id_to_type[m->mpc_busid] = MP_BUS_MCA; +- } else if (strncmp(str, BUSTYPE_NEC98, sizeof(BUSTYPE_NEC98)-1) == 0) { +- mp_bus_id_to_type[m->mpc_busid] = MP_BUS_NEC98; + } else { + printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str); + } +@@ -842,7 +840,7 @@ void __init mp_register_lapic_address(u6 + #endif + } + +-void __devinit mp_register_lapic (u8 id, u8 enabled) ++void __cpuinit mp_register_lapic (u8 id, u8 enabled) + { + struct mpc_config_processor processor; + int boot_cpu = 0; +--- head-2010-01-18.orig/arch/x86/kernel/pci-dma-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/pci-dma-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -273,7 +273,7 @@ EXPORT_SYMBOL(dma_free_coherent); + int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, + dma_addr_t device_addr, size_t size, int flags) + { +- void __iomem *mem_base; ++ void __iomem *mem_base = NULL; + int pages = size >> PAGE_SHIFT; + int bitmap_size = (pages + 31)/32; + +@@ -290,14 +290,12 @@ int dma_declare_coherent_memory(struct d + if (!mem_base) + goto out; + +- dev->dma_mem = kmalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL); ++ dev->dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL); + if (!dev->dma_mem) + goto out; +- memset(dev->dma_mem, 0, sizeof(struct dma_coherent_mem)); +- dev->dma_mem->bitmap = kmalloc(bitmap_size, GFP_KERNEL); ++ dev->dma_mem->bitmap = kzalloc(bitmap_size, GFP_KERNEL); + if (!dev->dma_mem->bitmap) + goto free1_out; +- memset(dev->dma_mem->bitmap, 0, bitmap_size); + + dev->dma_mem->virt_base = mem_base; + dev->dma_mem->device_base = device_addr; +@@ -312,6 +310,8 @@ int dma_declare_coherent_memory(struct d + free1_out: + kfree(dev->dma_mem->bitmap); + out: ++ if (mem_base) ++ iounmap(mem_base); + return 0; + } + EXPORT_SYMBOL(dma_declare_coherent_memory); +--- head-2010-01-18.orig/arch/x86/kernel/process_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/process_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -60,6 +60,7 @@ + + #include + #include ++#include + + asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); + +@@ -104,28 +105,24 @@ EXPORT_SYMBOL(enable_hlt); + */ + static void poll_idle (void) + { +- local_irq_enable(); +- +- asm volatile( +- "2:" +- "testl %0, %1;" +- "rep; nop;" +- "je 2b;" +- : : "i"(_TIF_NEED_RESCHED), "m" (current_thread_info()->flags)); ++ cpu_relax(); + } + + static void xen_idle(void) + { +- local_irq_disable(); ++ current_thread_info()->status &= ~TS_POLLING; ++ /* ++ * TS_POLLING-cleared state must be visible before we ++ * test NEED_RESCHED: ++ */ ++ smp_mb(); + +- if (need_resched()) ++ local_irq_disable(); ++ if (!need_resched()) ++ safe_halt(); /* enables interrupts racelessly */ ++ else + local_irq_enable(); +- else { +- current_thread_info()->status &= ~TS_POLLING; +- smp_mb__after_clear_bit(); +- safe_halt(); +- current_thread_info()->status |= TS_POLLING; +- } ++ current_thread_info()->status |= TS_POLLING; + } + #ifdef CONFIG_APM_MODULE + EXPORT_SYMBOL(default_idle); +@@ -250,8 +247,8 @@ void show_regs(struct pt_regs * regs) + regs->eax,regs->ebx,regs->ecx,regs->edx); + printk("ESI: %08lx EDI: %08lx EBP: %08lx", + regs->esi, regs->edi, regs->ebp); +- printk(" DS: %04x ES: %04x\n", +- 0xffff & regs->xds,0xffff & regs->xes); ++ printk(" DS: %04x ES: %04x GS: %04x\n", ++ 0xffff & regs->xds,0xffff & regs->xes, 0xffff & regs->xgs); + + cr0 = read_cr0(); + cr2 = read_cr2(); +@@ -282,6 +279,7 @@ int kernel_thread(int (*fn)(void *), voi + + regs.xds = __USER_DS; + regs.xes = __USER_DS; ++ regs.xgs = __KERNEL_PDA; + regs.orig_eax = -1; + regs.eip = (unsigned long) kernel_thread_helper; + regs.xcs = __KERNEL_CS | get_kernel_rpl(); +@@ -359,7 +357,6 @@ int copy_thread(int nr, unsigned long cl + p->thread.eip = (unsigned long) ret_from_fork; + + savesegment(fs,p->thread.fs); +- savesegment(gs,p->thread.gs); + + tsk = current; + if (unlikely(test_tsk_thread_flag(tsk, TIF_IO_BITMAP))) { +@@ -438,7 +435,7 @@ void dump_thread(struct pt_regs * regs, + dump->regs.ds = regs->xds; + dump->regs.es = regs->xes; + savesegment(fs,dump->regs.fs); +- savesegment(gs,dump->regs.gs); ++ dump->regs.gs = regs->xgs; + dump->regs.orig_eax = regs->orig_eax; + dump->regs.eip = regs->eip; + dump->regs.cs = regs->xcs; +@@ -635,17 +632,19 @@ struct task_struct fastcall * __switch_t + if (unlikely(HYPERVISOR_multicall_check(_mcl, mcl - _mcl, NULL))) + BUG(); + ++ /* we're going to use this soon, after a few expensive things */ ++ if (next_p->fpu_counter > 5) ++ prefetch(&next->i387.fxsave); ++ + /* +- * Restore %fs and %gs if needed. ++ * Restore %fs if needed. + * +- * Glibc normally makes %fs be zero, and %gs is one of +- * the TLS segments. ++ * Glibc normally makes %fs be zero. + */ + if (unlikely(next->fs)) + loadsegment(fs, next->fs); + +- if (next->gs) +- loadsegment(gs, next->gs); ++ write_pda(pcurrent, next_p); + + /* + * Now maybe handle debug registers +@@ -655,6 +654,13 @@ struct task_struct fastcall * __switch_t + + disable_tsc(prev_p, next_p); + ++ /* If the task has used fpu the last 5 timeslices, just do a full ++ * restore of the math state immediately to avoid the trap; the ++ * chances of needing FPU soon are obviously high now ++ */ ++ if (next_p->fpu_counter > 5) ++ math_state_restore(); ++ + return prev_p; + } + +--- head-2010-01-18.orig/arch/x86/kernel/quirks-xen.c 2008-01-28 12:24:19.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/quirks-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -3,10 +3,12 @@ + */ + #include + #include ++#include ++#include ++#include + + #if defined(CONFIG_X86_IO_APIC) && (defined(CONFIG_SMP) || defined(CONFIG_XEN)) && defined(CONFIG_PCI) +- +-static void __devinit quirk_intel_irqbalance(struct pci_dev *dev) ++static void __devinit verify_quirk_intel_irqbalance(struct pci_dev *dev) + { + u8 config, rev; + u32 word; +@@ -14,14 +16,12 @@ static void __devinit quirk_intel_irqbal + /* BIOS may enable hardware IRQ balancing for + * E7520/E7320/E7525(revision ID 0x9 and below) + * based platforms. +- * Disable SW irqbalance/affinity on those platforms. ++ * For those platforms, make sure that the genapic is set to 'flat' + */ + pci_read_config_byte(dev, PCI_CLASS_REVISION, &rev); + if (rev > 0x9) + return; + +- printk(KERN_INFO "Intel E7520/7320/7525 detected."); +- + /* enable access to config space*/ + pci_read_config_byte(dev, 0xf4, &config); + pci_write_config_byte(dev, 0xf4, config|0x2); +@@ -30,6 +30,46 @@ static void __devinit quirk_intel_irqbal + raw_pci_ops->read(0, 0, 0x40, 0x4c, 2, &word); + + if (!(word & (1 << 13))) { ++#ifndef CONFIG_XEN ++#ifdef CONFIG_X86_64 ++ if (genapic != &apic_flat) ++ panic("APIC mode must be flat on this system\n"); ++#elif defined(CONFIG_X86_GENERICARCH) ++ if (genapic != &apic_default) ++ panic("APIC mode must be default(flat) on this system. Use apic=default\n"); ++#endif ++#endif ++ } ++ ++ /* put back the original value for config space*/ ++ if (!(config & 0x2)) ++ pci_write_config_byte(dev, 0xf4, config); ++} ++ ++void __init quirk_intel_irqbalance(void) ++{ ++ u8 config, rev; ++ u32 word; ++ ++ /* BIOS may enable hardware IRQ balancing for ++ * E7520/E7320/E7525(revision ID 0x9 and below) ++ * based platforms. ++ * Disable SW irqbalance/affinity on those platforms. ++ */ ++ rev = read_pci_config_byte(0, 0, 0, PCI_CLASS_REVISION); ++ if (rev > 0x9) ++ return; ++ ++ printk(KERN_INFO "Intel E7520/7320/7525 detected."); ++ ++ /* enable access to config space */ ++ config = read_pci_config_byte(0, 0, 0, 0xf4); ++ write_pci_config_byte(0, 0, 0, 0xf4, config|0x2); ++ ++ /* read xTPR register */ ++ word = read_pci_config_16(0, 0, 0x40, 0x4c); ++ ++ if (!(word & (1 << 13))) { + struct xen_platform_op op; + printk(KERN_INFO "Disabling irq balancing and affinity\n"); + op.cmd = XENPF_platform_quirk; +@@ -37,11 +77,12 @@ static void __devinit quirk_intel_irqbal + WARN_ON(HYPERVISOR_platform_op(&op)); + } + +- /* put back the original value for config space*/ ++ /* put back the original value for config space */ + if (!(config & 0x2)) +- pci_write_config_byte(dev, 0xf4, config); ++ write_pci_config_byte(0, 0, 0, 0xf4, config); + } +-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_intel_irqbalance); +-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_intel_irqbalance); +-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_intel_irqbalance); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, verify_quirk_intel_irqbalance); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, verify_quirk_intel_irqbalance); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, verify_quirk_intel_irqbalance); ++ + #endif +--- head-2010-01-18.orig/arch/x86/kernel/setup_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/setup_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -76,9 +76,6 @@ + #include + #endif + +-/* Forward Declaration. */ +-void __init find_max_pfn(void); +- + static int xen_panic_event(struct notifier_block *, unsigned long, void *); + static struct notifier_block xen_panic_block = { + xen_panic_event, NULL, 0 /* try to go last */ +@@ -89,14 +86,11 @@ int disable_pse __devinitdata = 0; + /* + * Machine setup.. + */ +- +-#ifdef CONFIG_EFI +-int efi_enabled = 0; +-EXPORT_SYMBOL(efi_enabled); +-#endif ++extern struct resource code_resource; ++extern struct resource data_resource; + + /* cpu data as detected by the assembly code in head.S */ +-struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; ++struct cpuinfo_x86 new_cpu_data __cpuinitdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; + /* common cpu data for all cpus */ + struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; + EXPORT_SYMBOL(boot_cpu_data); +@@ -112,12 +106,6 @@ unsigned int machine_submodel_id; + unsigned int BIOS_revision; + unsigned int mca_pentium_flag; + +-/* For PCI or other memory-mapped resources */ +-unsigned long pci_mem_start = 0x10000000; +-#ifdef CONFIG_PCI +-EXPORT_SYMBOL(pci_mem_start); +-#endif +- + /* Boot loader ID as an integer, for the benefit of proc_dointvec */ + int bootloader_type; + +@@ -150,10 +138,6 @@ struct ist_info ist_info; + defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) + EXPORT_SYMBOL(ist_info); + #endif +-struct e820map e820; +-#ifdef CONFIG_XEN +-struct e820map machine_e820; +-#endif + + extern void early_cpu_init(void); + extern int root_mountflags; +@@ -168,209 +152,6 @@ static char command_line[COMMAND_LINE_SI + + unsigned char __initdata boot_params[PARAM_SIZE]; + +-static struct resource data_resource = { +- .name = "Kernel data", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_MEM +-}; +- +-static struct resource code_resource = { +- .name = "Kernel code", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_MEM +-}; +- +-static struct resource system_rom_resource = { +- .name = "System ROM", +- .start = 0xf0000, +- .end = 0xfffff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-static struct resource extension_rom_resource = { +- .name = "Extension ROM", +- .start = 0xe0000, +- .end = 0xeffff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-static struct resource adapter_rom_resources[] = { { +- .name = "Adapter ROM", +- .start = 0xc8000, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-} }; +- +-static struct resource video_rom_resource = { +- .name = "Video ROM", +- .start = 0xc0000, +- .end = 0xc7fff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-static struct resource video_ram_resource = { +- .name = "Video RAM area", +- .start = 0xa0000, +- .end = 0xbffff, +- .flags = IORESOURCE_BUSY | IORESOURCE_MEM +-}; +- +-static struct resource standard_io_resources[] = { { +- .name = "dma1", +- .start = 0x0000, +- .end = 0x001f, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "pic1", +- .start = 0x0020, +- .end = 0x0021, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "timer0", +- .start = 0x0040, +- .end = 0x0043, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "timer1", +- .start = 0x0050, +- .end = 0x0053, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "keyboard", +- .start = 0x0060, +- .end = 0x006f, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "dma page reg", +- .start = 0x0080, +- .end = 0x008f, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "pic2", +- .start = 0x00a0, +- .end = 0x00a1, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "dma2", +- .start = 0x00c0, +- .end = 0x00df, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-}, { +- .name = "fpu", +- .start = 0x00f0, +- .end = 0x00ff, +- .flags = IORESOURCE_BUSY | IORESOURCE_IO +-} }; +- +-#define romsignature(x) (*(unsigned short *)(x) == 0xaa55) +- +-static int __init romchecksum(unsigned char *rom, unsigned long length) +-{ +- unsigned char *p, sum = 0; +- +- for (p = rom; p < rom + length; p++) +- sum += *p; +- return sum == 0; +-} +- +-static void __init probe_roms(void) +-{ +- unsigned long start, length, upper; +- unsigned char *rom; +- int i; +- +-#ifdef CONFIG_XEN +- /* Nothing to do if not running in dom0. */ +- if (!is_initial_xendomain()) +- return; +-#endif +- +- /* video rom */ +- upper = adapter_rom_resources[0].start; +- for (start = video_rom_resource.start; start < upper; start += 2048) { +- rom = isa_bus_to_virt(start); +- if (!romsignature(rom)) +- continue; +- +- video_rom_resource.start = start; +- +- /* 0 < length <= 0x7f * 512, historically */ +- length = rom[2] * 512; +- +- /* if checksum okay, trust length byte */ +- if (length && romchecksum(rom, length)) +- video_rom_resource.end = start + length - 1; +- +- request_resource(&iomem_resource, &video_rom_resource); +- break; +- } +- +- start = (video_rom_resource.end + 1 + 2047) & ~2047UL; +- if (start < upper) +- start = upper; +- +- /* system rom */ +- request_resource(&iomem_resource, &system_rom_resource); +- upper = system_rom_resource.start; +- +- /* check for extension rom (ignore length byte!) */ +- rom = isa_bus_to_virt(extension_rom_resource.start); +- if (romsignature(rom)) { +- length = extension_rom_resource.end - extension_rom_resource.start + 1; +- if (romchecksum(rom, length)) { +- request_resource(&iomem_resource, &extension_rom_resource); +- upper = extension_rom_resource.start; +- } +- } +- +- /* check for adapter roms on 2k boundaries */ +- for (i = 0; i < ARRAY_SIZE(adapter_rom_resources) && start < upper; start += 2048) { +- rom = isa_bus_to_virt(start); +- if (!romsignature(rom)) +- continue; +- +- /* 0 < length <= 0x7f * 512, historically */ +- length = rom[2] * 512; +- +- /* but accept any length that fits if checksum okay */ +- if (!length || start + length > upper || !romchecksum(rom, length)) +- continue; +- +- adapter_rom_resources[i].start = start; +- adapter_rom_resources[i].end = start + length - 1; +- request_resource(&iomem_resource, &adapter_rom_resources[i]); +- +- start = adapter_rom_resources[i++].end & ~2047UL; +- } +-} +- + /* + * Point at the empty zero page to start with. We map the real shared_info + * page as soon as fixmap is up and running. +@@ -386,353 +167,6 @@ EXPORT_SYMBOL(phys_to_machine_mapping); + start_info_t *xen_start_info; + EXPORT_SYMBOL(xen_start_info); + +-void __init add_memory_region(unsigned long long start, +- unsigned long long size, int type) +-{ +- int x; +- +- if (!efi_enabled) { +- x = e820.nr_map; +- +- if (x == E820MAX) { +- printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); +- return; +- } +- +- e820.map[x].addr = start; +- e820.map[x].size = size; +- e820.map[x].type = type; +- e820.nr_map++; +- } +-} /* add_memory_region */ +- +-static void __init limit_regions(unsigned long long size) +-{ +- unsigned long long current_addr = 0; +- int i; +- +- if (efi_enabled) { +- efi_memory_desc_t *md; +- void *p; +- +- for (p = memmap.map, i = 0; p < memmap.map_end; +- p += memmap.desc_size, i++) { +- md = p; +- current_addr = md->phys_addr + (md->num_pages << 12); +- if (md->type == EFI_CONVENTIONAL_MEMORY) { +- if (current_addr >= size) { +- md->num_pages -= +- (((current_addr-size) + PAGE_SIZE-1) >> PAGE_SHIFT); +- memmap.nr_map = i + 1; +- return; +- } +- } +- } +- } +- for (i = 0; i < e820.nr_map; i++) { +- current_addr = e820.map[i].addr + e820.map[i].size; +- if (current_addr < size) +- continue; +- +- if (e820.map[i].type != E820_RAM) +- continue; +- +- if (e820.map[i].addr >= size) { +- /* +- * This region starts past the end of the +- * requested size, skip it completely. +- */ +- e820.nr_map = i; +- } else { +- e820.nr_map = i + 1; +- e820.map[i].size -= current_addr - size; +- } +- return; +- } +-#ifdef CONFIG_XEN +- if (i==e820.nr_map && current_addr < size) { +- /* +- * The e820 map finished before our requested size so +- * extend the final entry to the requested address. +- */ +- --i; +- if (e820.map[i].type == E820_RAM) +- e820.map[i].size -= current_addr - size; +- else +- add_memory_region(current_addr, size - current_addr, E820_RAM); +- } +-#endif +-} +- +-#define E820_DEBUG 1 +- +-static void __init print_memory_map(char *who) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- printk(" %s: %016Lx - %016Lx ", who, +- e820.map[i].addr, +- e820.map[i].addr + e820.map[i].size); +- switch (e820.map[i].type) { +- case E820_RAM: printk("(usable)\n"); +- break; +- case E820_RESERVED: +- printk("(reserved)\n"); +- break; +- case E820_ACPI: +- printk("(ACPI data)\n"); +- break; +- case E820_NVS: +- printk("(ACPI NVS)\n"); +- break; +- default: printk("type %lu\n", e820.map[i].type); +- break; +- } +- } +-} +- +-/* +- * Sanitize the BIOS e820 map. +- * +- * Some e820 responses include overlapping entries. The following +- * replaces the original e820 map with a new one, removing overlaps. +- * +- */ +-struct change_member { +- struct e820entry *pbios; /* pointer to original bios entry */ +- unsigned long long addr; /* address for this change point */ +-}; +-static struct change_member change_point_list[2*E820MAX] __initdata; +-static struct change_member *change_point[2*E820MAX] __initdata; +-static struct e820entry *overlap_list[E820MAX] __initdata; +-static struct e820entry new_bios[E820MAX] __initdata; +- +-int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map) +-{ +- struct change_member *change_tmp; +- unsigned long current_type, last_type; +- unsigned long long last_addr; +- int chgidx, still_changing; +- int overlap_entries; +- int new_bios_entry; +- int old_nr, new_nr, chg_nr; +- int i; +- +- /* +- Visually we're performing the following (1,2,3,4 = memory types)... +- +- Sample memory map (w/overlaps): +- ____22__________________ +- ______________________4_ +- ____1111________________ +- _44_____________________ +- 11111111________________ +- ____________________33__ +- ___________44___________ +- __________33333_________ +- ______________22________ +- ___________________2222_ +- _________111111111______ +- _____________________11_ +- _________________4______ +- +- Sanitized equivalent (no overlap): +- 1_______________________ +- _44_____________________ +- ___1____________________ +- ____22__________________ +- ______11________________ +- _________1______________ +- __________3_____________ +- ___________44___________ +- _____________33_________ +- _______________2________ +- ________________1_______ +- _________________4______ +- ___________________2____ +- ____________________33__ +- ______________________4_ +- */ +- +- /* if there's only one memory region, don't bother */ +- if (*pnr_map < 2) +- return -1; +- +- old_nr = *pnr_map; +- +- /* bail out if we find any unreasonable addresses in bios map */ +- for (i=0; iaddr = biosmap[i].addr; +- change_point[chgidx++]->pbios = &biosmap[i]; +- change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size; +- change_point[chgidx++]->pbios = &biosmap[i]; +- } +- } +- chg_nr = chgidx; /* true number of change-points */ +- +- /* sort change-point list by memory addresses (low -> high) */ +- still_changing = 1; +- while (still_changing) { +- still_changing = 0; +- for (i=1; i < chg_nr; i++) { +- /* if > , swap */ +- /* or, if current= & last=, swap */ +- if ((change_point[i]->addr < change_point[i-1]->addr) || +- ((change_point[i]->addr == change_point[i-1]->addr) && +- (change_point[i]->addr == change_point[i]->pbios->addr) && +- (change_point[i-1]->addr != change_point[i-1]->pbios->addr)) +- ) +- { +- change_tmp = change_point[i]; +- change_point[i] = change_point[i-1]; +- change_point[i-1] = change_tmp; +- still_changing=1; +- } +- } +- } +- +- /* create a new bios memory map, removing overlaps */ +- overlap_entries=0; /* number of entries in the overlap table */ +- new_bios_entry=0; /* index for creating new bios map entries */ +- last_type = 0; /* start with undefined memory type */ +- last_addr = 0; /* start with 0 as last starting address */ +- /* loop through change-points, determining affect on the new bios map */ +- for (chgidx=0; chgidx < chg_nr; chgidx++) +- { +- /* keep track of all overlapping bios entries */ +- if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr) +- { +- /* add map entry to overlap list (> 1 entry implies an overlap) */ +- overlap_list[overlap_entries++]=change_point[chgidx]->pbios; +- } +- else +- { +- /* remove entry from list (order independent, so swap with last) */ +- for (i=0; ipbios) +- overlap_list[i] = overlap_list[overlap_entries-1]; +- } +- overlap_entries--; +- } +- /* if there are overlapping entries, decide which "type" to use */ +- /* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */ +- current_type = 0; +- for (i=0; itype > current_type) +- current_type = overlap_list[i]->type; +- /* continue building up new bios map based on this information */ +- if (current_type != last_type) { +- if (last_type != 0) { +- new_bios[new_bios_entry].size = +- change_point[chgidx]->addr - last_addr; +- /* move forward only if the new size was non-zero */ +- if (new_bios[new_bios_entry].size != 0) +- if (++new_bios_entry >= E820MAX) +- break; /* no more space left for new bios entries */ +- } +- if (current_type != 0) { +- new_bios[new_bios_entry].addr = change_point[chgidx]->addr; +- new_bios[new_bios_entry].type = current_type; +- last_addr=change_point[chgidx]->addr; +- } +- last_type = current_type; +- } +- } +- new_nr = new_bios_entry; /* retain count for new bios entries */ +- +- /* copy new bios mapping into original location */ +- memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry)); +- *pnr_map = new_nr; +- +- return 0; +-} +- +-/* +- * Copy the BIOS e820 map into a safe place. +- * +- * Sanity-check it while we're at it.. +- * +- * If we're lucky and live on a modern system, the setup code +- * will have given us a memory map that we can use to properly +- * set up memory. If we aren't, we'll fake a memory map. +- * +- * We check to see that the memory map contains at least 2 elements +- * before we'll use it, because the detection code in setup.S may +- * not be perfect and most every PC known to man has two memory +- * regions: one from 0 to 640k, and one from 1mb up. (The IBM +- * thinkpad 560x, for example, does not cooperate with the memory +- * detection code.) +- */ +-int __init copy_e820_map(struct e820entry * biosmap, int nr_map) +-{ +-#ifndef CONFIG_XEN +- /* Only one memory region (or negative)? Ignore it */ +- if (nr_map < 2) +- return -1; +-#else +- BUG_ON(nr_map < 1); +-#endif +- +- do { +- unsigned long long start = biosmap->addr; +- unsigned long long size = biosmap->size; +- unsigned long long end = start + size; +- unsigned long type = biosmap->type; +- +- /* Overflow in 64 bits? Ignore the memory map. */ +- if (start > end) +- return -1; +- +-#ifndef CONFIG_XEN +- /* +- * Some BIOSes claim RAM in the 640k - 1M region. +- * Not right. Fix it up. +- */ +- if (type == E820_RAM) { +- if (start < 0x100000ULL && end > 0xA0000ULL) { +- if (start < 0xA0000ULL) +- add_memory_region(start, 0xA0000ULL-start, type); +- if (end <= 0x100000ULL) +- continue; +- start = 0x100000ULL; +- size = end - start; +- } +- } +-#endif +- add_memory_region(start, size, type); +- } while (biosmap++,--nr_map); +- +-#ifdef CONFIG_XEN +- if (is_initial_xendomain()) { +- struct xen_memory_map memmap; +- +- memmap.nr_entries = E820MAX; +- set_xen_guest_handle(memmap.buffer, machine_e820.map); +- +- if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)) +- BUG(); +- machine_e820.nr_map = memmap.nr_entries; +- } else +- machine_e820 = e820; +-#endif +- +- return 0; +-} +- + #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) + struct edd edd; + #ifdef CONFIG_EDD_MODULE +@@ -758,7 +192,7 @@ static inline void copy_edd(void) + } + #endif + +-static int __initdata user_defined_memmap = 0; ++int __initdata user_defined_memmap = 0; + + /* + * "mem=nopentium" disables the 4MB page tables. +@@ -795,51 +229,6 @@ static int __init parse_mem(char *arg) + } + early_param("mem", parse_mem); + +-static int __init parse_memmap(char *arg) +-{ +- if (!arg) +- return -EINVAL; +- +- if (strcmp(arg, "exactmap") == 0) { +-#ifdef CONFIG_CRASH_DUMP +- /* If we are doing a crash dump, we +- * still need to know the real mem +- * size before original memory map is +- * reset. +- */ +- find_max_pfn(); +- saved_max_pfn = max_pfn; +-#endif +- e820.nr_map = 0; +- user_defined_memmap = 1; +- } else { +- /* If the user specifies memory size, we +- * limit the BIOS-provided memory map to +- * that size. exactmap can be used to specify +- * the exact map. mem=number can be used to +- * trim the existing memory map. +- */ +- unsigned long long start_at, mem_size; +- +- mem_size = memparse(arg, &arg); +- if (*arg == '@') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_RAM); +- } else if (*arg == '#') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_ACPI); +- } else if (*arg == '$') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_RESERVED); +- } else { +- limit_regions(mem_size); +- user_defined_memmap = 1; +- } +- } +- return 0; +-} +-early_param("memmap", parse_memmap); +- + #ifdef CONFIG_PROC_VMCORE + /* elfcorehdr= specifies the location of elf core header + * stored by the crashed kernel. +@@ -906,127 +295,6 @@ early_param("reservetop", parse_reservet + #endif + + /* +- * Callback for efi_memory_walk. +- */ +-static int __init +-efi_find_max_pfn(unsigned long start, unsigned long end, void *arg) +-{ +- unsigned long *max_pfn = arg, pfn; +- +- if (start < end) { +- pfn = PFN_UP(end -1); +- if (pfn > *max_pfn) +- *max_pfn = pfn; +- } +- return 0; +-} +- +-static int __init +-efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg) +-{ +- memory_present(0, PFN_UP(start), PFN_DOWN(end)); +- return 0; +-} +- +-/* +- * This function checks if any part of the range is mapped +- * with type. +- */ +-int +-e820_any_mapped(u64 start, u64 end, unsigned type) +-{ +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- const struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; ++i) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- +- if (type && ei->type != type) +- continue; +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- return 1; +- } +- return 0; +-} +-EXPORT_SYMBOL_GPL(e820_any_mapped); +- +- /* +- * This function checks if the entire range is mapped with type. +- * +- * Note: this function only works correct if the e820 table is sorted and +- * not-overlapping, which is the case +- */ +-int __init +-e820_all_mapped(unsigned long s, unsigned long e, unsigned type) +-{ +- u64 start = s; +- u64 end = e; +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; ++i) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- if (type && ei->type != type) +- continue; +- /* is the region (part) in overlap with the current region ?*/ +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- /* if the region is at the beginning of we move +- * start to the end of the region since it's ok until there +- */ +- if (ei->addr <= start) +- start = ei->addr + ei->size; +- /* if start is now at or beyond end, we're done, full +- * coverage */ +- if (start >= end) +- return 1; /* we're done */ +- } +- return 0; +-} +- +-/* +- * Find the highest page frame number we have available +- */ +-void __init find_max_pfn(void) +-{ +- int i; +- +- max_pfn = 0; +- if (efi_enabled) { +- efi_memmap_walk(efi_find_max_pfn, &max_pfn); +- efi_memmap_walk(efi_memory_present_wrapper, NULL); +- return; +- } +- +- for (i = 0; i < e820.nr_map; i++) { +- unsigned long start, end; +- /* RAM? */ +- if (e820.map[i].type != E820_RAM) +- continue; +- start = PFN_UP(e820.map[i].addr); +- end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); +- if (start >= end) +- continue; +- if (end > max_pfn) +- max_pfn = end; +- memory_present(0, start, end); +- } +-} +- +-/* + * Determine low and high memory ranges: + */ + unsigned long __init find_max_low_pfn(void) +@@ -1085,77 +353,6 @@ unsigned long __init find_max_low_pfn(vo + return max_low_pfn; + } + +-/* +- * Free all available memory for boot time allocation. Used +- * as a callback function by efi_memory_walk() +- */ +- +-static int __init +-free_available_memory(unsigned long start, unsigned long end, void *arg) +-{ +- /* check max_low_pfn */ +- if (start >= (max_low_pfn << PAGE_SHIFT)) +- return 0; +- if (end >= (max_low_pfn << PAGE_SHIFT)) +- end = max_low_pfn << PAGE_SHIFT; +- if (start < end) +- free_bootmem(start, end - start); +- +- return 0; +-} +-/* +- * Register fully available low RAM pages with the bootmem allocator. +- */ +-static void __init register_bootmem_low_pages(unsigned long max_low_pfn) +-{ +- int i; +- +- if (efi_enabled) { +- efi_memmap_walk(free_available_memory, NULL); +- return; +- } +- for (i = 0; i < e820.nr_map; i++) { +- unsigned long curr_pfn, last_pfn, size; +- /* +- * Reserve usable low memory +- */ +- if (e820.map[i].type != E820_RAM) +- continue; +- /* +- * We are rounding up the start address of usable memory: +- */ +- curr_pfn = PFN_UP(e820.map[i].addr); +- if (curr_pfn >= max_low_pfn) +- continue; +- /* +- * ... and at the end of the usable range downwards: +- */ +- last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size); +- +-#ifdef CONFIG_XEN +- /* +- * Truncate to the number of actual pages currently +- * present. +- */ +- if (last_pfn > xen_start_info->nr_pages) +- last_pfn = xen_start_info->nr_pages; +-#endif +- +- if (last_pfn > max_low_pfn) +- last_pfn = max_low_pfn; +- +- /* +- * .. finally, did all the rounding and playing +- * around just make the area go away? +- */ +- if (last_pfn <= curr_pfn) +- continue; +- +- size = last_pfn - curr_pfn; +- free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size)); +- } +-} +- + #ifndef CONFIG_XEN + /* + * workaround for Dell systems that neglect to reserve EBDA +@@ -1247,8 +444,8 @@ void __init setup_bootmem_allocator(void + * the (very unlikely) case of us accidentally initializing the + * bootmem allocator with an invalid RAM area. + */ +- reserve_bootmem(__PHYSICAL_START, (PFN_PHYS(min_low_pfn) + +- bootmap_size + PAGE_SIZE-1) - (__PHYSICAL_START)); ++ reserve_bootmem(__pa_symbol(_text), (PFN_PHYS(min_low_pfn) + ++ bootmap_size + PAGE_SIZE-1) - __pa_symbol(_text)); + + #ifndef CONFIG_XEN + /* +@@ -1330,160 +527,6 @@ void __init remapped_pgdat_init(void) + } + } + +-/* +- * Request address space for all standard RAM and ROM resources +- * and also for regions reported as reserved by the e820. +- */ +-static void __init +-legacy_init_iomem_resources(struct e820entry *e820, int nr_map, +- struct resource *code_resource, +- struct resource *data_resource) +-{ +- int i; +- +- probe_roms(); +- +- for (i = 0; i < nr_map; i++) { +- struct resource *res; +-#ifndef CONFIG_RESOURCES_64BIT +- if (e820[i].addr + e820[i].size > 0x100000000ULL) +- continue; +-#endif +- res = kzalloc(sizeof(struct resource), GFP_ATOMIC); +- switch (e820[i].type) { +- case E820_RAM: res->name = "System RAM"; break; +- case E820_ACPI: res->name = "ACPI Tables"; break; +- case E820_NVS: res->name = "ACPI Non-volatile Storage"; break; +- default: res->name = "reserved"; +- } +- res->start = e820[i].addr; +- res->end = res->start + e820[i].size - 1; +- res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; +- if (request_resource(&iomem_resource, res)) { +- kfree(res); +- continue; +- } +- if (e820[i].type == E820_RAM) { +- /* +- * We don't know which RAM region contains kernel data, +- * so we try it repeatedly and let the resource manager +- * test it. +- */ +-#ifndef CONFIG_XEN +- request_resource(res, code_resource); +- request_resource(res, data_resource); +-#endif +-#ifdef CONFIG_KEXEC +- if (crashk_res.start != crashk_res.end) +- request_resource(res, &crashk_res); +-#ifdef CONFIG_XEN +- xen_machine_kexec_register_resources(res); +-#endif +-#endif +- } +- } +-} +- +-/* +- * Locate a unused range of the physical address space below 4G which +- * can be used for PCI mappings. +- */ +-static void __init +-e820_setup_gap(struct e820entry *e820, int nr_map) +-{ +- unsigned long gapstart, gapsize, round; +- unsigned long long last; +- int i; +- +- /* +- * Search for the bigest gap in the low 32 bits of the e820 +- * memory space. +- */ +- last = 0x100000000ull; +- gapstart = 0x10000000; +- gapsize = 0x400000; +- i = nr_map; +- while (--i >= 0) { +- unsigned long long start = e820[i].addr; +- unsigned long long end = start + e820[i].size; +- +- /* +- * Since "last" is at most 4GB, we know we'll +- * fit in 32 bits if this condition is true +- */ +- if (last > end) { +- unsigned long gap = last - end; +- +- if (gap > gapsize) { +- gapsize = gap; +- gapstart = end; +- } +- } +- if (start < last) +- last = start; +- } +- +- /* +- * See how much we want to round up: start off with +- * rounding to the next 1MB area. +- */ +- round = 0x100000; +- while ((gapsize >> 4) > round) +- round += round; +- /* Fun with two's complement */ +- pci_mem_start = (gapstart + round) & -round; +- +- printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n", +- pci_mem_start, gapstart, gapsize); +-} +- +-/* +- * Request address space for all standard resources +- * +- * This is called just before pcibios_init(), which is also a +- * subsys_initcall, but is linked in later (in arch/i386/pci/common.c). +- */ +-static int __init request_standard_resources(void) +-{ +- int i; +- +- /* Nothing to do if not running in dom0. */ +- if (!is_initial_xendomain()) +- return 0; +- +- printk("Setting up standard PCI resources\n"); +-#ifdef CONFIG_XEN +- legacy_init_iomem_resources(machine_e820.map, machine_e820.nr_map, +- &code_resource, &data_resource); +-#else +- if (efi_enabled) +- efi_initialize_iomem_resources(&code_resource, &data_resource); +- else +- legacy_init_iomem_resources(e820.map, e820.nr_map, +- &code_resource, &data_resource); +-#endif +- +- /* EFI systems may still have VGA */ +- request_resource(&iomem_resource, &video_ram_resource); +- +- /* request I/O space for devices used on all i[345]86 PCs */ +- for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++) +- request_resource(&ioport_resource, &standard_io_resources[i]); +- return 0; +-} +- +-subsys_initcall(request_standard_resources); +- +-static void __init register_memory(void) +-{ +-#ifdef CONFIG_XEN +- if (is_initial_xendomain()) +- e820_setup_gap(machine_e820.map, machine_e820.nr_map); +- else +-#endif +- e820_setup_gap(e820.map, e820.nr_map); +-} +- + #ifdef CONFIG_MCA + static void set_mca_bus(int x) + { +@@ -1493,6 +536,12 @@ static void set_mca_bus(int x) + static void set_mca_bus(int x) { } + #endif + ++/* Overridden in paravirt.c if CONFIG_PARAVIRT */ ++char * __init __attribute__((weak)) memory_setup(void) ++{ ++ return machine_specific_memory_setup(); ++} ++ + /* + * Determine if we were loaded by an EFI loader. If so, then we have also been + * passed the efi memmap, systab, etc., so we should use these data structures +@@ -1580,7 +629,7 @@ void __init setup_arch(char **cmdline_p) + efi_init(); + else { + printk(KERN_INFO "BIOS-provided physical RAM map:\n"); +- print_memory_map(machine_specific_memory_setup()); ++ print_memory_map(memory_setup()); + } + + copy_edd(); +@@ -1759,7 +808,7 @@ void __init setup_arch(char **cmdline_p) + get_smp_config(); + #endif + +- register_memory(); ++ e820_register_memory(); + + if (is_initial_xendomain()) { + #ifdef CONFIG_VT +--- head-2010-01-18.orig/arch/x86/kernel/smp_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/smp_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -659,6 +659,10 @@ int smp_call_function_single(int cpu, vo + put_cpu(); + return -EBUSY; + } ++ ++ /* Can deadlock when called with interrupts disabled */ ++ WARN_ON(irqs_disabled()); ++ + spin_lock_bh(&call_lock); + __smp_call_function_single(cpu, func, info, nonatomic, wait); + spin_unlock_bh(&call_lock); +--- head-2010-01-18.orig/arch/x86/kernel/time-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/time-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -61,6 +61,7 @@ + #include + #include + #include ++#include + #include + + #include "mach_time.h" +@@ -129,11 +130,11 @@ static DEFINE_PER_CPU(struct vcpu_runsta + /* Must be signed, as it's compared with s64 quantities which can be -ve. */ + #define NS_PER_TICK (1000000000LL/HZ) + +-static void __clock_was_set(void *unused) ++static void __clock_was_set(struct work_struct *unused) + { + clock_was_set(); + } +-static DECLARE_WORK(clock_was_set_work, __clock_was_set, NULL); ++static DECLARE_WORK(clock_was_set_work, __clock_was_set); + + /* + * GCC 4.3 can turn loops over an induction variable into division. We do +@@ -528,10 +529,7 @@ static int set_rtc_mmss(unsigned long no + /* gets recalled with irq locally disabled */ + /* XXX - does irqsave resolve this? -johnstul */ + spin_lock_irqsave(&rtc_lock, flags); +- if (efi_enabled) +- retval = efi_set_rtc_mmss(nowtime); +- else +- retval = mach_set_rtc_mmss(nowtime); ++ retval = set_wallclock(nowtime); + spin_unlock_irqrestore(&rtc_lock, flags); + + return retval; +@@ -859,10 +857,7 @@ unsigned long get_cmos_time(void) + + spin_lock_irqsave(&rtc_lock, flags); + +- if (efi_enabled) +- retval = efi_get_time(); +- else +- retval = mach_get_cmos_time(); ++ retval = get_wallclock(); + + spin_unlock_irqrestore(&rtc_lock, flags); + +@@ -964,7 +959,7 @@ static void __init hpet_time_init(void) + printk("Using HPET for base-timer\n"); + } + +- time_init_hook(); ++ do_time_init(); + } + #endif + +--- head-2010-01-18.orig/arch/x86/kernel/traps_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/traps_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -29,6 +29,8 @@ + #include + #include + #include ++#include ++#include + + #ifdef CONFIG_EISA + #include +@@ -61,9 +63,6 @@ int panic_on_unrecovered_nmi; + + asmlinkage int system_call(void); + +-struct desc_struct default_ldt[] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, +- { 0, 0 }, { 0, 0 } }; +- + /* Do we ignore FPU interrupts ? */ + char ignore_fpu_irq = 0; + +@@ -100,12 +99,7 @@ asmlinkage void fixup_4gb_segment(void); + #endif + asmlinkage void machine_check(void); + +-static int kstack_depth_to_print = 24; +-#ifdef CONFIG_STACK_UNWIND +-static int call_trace = 1; +-#else +-#define call_trace (-1) +-#endif ++int kstack_depth_to_print = 24; + ATOMIC_NOTIFIER_HEAD(i386die_chain); + + int register_die_notifier(struct notifier_block *nb) +@@ -159,25 +153,7 @@ static inline unsigned long print_contex + return ebp; + } + +-struct ops_and_data { +- struct stacktrace_ops *ops; +- void *data; +-}; +- +-static asmlinkage int +-dump_trace_unwind(struct unwind_frame_info *info, void *data) +-{ +- struct ops_and_data *oad = (struct ops_and_data *)data; +- int n = 0; +- +- while (unwind(info) == 0 && UNW_PC(info)) { +- n++; +- oad->ops->address(oad->data, UNW_PC(info)); +- if (arch_unw_user_mode(info)) +- break; +- } +- return n; +-} ++#define MSG(msg) ops->warning(data, msg) + + void dump_trace(struct task_struct *task, struct pt_regs *regs, + unsigned long *stack, +@@ -188,39 +164,6 @@ void dump_trace(struct task_struct *task + if (!task) + task = current; + +- if (call_trace >= 0) { +- int unw_ret = 0; +- struct unwind_frame_info info; +- struct ops_and_data oad = { .ops = ops, .data = data }; +- +- if (regs) { +- if (unwind_init_frame_info(&info, task, regs) == 0) +- unw_ret = dump_trace_unwind(&info, &oad); +- } else if (task == current) +- unw_ret = unwind_init_running(&info, dump_trace_unwind, &oad); +- else { +- if (unwind_init_blocked(&info, task) == 0) +- unw_ret = dump_trace_unwind(&info, &oad); +- } +- if (unw_ret > 0) { +- if (call_trace == 1 && !arch_unw_user_mode(&info)) { +- ops->warning_symbol(data, "DWARF2 unwinder stuck at %s\n", +- UNW_PC(&info)); +- if (UNW_SP(&info) >= PAGE_OFFSET) { +- ops->warning(data, "Leftover inexact backtrace:\n"); +- stack = (void *)UNW_SP(&info); +- if (!stack) +- return; +- ebp = UNW_FP(&info); +- } else +- ops->warning(data, "Full inexact backtrace again:\n"); +- } else if (call_trace >= 1) +- return; +- else +- ops->warning(data, "Full inexact backtrace again:\n"); +- } else +- ops->warning(data, "Inexact backtrace:\n"); +- } + if (!stack) { + unsigned long dummy; + stack = &dummy; +@@ -253,6 +196,7 @@ void dump_trace(struct task_struct *task + stack = (unsigned long*)context->previous_esp; + if (!stack) + break; ++ touch_nmi_watchdog(); + } + } + EXPORT_SYMBOL(dump_trace); +@@ -385,7 +329,7 @@ void show_registers(struct pt_regs *regs + * time of the fault.. + */ + if (in_kernel) { +- u8 __user *eip; ++ u8 *eip; + int code_bytes = 64; + unsigned char c; + +@@ -394,18 +338,20 @@ void show_registers(struct pt_regs *regs + + printk(KERN_EMERG "Code: "); + +- eip = (u8 __user *)regs->eip - 43; +- if (eip < (u8 __user *)PAGE_OFFSET || __get_user(c, eip)) { ++ eip = (u8 *)regs->eip - 43; ++ if (eip < (u8 *)PAGE_OFFSET || ++ probe_kernel_address(eip, c)) { + /* try starting at EIP */ +- eip = (u8 __user *)regs->eip; ++ eip = (u8 *)regs->eip; + code_bytes = 32; + } + for (i = 0; i < code_bytes; i++, eip++) { +- if (eip < (u8 __user *)PAGE_OFFSET || __get_user(c, eip)) { ++ if (eip < (u8 *)PAGE_OFFSET || ++ probe_kernel_address(eip, c)) { + printk(" Bad EIP value."); + break; + } +- if (eip == (u8 __user *)regs->eip) ++ if (eip == (u8 *)regs->eip) + printk("<%02x> ", c); + else + printk("%02x ", c); +@@ -414,43 +360,22 @@ void show_registers(struct pt_regs *regs + printk("\n"); + } + +-static void handle_BUG(struct pt_regs *regs) ++int is_valid_bugaddr(unsigned long eip) + { +- unsigned long eip = regs->eip; + unsigned short ud2; + + if (eip < PAGE_OFFSET) +- return; +- if (probe_kernel_address((unsigned short __user *)eip, ud2)) +- return; +- if (ud2 != 0x0b0f) +- return; ++ return 0; ++ if (probe_kernel_address((unsigned short *)eip, ud2)) ++ return 0; + +- printk(KERN_EMERG "------------[ cut here ]------------\n"); +- +-#ifdef CONFIG_DEBUG_BUGVERBOSE +- do { +- unsigned short line; +- char *file; +- char c; +- +- if (probe_kernel_address((unsigned short __user *)(eip + 2), +- line)) +- break; +- if (__get_user(file, (char * __user *)(eip + 4)) || +- (unsigned long)file < PAGE_OFFSET || __get_user(c, file)) +- file = ""; +- +- printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line); +- return; +- } while (0); +-#endif +- printk(KERN_EMERG "Kernel BUG at [verbose debug info unavailable]\n"); ++ return ud2 == 0x0b0f; + } + +-/* This is gone through when something in the kernel +- * has done something bad and is about to be terminated. +-*/ ++/* ++ * This is gone through when something in the kernel has done something bad and ++ * is about to be terminated. ++ */ + void die(const char * str, struct pt_regs * regs, long err) + { + static struct { +@@ -458,7 +383,7 @@ void die(const char * str, struct pt_reg + u32 lock_owner; + int lock_owner_depth; + } die = { +- .lock = SPIN_LOCK_UNLOCKED, ++ .lock = __SPIN_LOCK_UNLOCKED(die.lock), + .lock_owner = -1, + .lock_owner_depth = 0 + }; +@@ -482,7 +407,8 @@ void die(const char * str, struct pt_reg + unsigned long esp; + unsigned short ss; + +- handle_BUG(regs); ++ report_bug(regs->eip); ++ + printk(KERN_EMERG "%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); + #ifdef CONFIG_PREEMPT + printk(KERN_EMERG "PREEMPT "); +@@ -682,8 +608,7 @@ mem_parity_error(unsigned char reason, s + { + printk(KERN_EMERG "Uhhuh. NMI received for unknown reason %02x on " + "CPU %d.\n", reason, smp_processor_id()); +- printk(KERN_EMERG "You probably have a hardware problem with your RAM " +- "chips\n"); ++ printk(KERN_EMERG "You have some hardware problem, likely on the PCI bus.\n"); + if (panic_on_unrecovered_nmi) + panic("NMI: Not continuing"); + +@@ -741,7 +666,6 @@ void __kprobes die_nmi(struct pt_regs *r + printk(" on CPU%d, eip %08lx, registers:\n", + smp_processor_id(), regs->eip); + show_registers(regs); +- printk(KERN_EMERG "console shuts up ...\n"); + console_silent(); + spin_unlock(&nmi_print_lock); + bust_spinlocks(0); +@@ -1057,49 +981,24 @@ fastcall void do_spurious_interrupt_bug( + #endif + } + +-fastcall void setup_x86_bogus_stack(unsigned char * stk) ++fastcall unsigned long patch_espfix_desc(unsigned long uesp, ++ unsigned long kesp) + { +- unsigned long *switch16_ptr, *switch32_ptr; +- struct pt_regs *regs; +- unsigned long stack_top, stack_bot; +- unsigned short iret_frame16_off; +- int cpu = smp_processor_id(); +- /* reserve the space on 32bit stack for the magic switch16 pointer */ +- memmove(stk, stk + 8, sizeof(struct pt_regs)); +- switch16_ptr = (unsigned long *)(stk + sizeof(struct pt_regs)); +- regs = (struct pt_regs *)stk; +- /* now the switch32 on 16bit stack */ +- stack_bot = (unsigned long)&per_cpu(cpu_16bit_stack, cpu); +- stack_top = stack_bot + CPU_16BIT_STACK_SIZE; +- switch32_ptr = (unsigned long *)(stack_top - 8); +- iret_frame16_off = CPU_16BIT_STACK_SIZE - 8 - 20; +- /* copy iret frame on 16bit stack */ +- memcpy((void *)(stack_bot + iret_frame16_off), ®s->eip, 20); +- /* fill in the switch pointers */ +- switch16_ptr[0] = (regs->esp & 0xffff0000) | iret_frame16_off; +- switch16_ptr[1] = __ESPFIX_SS; +- switch32_ptr[0] = (unsigned long)stk + sizeof(struct pt_regs) + +- 8 - CPU_16BIT_STACK_SIZE; +- switch32_ptr[1] = __KERNEL_DS; +-} +- +-fastcall unsigned char * fixup_x86_bogus_stack(unsigned short sp) +-{ +- unsigned long *switch32_ptr; +- unsigned char *stack16, *stack32; +- unsigned long stack_top, stack_bot; +- int len; + int cpu = smp_processor_id(); +- stack_bot = (unsigned long)&per_cpu(cpu_16bit_stack, cpu); +- stack_top = stack_bot + CPU_16BIT_STACK_SIZE; +- switch32_ptr = (unsigned long *)(stack_top - 8); +- /* copy the data from 16bit stack to 32bit stack */ +- len = CPU_16BIT_STACK_SIZE - 8 - sp; +- stack16 = (unsigned char *)(stack_bot + sp); +- stack32 = (unsigned char *) +- (switch32_ptr[0] + CPU_16BIT_STACK_SIZE - 8 - len); +- memcpy(stack32, stack16, len); +- return stack32; ++ struct Xgt_desc_struct *cpu_gdt_descr = &per_cpu(cpu_gdt_descr, cpu); ++ struct desc_struct *gdt = (struct desc_struct *)cpu_gdt_descr->address; ++ unsigned long base = (kesp - uesp) & -THREAD_SIZE; ++ unsigned long new_kesp = kesp - base; ++ unsigned long lim_pages = (new_kesp | (THREAD_SIZE - 1)) >> PAGE_SHIFT; ++ __u64 desc = *(__u64 *)&gdt[GDT_ENTRY_ESPFIX_SS]; ++ /* Set up base for espfix segment */ ++ desc &= 0x00f0ff0000000000ULL; ++ desc |= ((((__u64)base) << 16) & 0x000000ffffff0000ULL) | ++ ((((__u64)base) << 32) & 0xff00000000000000ULL) | ++ ((((__u64)lim_pages) << 32) & 0x000f000000000000ULL) | ++ (lim_pages & 0xffff); ++ *(__u64 *)&gdt[GDT_ENTRY_ESPFIX_SS] = desc; ++ return new_kesp; + } + #endif + +@@ -1113,7 +1012,7 @@ fastcall unsigned char * fixup_x86_bogus + * Must be called with kernel preemption disabled (in this case, + * local interrupts are disabled at the call-site in entry.S). + */ +-asmlinkage void math_state_restore(struct pt_regs regs) ++asmlinkage void math_state_restore(void) + { + struct thread_info *thread = current_thread_info(); + struct task_struct *tsk = thread->task; +@@ -1123,6 +1022,7 @@ asmlinkage void math_state_restore(struc + init_fpu(tsk); + restore_fpu(tsk); + thread->status |= TS_USEDFPU; /* So we fnsave on switch_to() */ ++ tsk->fpu_counter++; + } + + #ifndef CONFIG_MATH_EMULATION +@@ -1234,19 +1134,3 @@ static int __init kstack_setup(char *s) + return 1; + } + __setup("kstack=", kstack_setup); +- +-#ifdef CONFIG_STACK_UNWIND +-static int __init call_trace_setup(char *s) +-{ +- if (strcmp(s, "old") == 0) +- call_trace = -1; +- else if (strcmp(s, "both") == 0) +- call_trace = 0; +- else if (strcmp(s, "newfallback") == 0) +- call_trace = 1; +- else if (strcmp(s, "new") == 2) +- call_trace = 2; +- return 1; +-} +-__setup("call_trace=", call_trace_setup); +-#endif +--- head-2010-01-18.orig/arch/x86/kernel/vmlinux.lds.S 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/vmlinux.lds.S 2009-12-04 10:51:06.000000000 +0100 +@@ -84,6 +84,10 @@ SECTIONS + { + #ifdef CONFIG_X86_32 + . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; ++#if defined(CONFIG_XEN) && CONFIG_XEN_COMPAT <= 0x030002 ++#undef LOAD_OFFSET ++#define LOAD_OFFSET 0 ++#endif + phys_startup_32 = startup_32 - LOAD_OFFSET; + #else + . = __START_KERNEL; +--- head-2010-01-18.orig/arch/x86/kvm/Kconfig 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/kvm/Kconfig 2009-11-06 10:46:27.000000000 +0100 +@@ -7,6 +7,7 @@ source "virt/kvm/Kconfig" + menuconfig VIRTUALIZATION + bool "Virtualization" + depends on HAVE_KVM || X86 ++ depends on !XEN + default y + ---help--- + Say Y here to get to see options for using your Linux host to run other +--- head-2010-01-18.orig/arch/x86/mm/fault_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/fault_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -22,9 +22,9 @@ + #include + #include + #include ++#include + + #include +-#include + #include + #include + #include +@@ -167,7 +167,7 @@ static inline unsigned long get_segment_ + static int __is_prefetch(struct pt_regs *regs, unsigned long addr) + { + unsigned long limit; +- unsigned long instr = get_segment_eip (regs, &limit); ++ unsigned char *instr = (unsigned char *)get_segment_eip (regs, &limit); + int scan_more = 1; + int prefetch = 0; + int i; +@@ -177,9 +177,9 @@ static int __is_prefetch(struct pt_regs + unsigned char instr_hi; + unsigned char instr_lo; + +- if (instr > limit) ++ if (instr > (unsigned char *)limit) + break; +- if (__get_user(opcode, (unsigned char __user *) instr)) ++ if (probe_kernel_address(instr, opcode)) + break; + + instr_hi = opcode & 0xf0; +@@ -204,9 +204,9 @@ static int __is_prefetch(struct pt_regs + case 0x00: + /* Prefetch instruction is 0x0F0D or 0x0F18 */ + scan_more = 0; +- if (instr > limit) ++ if (instr > (unsigned char *)limit) + break; +- if (__get_user(opcode, (unsigned char __user *) instr)) ++ if (probe_kernel_address(instr, opcode)) + break; + prefetch = (instr_lo == 0xF) && + (opcode == 0x0D || opcode == 0x18); +--- head-2010-01-18.orig/arch/x86/mm/highmem_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/highmem_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -32,7 +32,7 @@ static void *__kmap_atomic(struct page * + unsigned long vaddr; + + /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ +- inc_preempt_count(); ++ pagefault_disable(); + if (!PageHighMem(page)) + return page_address(page); + +@@ -63,26 +63,22 @@ void kunmap_atomic(void *kvaddr, enum km + unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; + enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); + +-#ifdef CONFIG_DEBUG_HIGHMEM +- if (vaddr >= PAGE_OFFSET && vaddr < (unsigned long)high_memory) { +- dec_preempt_count(); +- preempt_check_resched(); +- return; +- } +- +- if (vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx)) +- BUG(); +-#endif + /* + * Force other mappings to Oops if they'll try to access this pte + * without first remap it. Keeping stale mappings around is a bad idea + * also, in case the page changes cacheability attributes or becomes + * a protected page in a hypervisor. + */ +- kpte_clear_flush(kmap_pte-idx, vaddr); ++ if (vaddr == __fix_to_virt(FIX_KMAP_BEGIN+idx)) ++ kpte_clear_flush(kmap_pte-idx, vaddr); ++ else { ++#ifdef CONFIG_DEBUG_HIGHMEM ++ BUG_ON(vaddr < PAGE_OFFSET); ++ BUG_ON(vaddr >= (unsigned long)high_memory); ++#endif ++ } + +- dec_preempt_count(); +- preempt_check_resched(); ++ pagefault_enable(); + } + + /* This is the same as kmap_atomic() but can map memory that doesn't +@@ -93,7 +89,7 @@ void *kmap_atomic_pfn(unsigned long pfn, + enum fixed_addresses idx; + unsigned long vaddr; + +- inc_preempt_count(); ++ pagefault_disable(); + + idx = type + KM_TYPE_NR*smp_processor_id(); + vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); +--- head-2010-01-18.orig/arch/x86/mm/init_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/init_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -233,8 +233,6 @@ static inline int page_kills_ppro(unsign + + #endif + +-extern int is_available_memory(efi_memory_desc_t *); +- + int page_is_ram(unsigned long pagenr) + { + int i; +@@ -326,7 +324,7 @@ void __init add_one_highpage_init(struct + SetPageReserved(page); + } + +-static int add_one_highpage_hotplug(struct page *page, unsigned long pfn) ++static int __meminit add_one_highpage_hotplug(struct page *page, unsigned long pfn) + { + free_new_highpage(page, pfn); + totalram_pages++; +@@ -343,7 +341,7 @@ static int add_one_highpage_hotplug(stru + * has been added dynamically that would be + * onlined here is in HIGHMEM + */ +-void online_page(struct page *page) ++void __meminit online_page(struct page *page) + { + ClearPageReserved(page); + add_one_highpage_hotplug(page, page_to_pfn(page)); +@@ -738,16 +736,10 @@ void __init mem_init(void) + set_bit(PG_pinned, &virt_to_page(init_mm.pgd)->flags); + } + +-/* +- * this is for the non-NUMA, single node SMP system case. +- * Specifically, in the case of x86, we will always add +- * memory to the highmem for now. +- */ + #ifdef CONFIG_MEMORY_HOTPLUG +-#ifndef CONFIG_NEED_MULTIPLE_NODES + int arch_add_memory(int nid, u64 start, u64 size) + { +- struct pglist_data *pgdata = &contig_page_data; ++ struct pglist_data *pgdata = NODE_DATA(nid); + struct zone *zone = pgdata->node_zones + ZONE_HIGHMEM; + unsigned long start_pfn = start >> PAGE_SHIFT; + unsigned long nr_pages = size >> PAGE_SHIFT; +@@ -759,11 +751,11 @@ int remove_memory(u64 start, u64 size) + { + return -EINVAL; + } +-#endif ++EXPORT_SYMBOL_GPL(remove_memory); + #endif + +-kmem_cache_t *pgd_cache; +-kmem_cache_t *pmd_cache; ++struct kmem_cache *pgd_cache; ++struct kmem_cache *pmd_cache; + + void __init pgtable_cache_init(void) + { +--- head-2010-01-18.orig/arch/x86/mm/pgtable_32-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/pgtable_32-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -203,7 +203,7 @@ void pte_free(struct page *pte) + __free_page(pte); + } + +-void pmd_ctor(void *pmd, kmem_cache_t *cache, unsigned long flags) ++void pmd_ctor(void *pmd, struct kmem_cache *cache, unsigned long flags) + { + memset(pmd, 0, PTRS_PER_PMD*sizeof(pmd_t)); + } +@@ -243,7 +243,7 @@ static inline void pgd_list_del(pgd_t *p + set_page_private(next, (unsigned long)pprev); + } + +-void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused) ++void pgd_ctor(void *pgd, struct kmem_cache *cache, unsigned long unused) + { + unsigned long flags; + +@@ -264,7 +264,7 @@ void pgd_ctor(void *pgd, kmem_cache_t *c + } + + /* never called when PTRS_PER_PMD > 1 */ +-void pgd_dtor(void *pgd, kmem_cache_t *cache, unsigned long unused) ++void pgd_dtor(void *pgd, struct kmem_cache *cache, unsigned long unused) + { + unsigned long flags; /* can be called from interrupt context */ + +--- head-2010-01-18.orig/arch/x86/pci/irq-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/pci/irq-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -768,7 +768,7 @@ static void __init pirq_find_router(stru + DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n", + rt->rtr_vendor, rt->rtr_device); + +- pirq_router_dev = pci_find_slot(rt->rtr_bus, rt->rtr_devfn); ++ pirq_router_dev = pci_get_bus_and_slot(rt->rtr_bus, rt->rtr_devfn); + if (!pirq_router_dev) { + DBG(KERN_DEBUG "PCI: Interrupt router not found at " + "%02x:%02x\n", rt->rtr_bus, rt->rtr_devfn); +@@ -788,6 +788,8 @@ static void __init pirq_find_router(stru + pirq_router_dev->vendor, + pirq_router_dev->device, + pci_name(pirq_router_dev)); ++ ++ /* The device remains referenced for the kernel lifetime */ + } + + static struct irq_info *pirq_get_info(struct pci_dev *dev) +--- head-2010-01-18.orig/arch/x86/kernel/entry_64-xen.S 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/entry_64-xen.S 2009-11-06 10:46:27.000000000 +0100 +@@ -261,7 +261,6 @@ ENTRY(system_call) + movq %rax,ORIG_RAX-ARGOFFSET(%rsp) + GET_THREAD_INFO(%rcx) + testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx) +- CFI_REMEMBER_STATE + jnz tracesys + cmpq $__NR_syscall_max,%rax + ja badsys +@@ -272,7 +271,6 @@ ENTRY(system_call) + * Syscall return path ending with SYSRET (fast path) + * Has incomplete stack frame and undefined top of stack. + */ +- .globl ret_from_sys_call + ret_from_sys_call: + movl $_TIF_ALLWORK_MASK,%edi + /* edi: flagmask */ +@@ -282,8 +280,8 @@ sysret_check: + TRACE_IRQS_OFF + movl threadinfo_flags(%rcx),%edx + andl %edi,%edx +- CFI_REMEMBER_STATE + jnz sysret_careful ++ CFI_REMEMBER_STATE + /* + * sysretq will re-enable interrupts: + */ +@@ -292,10 +290,10 @@ sysret_check: + RESTORE_ARGS 0,8,0 + HYPERVISOR_IRET VGCF_IN_SYSCALL + ++ CFI_RESTORE_STATE + /* Handle reschedules */ + /* edx: work, edi: workmask */ + sysret_careful: +- CFI_RESTORE_STATE + bt $TIF_NEED_RESCHED,%edx + jnc sysret_signal + TRACE_IRQS_ON +@@ -334,7 +332,6 @@ badsys: + + /* Do syscall tracing */ + tracesys: +- CFI_RESTORE_STATE + SAVE_REST + movq $-ENOSYS,RAX(%rsp) + FIXUP_TOP_OF_STACK %rdi +@@ -350,32 +347,13 @@ tracesys: + call *sys_call_table(,%rax,8) + 1: movq %rax,RAX-ARGOFFSET(%rsp) + /* Use IRET because user could have changed frame */ +- jmp int_ret_from_sys_call +- CFI_ENDPROC +-END(system_call) + + /* + * Syscall return path ending with IRET. + * Has correct top of stack, but partial stack frame. +- */ +-ENTRY(int_ret_from_sys_call) +- CFI_STARTPROC simple +- CFI_SIGNAL_FRAME +- CFI_DEF_CFA rsp,SS+8-ARGOFFSET +- /*CFI_REL_OFFSET ss,SS-ARGOFFSET*/ +- CFI_REL_OFFSET rsp,RSP-ARGOFFSET +- /*CFI_REL_OFFSET rflags,EFLAGS-ARGOFFSET*/ +- /*CFI_REL_OFFSET cs,CS-ARGOFFSET*/ +- CFI_REL_OFFSET rip,RIP-ARGOFFSET +- CFI_REL_OFFSET rdx,RDX-ARGOFFSET +- CFI_REL_OFFSET rcx,RCX-ARGOFFSET +- CFI_REL_OFFSET rax,RAX-ARGOFFSET +- CFI_REL_OFFSET rdi,RDI-ARGOFFSET +- CFI_REL_OFFSET rsi,RSI-ARGOFFSET +- CFI_REL_OFFSET r8,R8-ARGOFFSET +- CFI_REL_OFFSET r9,R9-ARGOFFSET +- CFI_REL_OFFSET r10,R10-ARGOFFSET +- CFI_REL_OFFSET r11,R11-ARGOFFSET ++ */ ++ .globl int_ret_from_sys_call ++int_ret_from_sys_call: + XEN_BLOCK_EVENTS(%rsi) + TRACE_IRQS_OFF + testb $3,CS-ARGOFFSET(%rsp) +@@ -428,8 +406,6 @@ int_very_careful: + popq %rdi + CFI_ADJUST_CFA_OFFSET -8 + andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi +- XEN_BLOCK_EVENTS(%rsi) +- TRACE_IRQS_OFF + jmp int_restore_rest + + int_signal: +@@ -445,7 +421,7 @@ int_restore_rest: + TRACE_IRQS_OFF + jmp int_with_check + CFI_ENDPROC +-END(int_ret_from_sys_call) ++END(system_call) + + /* + * Certain special system calls that need to save a complete full stack frame. +@@ -1270,36 +1246,3 @@ ENTRY(call_softirq) + ret + CFI_ENDPROC + ENDPROC(call_softirq) +- +-#ifdef CONFIG_STACK_UNWIND +-ENTRY(arch_unwind_init_running) +- CFI_STARTPROC +- movq %r15, R15(%rdi) +- movq %r14, R14(%rdi) +- xchgq %rsi, %rdx +- movq %r13, R13(%rdi) +- movq %r12, R12(%rdi) +- xorl %eax, %eax +- movq %rbp, RBP(%rdi) +- movq %rbx, RBX(%rdi) +- movq (%rsp), %rcx +- movq %rax, R11(%rdi) +- movq %rax, R10(%rdi) +- movq %rax, R9(%rdi) +- movq %rax, R8(%rdi) +- movq %rax, RAX(%rdi) +- movq %rax, RCX(%rdi) +- movq %rax, RDX(%rdi) +- movq %rax, RSI(%rdi) +- movq %rax, RDI(%rdi) +- movq %rax, ORIG_RAX(%rdi) +- movq %rcx, RIP(%rdi) +- leaq 8(%rsp), %rcx +- movq $__KERNEL_CS, CS(%rdi) +- movq %rax, EFLAGS(%rdi) +- movq %rcx, RSP(%rdi) +- movq $__KERNEL_DS, SS(%rdi) +- jmpq *%rdx +- CFI_ENDPROC +-ENDPROC(arch_unwind_init_running) +-#endif +--- head-2010-01-18.orig/arch/x86/kernel/head64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/head64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -104,7 +104,10 @@ void __init x86_64_start_kernel(char * r + machine_to_phys_order++; + + #if 0 +- for (i = 0; i < 256; i++) ++ /* clear bss before set_intr_gate with early_idt_handler */ ++ clear_bss(); ++ ++ for (i = 0; i < IDT_ENTRIES; i++) + set_intr_gate(i, early_idt_handler); + asm volatile("lidt %0" :: "m" (idt_descr)); + #endif +--- head-2010-01-18.orig/arch/x86/kernel/io_apic_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/io_apic_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -202,14 +202,20 @@ static struct IO_APIC_route_entry ioapic + * the interrupt, and we need to make sure the entry is fully populated + * before that happens. + */ +-static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) ++static void ++__ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) + { +- unsigned long flags; + union entry_union eu; + eu.entry = e; +- spin_lock_irqsave(&ioapic_lock, flags); + io_apic_write(apic, 0x11 + 2*pin, eu.w2); + io_apic_write(apic, 0x10 + 2*pin, eu.w1); ++} ++ ++static void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) ++{ ++ unsigned long flags; ++ spin_lock_irqsave(&ioapic_lock, flags); ++ __ioapic_write_entry(apic, pin, e); + spin_unlock_irqrestore(&ioapic_lock, flags); + } + +@@ -720,6 +726,22 @@ static int assign_irq_vector(int irq, cp + } + + #ifndef CONFIG_XEN ++static void __clear_irq_vector(int irq) ++{ ++ cpumask_t mask; ++ int cpu, vector; ++ ++ BUG_ON(!irq_vector[irq]); ++ ++ vector = irq_vector[irq]; ++ cpus_and(mask, irq_domain[irq], cpu_online_map); ++ for_each_cpu_mask(cpu, mask) ++ per_cpu(vector_irq, cpu)[vector] = -1; ++ ++ irq_vector[irq] = 0; ++ irq_domain[irq] = CPU_MASK_NONE; ++} ++ + void __setup_vector_irq(int cpu) + { + /* Initialize vector_irq on a new cpu */ +@@ -767,26 +789,65 @@ static void ioapic_register_intr(int irq + #define ioapic_register_intr(irq, vector, trigger) evtchn_register_pirq(irq) + #endif /* !CONFIG_XEN */ + +-static void __init setup_IO_APIC_irqs(void) ++static void __init setup_IO_APIC_irq(int apic, int pin, int idx, int irq) + { + struct IO_APIC_route_entry entry; +- int apic, pin, idx, irq, first_notcon = 1, vector; ++ int vector; + unsigned long flags; + +- apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n"); + +- for (apic = 0; apic < nr_ioapics; apic++) { +- for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { ++ /* ++ * add it to the IO-APIC irq-routing table: ++ */ ++ memset(&entry,0,sizeof(entry)); + +- /* +- * add it to the IO-APIC irq-routing table: +- */ +- memset(&entry,0,sizeof(entry)); ++ entry.delivery_mode = INT_DELIVERY_MODE; ++ entry.dest_mode = INT_DEST_MODE; ++ entry.mask = 0; /* enable IRQ */ ++ entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); + +- entry.delivery_mode = INT_DELIVERY_MODE; +- entry.dest_mode = INT_DEST_MODE; +- entry.mask = 0; /* enable IRQ */ ++ entry.trigger = irq_trigger(idx); ++ entry.polarity = irq_polarity(idx); ++ ++ if (irq_trigger(idx)) { ++ entry.trigger = 1; ++ entry.mask = 1; + entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); ++ } ++ ++ if (/* !apic && */ !IO_APIC_IRQ(irq)) ++ return; ++ ++ if (IO_APIC_IRQ(irq)) { ++ cpumask_t mask; ++ vector = assign_irq_vector(irq, TARGET_CPUS, &mask); ++ if (vector < 0) ++ return; ++ ++ entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask); ++ entry.vector = vector; ++ ++ ioapic_register_intr(irq, vector, IOAPIC_AUTO); ++ if (!apic && (irq < 16)) ++ disable_8259A_irq(irq); ++ } ++ ++ ioapic_write_entry(apic, pin, entry); ++ ++ spin_lock_irqsave(&ioapic_lock, flags); ++ set_native_irq_info(irq, TARGET_CPUS); ++ spin_unlock_irqrestore(&ioapic_lock, flags); ++ ++} ++ ++static void __init setup_IO_APIC_irqs(void) ++{ ++ int apic, pin, idx, irq, first_notcon = 1; ++ ++ apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n"); ++ ++ for (apic = 0; apic < nr_ioapics; apic++) { ++ for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { + + idx = find_irq_entry(apic,pin,mp_INT); + if (idx == -1) { +@@ -798,39 +859,11 @@ static void __init setup_IO_APIC_irqs(vo + continue; + } + +- entry.trigger = irq_trigger(idx); +- entry.polarity = irq_polarity(idx); +- +- if (irq_trigger(idx)) { +- entry.trigger = 1; +- entry.mask = 1; +- entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); +- } +- + irq = pin_2_irq(idx, apic, pin); + add_pin_to_irq(irq, apic, pin); + +- if (/* !apic && */ !IO_APIC_IRQ(irq)) +- continue; +- +- if (IO_APIC_IRQ(irq)) { +- cpumask_t mask; +- vector = assign_irq_vector(irq, TARGET_CPUS, &mask); +- if (vector < 0) +- continue; +- +- entry.dest.logical.logical_dest = cpu_mask_to_apicid(mask); +- entry.vector = vector; ++ setup_IO_APIC_irq(apic, pin, idx, irq); + +- ioapic_register_intr(irq, vector, IOAPIC_AUTO); +- if (!apic && (irq < 16)) +- disable_8259A_irq(irq); +- } +- ioapic_write_entry(apic, pin, entry); +- +- spin_lock_irqsave(&ioapic_lock, flags); +- set_native_irq_info(irq, TARGET_CPUS); +- spin_unlock_irqrestore(&ioapic_lock, flags); + } + } + +@@ -1826,7 +1859,7 @@ void destroy_irq(unsigned int irq) + dynamic_irq_cleanup(irq); + + spin_lock_irqsave(&vector_lock, flags); +- irq_vector[irq] = 0; ++ __clear_irq_vector(irq); + spin_unlock_irqrestore(&vector_lock, flags); + } + +@@ -2131,7 +2164,15 @@ void __init setup_ioapic_dest(void) + if (irq_entry == -1) + continue; + irq = pin_2_irq(irq_entry, ioapic, pin); +- set_ioapic_affinity_irq(irq, TARGET_CPUS); ++ ++ /* setup_IO_APIC_irqs could fail to get vector for some device ++ * when you have too many devices, because at that time only boot ++ * cpu is online. ++ */ ++ if(!irq_vector[irq]) ++ setup_IO_APIC_irq(ioapic, pin, irq_entry, irq); ++ else ++ set_ioapic_affinity_irq(irq, TARGET_CPUS); + } + + } +--- head-2010-01-18.orig/arch/x86/kernel/irq_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/irq_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -120,7 +120,7 @@ asmlinkage unsigned int do_IRQ(struct pt + + if (likely(irq < NR_IRQS)) + generic_handle_irq(irq); +- else ++ else if (printk_ratelimit()) + printk(KERN_EMERG "%s: %d.%d No irq handler for irq\n", + __func__, smp_processor_id(), irq); + +--- head-2010-01-18.orig/arch/x86/kernel/mpparse_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/mpparse_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -35,8 +35,6 @@ + int smp_found_config; + unsigned int __initdata maxcpus = NR_CPUS; + +-int acpi_found_madt; +- + /* + * Various Linux-internal data structures created from the + * MP-table. +--- head-2010-01-18.orig/arch/x86/kernel/process_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/process_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -119,29 +119,23 @@ void exit_idle(void) + static void poll_idle (void) + { + local_irq_enable(); +- +- asm volatile( +- "2:" +- "testl %0,%1;" +- "rep; nop;" +- "je 2b;" +- : : +- "i" (_TIF_NEED_RESCHED), +- "m" (current_thread_info()->flags)); ++ cpu_relax(); + } + + static void xen_idle(void) + { ++ current_thread_info()->status &= ~TS_POLLING; ++ /* ++ * TS_POLLING-cleared state must be visible before we ++ * test NEED_RESCHED: ++ */ ++ smp_mb(); + local_irq_disable(); +- +- if (need_resched()) +- local_irq_enable(); +- else { +- current_thread_info()->status &= ~TS_POLLING; +- smp_mb__after_clear_bit(); ++ if (!need_resched()) + safe_halt(); +- current_thread_info()->status |= TS_POLLING; +- } ++ else ++ local_irq_enable(); ++ current_thread_info()->status |= TS_POLLING; + } + + #ifdef CONFIG_HOTPLUG_CPU +@@ -181,6 +175,12 @@ void cpu_idle (void) + idle = xen_idle; /* no alternatives */ + if (cpu_is_offline(smp_processor_id())) + play_dead(); ++ /* ++ * Idle routines should keep interrupts disabled ++ * from here on, until they go to idle. ++ * Otherwise, idle callbacks can misfire. ++ */ ++ local_irq_disable(); + enter_idle(); + idle(); + /* In many cases the interrupt that ended idle +--- head-2010-01-18.orig/arch/x86/kernel/setup_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/setup_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -574,8 +574,7 @@ void __init setup_arch(char **cmdline_p) + if (LOADER_TYPE && INITRD_START) { + if (INITRD_START + INITRD_SIZE <= (end_pfn << PAGE_SHIFT)) { + reserve_bootmem_generic(INITRD_START, INITRD_SIZE); +- initrd_start = +- INITRD_START ? INITRD_START + PAGE_OFFSET : 0; ++ initrd_start = INITRD_START + PAGE_OFFSET; + initrd_end = initrd_start+INITRD_SIZE; + } + else { +@@ -991,11 +990,8 @@ static void __cpuinit init_amd(struct cp + /* Fix cpuid4 emulation for more */ + num_cache_leaves = 3; + +- /* When there is only one core no need to synchronize RDTSC */ +- if (num_possible_cpus() == 1) +- set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); +- else +- clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); ++ /* RDTSC can be speculated around */ ++ clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); + } + + static void __cpuinit detect_ht(struct cpuinfo_x86 *c) +@@ -1094,6 +1090,15 @@ static void __cpuinit init_intel(struct + set_bit(X86_FEATURE_ARCH_PERFMON, &c->x86_capability); + } + ++ if (cpu_has_ds) { ++ unsigned int l1, l2; ++ rdmsr(MSR_IA32_MISC_ENABLE, l1, l2); ++ if (!(l1 & (1<<11))) ++ set_bit(X86_FEATURE_BTS, c->x86_capability); ++ if (!(l1 & (1<<12))) ++ set_bit(X86_FEATURE_PEBS, c->x86_capability); ++ } ++ + n = c->extended_cpuid_level; + if (n >= 0x80000008) { + unsigned eax = cpuid_eax(0x80000008); +@@ -1113,7 +1118,10 @@ static void __cpuinit init_intel(struct + set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability); + if (c->x86 == 6) + set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability); +- set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); ++ if (c->x86 == 15) ++ set_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); ++ else ++ clear_bit(X86_FEATURE_SYNC_RDTSC, &c->x86_capability); + c->x86_max_cores = intel_num_cpu_cores(c); + + srat_detect_node(); +--- head-2010-01-18.orig/arch/x86/kernel/smp_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/smp_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -384,12 +384,17 @@ int smp_call_function_single (int cpu, v + put_cpu(); + return 0; + } ++ ++ /* Can deadlock when called with interrupts disabled */ ++ WARN_ON(irqs_disabled()); ++ + spin_lock_bh(&call_lock); + __smp_call_function_single(cpu, func, info, nonatomic, wait); + spin_unlock_bh(&call_lock); + put_cpu(); + return 0; + } ++EXPORT_SYMBOL(smp_call_function_single); + + /* + * this function sends a 'generic call function' IPI to all other CPUs +--- head-2010-01-18.orig/arch/x86/kernel/traps_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/traps_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -30,9 +30,10 @@ + #include + #include + #include ++#include ++#include + + #include +-#include + #include + #include + #include +@@ -108,12 +109,7 @@ static inline void preempt_conditional_c + preempt_enable_no_resched(); + } + +-static int kstack_depth_to_print = 12; +-#ifdef CONFIG_STACK_UNWIND +-static int call_trace = 1; +-#else +-#define call_trace (-1) +-#endif ++int kstack_depth_to_print = 12; + + #ifdef CONFIG_KALLSYMS + void printk_address(unsigned long address) +@@ -218,24 +214,7 @@ static unsigned long *in_exception_stack + return NULL; + } + +-struct ops_and_data { +- struct stacktrace_ops *ops; +- void *data; +-}; +- +-static int dump_trace_unwind(struct unwind_frame_info *info, void *context) +-{ +- struct ops_and_data *oad = (struct ops_and_data *)context; +- int n = 0; +- +- while (unwind(info) == 0 && UNW_PC(info)) { +- n++; +- oad->ops->address(oad->data, UNW_PC(info)); +- if (arch_unw_user_mode(info)) +- break; +- } +- return n; +-} ++#define MSG(txt) ops->warning(data, txt) + + /* + * x86-64 can have upto three kernel stacks: +@@ -250,61 +229,24 @@ static inline int valid_stack_ptr(struct + return p > t && p < t + THREAD_SIZE - 3; + } + +-void dump_trace(struct task_struct *tsk, struct pt_regs *regs, unsigned long * stack, ++void dump_trace(struct task_struct *tsk, struct pt_regs *regs, ++ unsigned long *stack, + struct stacktrace_ops *ops, void *data) + { +- const unsigned cpu = smp_processor_id(); +- unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; ++ const unsigned cpu = get_cpu(); ++ unsigned long *irqstack_end = (unsigned long*)cpu_pda(cpu)->irqstackptr; + unsigned used = 0; + struct thread_info *tinfo; + + if (!tsk) + tsk = current; + +- if (call_trace >= 0) { +- int unw_ret = 0; +- struct unwind_frame_info info; +- struct ops_and_data oad = { .ops = ops, .data = data }; +- +- if (regs) { +- if (unwind_init_frame_info(&info, tsk, regs) == 0) +- unw_ret = dump_trace_unwind(&info, &oad); +- } else if (tsk == current) +- unw_ret = unwind_init_running(&info, dump_trace_unwind, &oad); +- else { +- if (unwind_init_blocked(&info, tsk) == 0) +- unw_ret = dump_trace_unwind(&info, &oad); +- } +- if (unw_ret > 0) { +- if (call_trace == 1 && !arch_unw_user_mode(&info)) { +- ops->warning_symbol(data, "DWARF2 unwinder stuck at %s\n", +- UNW_PC(&info)); +- if ((long)UNW_SP(&info) < 0) { +- ops->warning(data, "Leftover inexact backtrace:\n"); +- stack = (unsigned long *)UNW_SP(&info); +- if (!stack) +- return; +- } else +- ops->warning(data, "Full inexact backtrace again:\n"); +- } else if (call_trace >= 1) +- return; +- else +- ops->warning(data, "Full inexact backtrace again:\n"); +- } else +- ops->warning(data, "Inexact backtrace:\n"); +- } + if (!stack) { + unsigned long dummy; + stack = &dummy; + if (tsk && tsk != current) + stack = (unsigned long *)tsk->thread.rsp; + } +- /* +- * Align the stack pointer on word boundary, later loops +- * rely on that (and corruption / debug info bugs can cause +- * unaligned values here): +- */ +- stack = (unsigned long *)((unsigned long)stack & ~(sizeof(long)-1)); + + /* + * Print function call entries within a stack. 'cond' is the +@@ -314,9 +256,9 @@ void dump_trace(struct task_struct *tsk, + #define HANDLE_STACK(cond) \ + do while (cond) { \ + unsigned long addr = *stack++; \ +- if (oops_in_progress ? \ +- __kernel_text_address(addr) : \ +- kernel_text_address(addr)) { \ ++ /* Use unlocked access here because except for NMIs \ ++ we should be already protected against module unloads */ \ ++ if (__kernel_text_address(addr)) { \ + /* \ + * If the address is either in the text segment of the \ + * kernel, or in the region which contains vmalloc'ed \ +@@ -379,9 +321,10 @@ void dump_trace(struct task_struct *tsk, + /* + * This handles the process stack: + */ +- tinfo = current_thread_info(); ++ tinfo = task_thread_info(tsk); + HANDLE_STACK (valid_stack_ptr(tinfo, stack)); + #undef HANDLE_STACK ++ put_cpu(); + } + EXPORT_SYMBOL(dump_trace); + +@@ -518,30 +461,15 @@ bad: + printk("\n"); + } + +-void handle_BUG(struct pt_regs *regs) +-{ +- struct bug_frame f; +- long len; +- const char *prefix = ""; ++int is_valid_bugaddr(unsigned long rip) ++{ ++ unsigned short ud2; + +- if (user_mode(regs)) +- return; +- if (__copy_from_user(&f, (const void __user *) regs->rip, +- sizeof(struct bug_frame))) +- return; +- if (f.filename >= 0 || +- f.ud2[0] != 0x0f || f.ud2[1] != 0x0b) +- return; +- len = __strnlen_user((char *)(long)f.filename, PATH_MAX) - 1; +- if (len < 0 || len >= PATH_MAX) +- f.filename = (int)(long)"unmapped filename"; +- else if (len > 50) { +- f.filename += len - 50; +- prefix = "..."; +- } +- printk("----------- [cut here ] --------- [please bite here ] ---------\n"); +- printk(KERN_ALERT "Kernel BUG at %s%.50s:%d\n", prefix, (char *)(long)f.filename, f.line); +-} ++ if (__copy_from_user(&ud2, (const void __user *) rip, sizeof(ud2))) ++ return 0; ++ ++ return ud2 == 0x0b0f; ++} + + #ifdef CONFIG_BUG + void out_of_line_bug(void) +@@ -621,7 +549,9 @@ void die(const char * str, struct pt_reg + { + unsigned long flags = oops_begin(); + +- handle_BUG(regs); ++ if (!user_mode(regs)) ++ report_bug(regs->rip); ++ + __die(str, regs, err); + oops_end(flags); + do_exit(SIGSEGV); +@@ -790,8 +720,7 @@ mem_parity_error(unsigned char reason, s + { + printk(KERN_EMERG "Uhhuh. NMI received for unknown reason %02x.\n", + reason); +- printk(KERN_EMERG "You probably have a hardware problem with your " +- "RAM chips\n"); ++ printk(KERN_EMERG "You have some hardware problem, likely on the PCI bus.\n"); + + if (panic_on_unrecovered_nmi) + panic("NMI: Not continuing"); +@@ -1227,21 +1156,3 @@ static int __init kstack_setup(char *s) + return 0; + } + early_param("kstack", kstack_setup); +- +-#ifdef CONFIG_STACK_UNWIND +-static int __init call_trace_setup(char *s) +-{ +- if (!s) +- return -EINVAL; +- if (strcmp(s, "old") == 0) +- call_trace = -1; +- else if (strcmp(s, "both") == 0) +- call_trace = 0; +- else if (strcmp(s, "newfallback") == 0) +- call_trace = 1; +- else if (strcmp(s, "new") == 0) +- call_trace = 2; +- return 0; +-} +-early_param("call_trace", call_trace_setup); +-#endif +--- head-2010-01-18.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/vsyscall_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -42,6 +42,7 @@ + #include + + #define __vsyscall(nr) __attribute__ ((unused,__section__(".vsyscall_" #nr))) ++#define __syscall_clobber "r11","rcx","memory" + + int __sysctl_vsyscall __section_sysctl_vsyscall = 1; + seqlock_t __xtime_lock __section_xtime_lock = SEQLOCK_UNLOCKED; +@@ -224,8 +225,7 @@ out: + + static int vsyscall_sysctl_nostrat(ctl_table *t, int __user *name, int nlen, + void __user *oldval, size_t __user *oldlenp, +- void __user *newval, size_t newlen, +- void **context) ++ void __user *newval, size_t newlen) + { + return -ENOSYS; + } +@@ -277,7 +277,6 @@ static void __cpuinit cpu_vsyscall_init( + vsyscall_set_cpu(raw_smp_processor_id()); + } + +-#ifdef CONFIG_HOTPLUG_CPU + static int __cpuinit + cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg) + { +@@ -286,13 +285,13 @@ cpu_vsyscall_notifier(struct notifier_bl + smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1); + return NOTIFY_DONE; + } +-#endif + + static void __init map_vsyscall(void) + { + extern char __vsyscall_0; + unsigned long physaddr_page0 = __pa_symbol(&__vsyscall_0); + ++ /* Note that VSYSCALL_MAPPED_PAGES must agree with the code below. */ + __set_fixmap(VSYSCALL_FIRST_PAGE, physaddr_page0, PAGE_KERNEL_VSYSCALL); + } + +--- head-2010-01-18.orig/arch/x86/mm/fault_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/fault_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -23,9 +23,9 @@ + #include + #include + #include ++#include + + #include +-#include + #include + #include + #include +@@ -96,7 +96,7 @@ void bust_spinlocks(int yes) + static noinline int is_prefetch(struct pt_regs *regs, unsigned long addr, + unsigned long error_code) + { +- unsigned char __user *instr; ++ unsigned char *instr; + int scan_more = 1; + int prefetch = 0; + unsigned char *max_instr; +@@ -116,7 +116,7 @@ static noinline int is_prefetch(struct p + unsigned char instr_hi; + unsigned char instr_lo; + +- if (__get_user(opcode, (char __user *)instr)) ++ if (probe_kernel_address(instr, opcode)) + break; + + instr_hi = opcode & 0xf0; +@@ -154,7 +154,7 @@ static noinline int is_prefetch(struct p + case 0x00: + /* Prefetch instruction is 0x0F0D or 0x0F18 */ + scan_more = 0; +- if (__get_user(opcode, (char __user *)instr)) ++ if (probe_kernel_address(instr, opcode)) + break; + prefetch = (instr_lo == 0xF) && + (opcode == 0x0D || opcode == 0x18); +@@ -170,7 +170,7 @@ static noinline int is_prefetch(struct p + static int bad_address(void *p) + { + unsigned long dummy; +- return __get_user(dummy, (unsigned long __user *)p); ++ return probe_kernel_address((unsigned long *)p, dummy); + } + + void dump_pagetable(unsigned long address) +--- head-2010-01-18.orig/arch/x86/mm/init_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/init_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -1151,14 +1151,15 @@ static __init int x8664_sysctl_init(void + __initcall(x8664_sysctl_init); + #endif + +-/* A pseudo VMAs to allow ptrace access for the vsyscall page. This only ++/* A pseudo VMA to allow ptrace access for the vsyscall page. This only + covers the 64bit vsyscall page now. 32bit has a real VMA now and does + not need special handling anymore. */ + + static struct vm_area_struct gate_vma = { + .vm_start = VSYSCALL_START, +- .vm_end = VSYSCALL_END, +- .vm_page_prot = PAGE_READONLY ++ .vm_end = VSYSCALL_START + (VSYSCALL_MAPPED_PAGES << PAGE_SHIFT), ++ .vm_page_prot = PAGE_READONLY_EXEC, ++ .vm_flags = VM_READ | VM_EXEC + }; + + struct vm_area_struct *get_gate_vma(struct task_struct *tsk) +--- head-2010-01-18.orig/arch/x86/mm/pageattr_64-xen.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/pageattr_64-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -330,34 +330,40 @@ static struct page *split_large_page(uns + return base; + } + +- +-static void flush_kernel_map(void *address) ++static void cache_flush_page(void *adr) + { +- if (0 && address && cpu_has_clflush) { +- /* is this worth it? */ +- int i; +- for (i = 0; i < PAGE_SIZE; i += boot_cpu_data.x86_clflush_size) +- asm volatile("clflush (%0)" :: "r" (address + i)); +- } else +- asm volatile("wbinvd":::"memory"); +- if (address) +- __flush_tlb_one(address); +- else +- __flush_tlb_all(); ++ int i; ++ for (i = 0; i < PAGE_SIZE; i += boot_cpu_data.x86_clflush_size) ++ asm volatile("clflush (%0)" :: "r" (adr + i)); + } + ++static void flush_kernel_map(void *arg) ++{ ++ struct list_head *l = (struct list_head *)arg; ++ struct page *pg; + +-static inline void flush_map(unsigned long address) ++ /* When clflush is available always use it because it is ++ much cheaper than WBINVD */ ++ if (!cpu_has_clflush) ++ asm volatile("wbinvd" ::: "memory"); ++ list_for_each_entry(pg, l, lru) { ++ void *adr = page_address(pg); ++ if (cpu_has_clflush) ++ cache_flush_page(adr); ++ __flush_tlb_one(adr); ++ } ++} ++ ++static inline void flush_map(struct list_head *l) + { +- on_each_cpu(flush_kernel_map, (void *)address, 1, 1); ++ on_each_cpu(flush_kernel_map, l, 1, 1); + } + +-static struct page *deferred_pages; /* protected by init_mm.mmap_sem */ ++static LIST_HEAD(deferred_pages); /* protected by init_mm.mmap_sem */ + + static inline void save_page(struct page *fpage) + { +- fpage->lru.next = (struct list_head *)deferred_pages; +- deferred_pages = fpage; ++ list_add(&fpage->lru, &deferred_pages); + } + + /* +@@ -487,18 +493,18 @@ int change_page_attr(struct page *page, + + void global_flush_tlb(void) + { +- struct page *dpage; ++ struct page *pg, *next; ++ struct list_head l; + + down_read(&init_mm.mmap_sem); +- dpage = xchg(&deferred_pages, NULL); ++ list_replace_init(&deferred_pages, &l); + up_read(&init_mm.mmap_sem); + +- flush_map((dpage && !dpage->lru.next) ? (unsigned long)page_address(dpage) : 0); +- while (dpage) { +- struct page *tmp = dpage; +- dpage = (struct page *)dpage->lru.next; +- ClearPagePrivate(tmp); +- __free_page(tmp); ++ flush_map(&l); ++ ++ list_for_each_entry_safe(pg, next, &l, lru) { ++ ClearPagePrivate(pg); ++ __free_page(pg); + } + } + +--- head-2010-01-18.orig/drivers/pci/msi-xen.c 2009-12-04 10:49:14.000000000 +0100 ++++ head-2010-01-18/drivers/pci/msi-xen.c 2009-11-06 10:46:27.000000000 +0100 +@@ -273,10 +273,8 @@ void disable_msi_mode(struct pci_dev *de + pci_write_config_word(dev, msi_control_reg(pos), control); + dev->msix_enabled = 0; + } +- if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { +- /* PCI Express Endpoint device detected */ +- pci_intx(dev, 1); /* enable intx */ +- } ++ ++ pci_intx(dev, 1); /* enable intx */ + } + + static void enable_msi_mode(struct pci_dev *dev, int pos, int type) +@@ -294,10 +292,8 @@ static void enable_msi_mode(struct pci_d + pci_write_config_word(dev, msi_control_reg(pos), control); + dev->msix_enabled = 1; + } +- if (pci_find_capability(dev, PCI_CAP_ID_EXP)) { +- /* PCI Express Endpoint device detected */ +- pci_intx(dev, 0); /* disable intx */ +- } ++ ++ pci_intx(dev, 0); /* disable intx */ + } + + #ifdef CONFIG_PM +--- head-2010-01-18.orig/drivers/xen/balloon/balloon.c 2010-01-04 12:19:20.000000000 +0100 ++++ head-2010-01-18/drivers/xen/balloon/balloon.c 2009-11-06 10:46:27.000000000 +0100 +@@ -94,8 +94,8 @@ static unsigned long frame_list[PAGE_SIZ + static LIST_HEAD(ballooned_pages); + + /* Main work function, always executed in process context. */ +-static void balloon_process(void *unused); +-static DECLARE_WORK(balloon_worker, balloon_process, NULL); ++static void balloon_process(struct work_struct *unused); ++static DECLARE_WORK(balloon_worker, balloon_process); + static struct timer_list balloon_timer; + + /* When ballooning out (allocating memory to return to Xen) we don't really +@@ -402,7 +402,7 @@ static int decrease_reservation(unsigned + * by the balloon lock), or with changes to the Xen hard limit, but we will + * recover from these in time. + */ +-static void balloon_process(void *unused) ++static void balloon_process(struct work_struct *unused) + { + int need_sleep = 0; + long credit; +--- head-2010-01-18.orig/drivers/xen/blkback/blkback.c 2010-01-04 12:22:06.000000000 +0100 ++++ head-2010-01-18/drivers/xen/blkback/blkback.c 2009-11-06 10:46:27.000000000 +0100 +@@ -37,6 +37,7 @@ + + #include + #include ++#include + #include + #include + #include +--- head-2010-01-18.orig/drivers/xen/blkback/interface.c 2010-01-04 11:56:34.000000000 +0100 ++++ head-2010-01-18/drivers/xen/blkback/interface.c 2010-01-04 12:24:22.000000000 +0100 +@@ -35,7 +35,7 @@ + #include + #include + +-static kmem_cache_t *blkif_cachep; ++static struct kmem_cache *blkif_cachep; + + blkif_t *blkif_alloc(domid_t domid) + { +--- head-2010-01-18.orig/drivers/xen/blkfront/blkfront.c 2010-01-18 16:17:32.000000000 +0100 ++++ head-2010-01-18/drivers/xen/blkfront/blkfront.c 2010-01-18 16:17:45.000000000 +0100 +@@ -71,7 +71,7 @@ static int setup_blkring(struct xenbus_d + static void kick_pending_request_queues(struct blkfront_info *); + + static irqreturn_t blkif_int(int irq, void *dev_id); +-static void blkif_restart_queue(void *arg); ++static void blkif_restart_queue(struct work_struct *arg); + static void blkif_recover(struct blkfront_info *); + static void blkif_completion(struct blk_shadow *); + static void blkif_free(struct blkfront_info *, int); +@@ -111,7 +111,7 @@ static int blkfront_probe(struct xenbus_ + info->xbdev = dev; + info->vdevice = vdevice; + info->connected = BLKIF_STATE_DISCONNECTED; +- INIT_WORK(&info->work, blkif_restart_queue, (void *)info); ++ INIT_WORK(&info->work, blkif_restart_queue); + + for (i = 0; i < BLK_RING_SIZE; i++) + info->shadow[i].req.id = i+1; +@@ -465,9 +465,9 @@ static void kick_pending_request_queues( + } + } + +-static void blkif_restart_queue(void *arg) ++static void blkif_restart_queue(struct work_struct *arg) + { +- struct blkfront_info *info = (struct blkfront_info *)arg; ++ struct blkfront_info *info = container_of(arg, struct blkfront_info, work); + spin_lock_irq(&blkif_io_lock); + if (info->connected == BLKIF_STATE_CONNECTED) + kick_pending_request_queues(info); +--- head-2010-01-18.orig/drivers/xen/blktap/blktap.c 2010-01-04 12:22:21.000000000 +0100 ++++ head-2010-01-18/drivers/xen/blktap/blktap.c 2009-11-06 10:46:27.000000000 +0100 +@@ -40,6 +40,7 @@ + + #include + #include ++#include + #include + #include + #include "common.h" +--- head-2010-01-18.orig/drivers/xen/blktap/interface.c 2010-01-04 11:56:34.000000000 +0100 ++++ head-2010-01-18/drivers/xen/blktap/interface.c 2010-01-04 12:24:32.000000000 +0100 +@@ -35,7 +35,7 @@ + #include + #include + +-static kmem_cache_t *blkif_cachep; ++static struct kmem_cache *blkif_cachep; + + blkif_t *tap_alloc_blkif(domid_t domid) + { +--- head-2010-01-18.orig/drivers/xen/char/mem.c 2007-08-06 15:10:49.000000000 +0200 ++++ head-2010-01-18/drivers/xen/char/mem.c 2009-11-06 10:46:27.000000000 +0100 +@@ -157,7 +157,7 @@ static loff_t memory_lseek(struct file * + { + loff_t ret; + +- mutex_lock(&file->f_dentry->d_inode->i_mutex); ++ mutex_lock(&file->f_path.dentry->d_inode->i_mutex); + switch (orig) { + case 0: + file->f_pos = offset; +@@ -172,7 +172,7 @@ static loff_t memory_lseek(struct file * + default: + ret = -EINVAL; + } +- mutex_unlock(&file->f_dentry->d_inode->i_mutex); ++ mutex_unlock(&file->f_path.dentry->d_inode->i_mutex); + return ret; + } + +--- head-2010-01-18.orig/drivers/xen/console/console.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/console/console.c 2009-11-06 10:46:27.000000000 +0100 +@@ -85,11 +85,6 @@ static int xc_num = -1; + #define XEN_HVC_MAJOR 229 + #define XEN_HVC_MINOR 0 + +-#ifdef CONFIG_MAGIC_SYSRQ +-static unsigned long sysrq_requested; +-extern int sysrq_enabled; +-#endif +- + static int __init xencons_setup(char *str) + { + char *q; +@@ -354,8 +349,8 @@ void __init dom0_init_screen_info(const + #define DUMMY_TTY(_tty) ((xc_mode == XC_TTY) && \ + ((_tty)->index != (xc_num - 1))) + +-static struct termios *xencons_termios[MAX_NR_CONSOLES]; +-static struct termios *xencons_termios_locked[MAX_NR_CONSOLES]; ++static struct ktermios *xencons_termios[MAX_NR_CONSOLES]; ++static struct ktermios *xencons_termios_locked[MAX_NR_CONSOLES]; + static struct tty_struct *xencons_tty; + static int xencons_priv_irq; + static char x_char; +@@ -371,7 +366,9 @@ void xencons_rx(char *buf, unsigned len) + + for (i = 0; i < len; i++) { + #ifdef CONFIG_MAGIC_SYSRQ +- if (sysrq_enabled) { ++ if (sysrq_on()) { ++ static unsigned long sysrq_requested; ++ + if (buf[i] == '\x0f') { /* ^O */ + if (!sysrq_requested) { + sysrq_requested = jiffies; +--- head-2010-01-18.orig/drivers/xen/core/reboot.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/core/reboot.c 2009-11-06 10:46:27.000000000 +0100 +@@ -34,8 +34,8 @@ static int suspend_cancelled; + /* Can we leave APs online when we suspend? */ + static int fast_suspend; + +-static void __shutdown_handler(void *unused); +-static DECLARE_WORK(shutdown_work, __shutdown_handler, NULL); ++static void __shutdown_handler(struct work_struct *unused); ++static DECLARE_DELAYED_WORK(shutdown_work, __shutdown_handler); + + static int setup_suspend_evtchn(void); + +@@ -105,7 +105,7 @@ static int xen_suspend(void *__unused) + case SHUTDOWN_RESUMING: + break; + default: +- schedule_work(&shutdown_work); ++ schedule_delayed_work(&shutdown_work, 0); + break; + } + +@@ -137,12 +137,12 @@ static void switch_shutdown_state(int ne + + /* Either we kick off the work, or we leave it to xen_suspend(). */ + if (old_state == SHUTDOWN_INVALID) +- schedule_work(&shutdown_work); ++ schedule_delayed_work(&shutdown_work, 0); + else + BUG_ON(old_state != SHUTDOWN_RESUMING); + } + +-static void __shutdown_handler(void *unused) ++static void __shutdown_handler(struct work_struct *unused) + { + int err; + +--- head-2010-01-18.orig/drivers/xen/core/smpboot.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/core/smpboot.c 2009-11-06 10:46:27.000000000 +0100 +@@ -160,7 +160,12 @@ static void xen_smp_intr_exit(unsigned i + + void __cpuinit cpu_bringup(void) + { ++#ifdef __i386__ ++ cpu_set_gdt(current_thread_info()->cpu); ++ secondary_cpu_init(); ++#else + cpu_init(); ++#endif + identify_cpu(cpu_data + smp_processor_id()); + touch_softlockup_watchdog(); + preempt_disable(); +@@ -299,11 +304,12 @@ void __init smp_prepare_cpus(unsigned in + if (cpu == 0) + continue; + ++ idle = fork_idle(cpu); ++ if (IS_ERR(idle)) ++ panic("failed fork for CPU %d", cpu); ++ + #ifdef __x86_64__ + gdt_descr = &cpu_gdt_descr[cpu]; +-#else +- gdt_descr = &per_cpu(cpu_gdt_descr, cpu); +-#endif + gdt_descr->address = get_zeroed_page(GFP_KERNEL); + if (unlikely(!gdt_descr->address)) { + printk(KERN_CRIT "CPU%d failed to allocate GDT\n", +@@ -312,6 +318,11 @@ void __init smp_prepare_cpus(unsigned in + } + gdt_descr->size = GDT_SIZE; + memcpy((void *)gdt_descr->address, cpu_gdt_table, GDT_SIZE); ++#else ++ if (unlikely(!init_gdt(cpu, idle))) ++ continue; ++ gdt_descr = &per_cpu(cpu_gdt_descr, cpu); ++#endif + make_page_readonly( + (void *)gdt_descr->address, + XENFEAT_writable_descriptor_tables); +@@ -331,10 +342,6 @@ void __init smp_prepare_cpus(unsigned in + cpu_2_logical_apicid[cpu] = apicid; + x86_cpu_to_apicid[cpu] = apicid; + +- idle = fork_idle(cpu); +- if (IS_ERR(idle)) +- panic("failed fork for CPU %d", cpu); +- + #ifdef __x86_64__ + cpu_pda(cpu)->pcurrent = idle; + cpu_pda(cpu)->cpunumber = cpu; +--- head-2010-01-18.orig/drivers/xen/fbfront/xenfb.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/fbfront/xenfb.c 2009-11-06 10:46:27.000000000 +0100 +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +--- head-2010-01-18.orig/drivers/xen/netback/loopback.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/netback/loopback.c 2009-11-06 10:46:27.000000000 +0100 +@@ -54,6 +54,7 @@ + #include + #include /* secpath_reset() */ + #include /* is_initial_xendomain() */ ++#include <../net/core/kmap_skb.h> /* k{,un}map_skb_frag() */ + + static int nloopbacks = -1; + module_param(nloopbacks, int, 0); +--- head-2010-01-18.orig/drivers/xen/pciback/conf_space_header.c 2008-10-29 09:55:56.000000000 +0100 ++++ head-2010-01-18/drivers/xen/pciback/conf_space_header.c 2009-11-06 10:46:27.000000000 +0100 +@@ -22,14 +22,14 @@ static int command_write(struct pci_dev + { + int err; + +- if (!dev->is_enabled && is_enable_cmd(value)) { ++ if (!atomic_read(&dev->enable_cnt) && is_enable_cmd(value)) { + if (unlikely(verbose_request)) + printk(KERN_DEBUG "pciback: %s: enable\n", + pci_name(dev)); + err = pci_enable_device(dev); + if (err) + return err; +- } else if (dev->is_enabled && !is_enable_cmd(value)) { ++ } else if (atomic_read(&dev->enable_cnt) && !is_enable_cmd(value)) { + if (unlikely(verbose_request)) + printk(KERN_DEBUG "pciback: %s: disable\n", + pci_name(dev)); +--- head-2010-01-18.orig/drivers/xen/pciback/pciback.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/pciback/pciback.h 2009-11-06 10:46:27.000000000 +0100 +@@ -100,7 +100,7 @@ void pciback_release_devices(struct pcib + + /* Handles events from front-end */ + irqreturn_t pciback_handle_event(int irq, void *dev_id); +-void pciback_do_op(void *data); ++void pciback_do_op(struct work_struct *work); + + int pciback_xenbus_register(void); + void pciback_xenbus_unregister(void); +--- head-2010-01-18.orig/drivers/xen/pciback/pciback_ops.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/pciback/pciback_ops.c 2009-11-06 10:46:27.000000000 +0100 +@@ -26,7 +26,7 @@ void pciback_reset_device(struct pci_dev + + pci_write_config_word(dev, PCI_COMMAND, 0); + +- dev->is_enabled = 0; ++ atomic_set(&dev->enable_cnt, 0); + dev->is_busmaster = 0; + } else { + pci_read_config_word(dev, PCI_COMMAND, &cmd); +@@ -67,9 +67,9 @@ void test_and_schedule_op(struct pciback + * context because some of the pci_* functions can sleep (mostly due to ACPI + * use of semaphores). This function is intended to be called from a work + * queue in process context taking a struct pciback_device as a parameter */ +-void pciback_do_op(void *data) ++void pciback_do_op(struct work_struct *work) + { +- struct pciback_device *pdev = data; ++ struct pciback_device *pdev = container_of(work, struct pciback_device, op_work); + struct pci_dev *dev; + struct xen_pci_op *op = &pdev->sh_info->op; + +--- head-2010-01-18.orig/drivers/xen/pciback/xenbus.c 2009-04-07 13:58:48.000000000 +0200 ++++ head-2010-01-18/drivers/xen/pciback/xenbus.c 2009-11-06 10:46:27.000000000 +0100 +@@ -33,7 +33,7 @@ static struct pciback_device *alloc_pdev + pdev->evtchn_irq = INVALID_EVTCHN_IRQ; + pdev->be_watching = 0; + +- INIT_WORK(&pdev->op_work, pciback_do_op, pdev); ++ INIT_WORK(&pdev->op_work, pciback_do_op); + + if (pciback_init_devices(pdev)) { + kfree(pdev); +--- head-2010-01-18.orig/drivers/xen/pcifront/pci_op.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/pcifront/pci_op.c 2009-11-06 10:46:27.000000000 +0100 +@@ -636,9 +636,9 @@ static pci_ers_result_t pcifront_common_ + } + + +-void pcifront_do_aer(void *data) ++void pcifront_do_aer(struct work_struct *data) + { +- struct pcifront_device *pdev = data; ++ struct pcifront_device *pdev = container_of(data, struct pcifront_device, op_work); + int cmd = pdev->sh_info->aer_op.cmd; + pci_channel_state_t state = + (pci_channel_state_t)pdev->sh_info->aer_op.err; +--- head-2010-01-18.orig/drivers/xen/pcifront/pcifront.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/pcifront/pcifront.h 2009-11-06 10:46:27.000000000 +0100 +@@ -48,7 +48,7 @@ int pcifront_rescan_root(struct pcifront + unsigned int domain, unsigned int bus); + void pcifront_free_roots(struct pcifront_device *pdev); + +-void pcifront_do_aer( void *data); ++void pcifront_do_aer(struct work_struct *data); + + irqreturn_t pcifront_handler_aer(int irq, void *dev); + +--- head-2010-01-18.orig/drivers/xen/pcifront/xenbus.c 2009-04-07 13:58:48.000000000 +0200 ++++ head-2010-01-18/drivers/xen/pcifront/xenbus.c 2009-11-06 10:46:27.000000000 +0100 +@@ -49,7 +49,7 @@ static struct pcifront_device *alloc_pde + pdev->evtchn = INVALID_EVTCHN; + pdev->gnt_ref = INVALID_GRANT_REF; + +- INIT_WORK(&pdev->op_work, pcifront_do_aer, pdev); ++ INIT_WORK(&pdev->op_work, pcifront_do_aer); + + dev_dbg(&xdev->dev, "Allocated pdev @ 0x%p pdev->sh_info @ 0x%p\n", + pdev, pdev->sh_info); +--- head-2010-01-18.orig/drivers/xen/scsiback/interface.c 2010-01-04 11:56:34.000000000 +0100 ++++ head-2010-01-18/drivers/xen/scsiback/interface.c 2010-01-04 12:24:50.000000000 +0100 +@@ -40,7 +40,7 @@ + #include + + +-static kmem_cache_t *scsiback_cachep; ++static struct kmem_cache *scsiback_cachep; + + struct vscsibk_info *vscsibk_info_alloc(domid_t domid) + { +--- head-2010-01-18.orig/drivers/xen/scsiback/scsiback.c 2010-01-04 12:23:07.000000000 +0100 ++++ head-2010-01-18/drivers/xen/scsiback/scsiback.c 2009-11-06 10:46:27.000000000 +0100 +@@ -349,13 +349,11 @@ static int scsiback_merge_bio(struct req + + if (!rq->bio) + blk_rq_bio_prep(q, rq, bio); +- else if (!q->back_merge_fn(q, rq, bio)) ++ else if (!ll_back_merge_fn(q, rq, bio)) + return -EINVAL; + else { + rq->biotail->bi_next = bio; + rq->biotail = bio; +- rq->hard_nr_sectors += bio_sectors(bio); +- rq->nr_sectors = rq->hard_nr_sectors; + } + + return 0; +--- head-2010-01-18.orig/drivers/xen/sfc_netfront/accel_vi.c 2010-01-18 16:17:16.000000000 +0100 ++++ head-2010-01-18/drivers/xen/sfc_netfront/accel_vi.c 2010-01-18 16:17:54.000000000 +0100 +@@ -465,7 +465,7 @@ netfront_accel_enqueue_skb_multi(netfron + + if (skb->ip_summed == CHECKSUM_PARTIAL) { + /* Set to zero to encourage falcon to work it out for us */ +- *(u16*)(skb->h.raw + skb->csum) = 0; ++ *(u16*)(skb->h.raw + skb->csum_offset) = 0; + } + + if (multi_post_start_new_buffer(vnic, &state)) { +@@ -584,7 +584,7 @@ netfront_accel_enqueue_skb_single(netfro + + if (skb->ip_summed == CHECKSUM_PARTIAL) { + /* Set to zero to encourage falcon to work it out for us */ +- *(u16*)(skb->h.raw + skb->csum) = 0; ++ *(u16*)(skb->h.raw + skb->csum_offset) = 0; + } + NETFRONT_ACCEL_PKTBUFF_FOR_EACH_FRAGMENT + (skb, idx, frag_data, frag_len, { +--- head-2010-01-18.orig/drivers/xen/tpmback/interface.c 2010-01-04 11:56:34.000000000 +0100 ++++ head-2010-01-18/drivers/xen/tpmback/interface.c 2010-01-04 12:25:38.000000000 +0100 +@@ -16,7 +16,7 @@ + #include + #include + +-static kmem_cache_t *tpmif_cachep; ++static struct kmem_cache *tpmif_cachep; + int num_frontends = 0; + + LIST_HEAD(tpmif_list); +--- head-2010-01-18.orig/drivers/xen/usbback/usbback.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/usbback/usbback.c 2010-01-04 12:25:52.000000000 +0100 +@@ -540,9 +540,10 @@ struct set_interface_request { + struct work_struct work; + }; + +-static void usbbk_set_interface_work(void *data) ++static void usbbk_set_interface_work(struct work_struct *arg) + { +- struct set_interface_request *req = (struct set_interface_request *) data; ++ struct set_interface_request *req ++ = container_of(arg, struct set_interface_request, work); + pending_req_t *pending_req = req->pending_req; + struct usb_device *udev = req->pending_req->stub->udev; + +@@ -570,7 +571,7 @@ static int usbbk_set_interface(pending_r + req->pending_req = pending_req; + req->interface = interface; + req->alternate = alternate; +- INIT_WORK(&req->work, usbbk_set_interface_work, req); ++ INIT_WORK(&req->work, usbbk_set_interface_work); + usb_get_dev(udev); + schedule_work(&req->work); + return 0; +@@ -582,9 +583,10 @@ struct clear_halt_request { + struct work_struct work; + }; + +-static void usbbk_clear_halt_work(void *data) ++static void usbbk_clear_halt_work(struct work_struct *arg) + { +- struct clear_halt_request *req = (struct clear_halt_request *) data; ++ struct clear_halt_request *req ++ = container_of(arg, struct clear_halt_request, work); + pending_req_t *pending_req = req->pending_req; + struct usb_device *udev = req->pending_req->stub->udev; + int ret; +@@ -610,7 +612,7 @@ static int usbbk_clear_halt(pending_req_ + return -ENOMEM; + req->pending_req = pending_req; + req->pipe = pipe; +- INIT_WORK(&req->work, usbbk_clear_halt_work, req); ++ INIT_WORK(&req->work, usbbk_clear_halt_work); + + usb_get_dev(udev); + schedule_work(&req->work); +@@ -623,9 +625,10 @@ struct port_reset_request { + struct work_struct work; + }; + +-static void usbbk_port_reset_work(void *data) ++static void usbbk_port_reset_work(struct work_struct *arg) + { +- struct port_reset_request *req = (struct port_reset_request *) data; ++ struct port_reset_request *req ++ = container_of(arg, struct port_reset_request, work); + pending_req_t *pending_req = req->pending_req; + struct usb_device *udev = pending_req->stub->udev; + int ret, ret_lock; +@@ -654,7 +657,7 @@ static int usbbk_port_reset(pending_req_ + return -ENOMEM; + + req->pending_req = pending_req; +- INIT_WORK(&req->work, usbbk_port_reset_work, req); ++ INIT_WORK(&req->work, usbbk_port_reset_work); + + usb_get_dev(udev); + schedule_work(&req->work); +--- head-2010-01-18.orig/drivers/xen/xenbus/xenbus_comms.c 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/drivers/xen/xenbus/xenbus_comms.c 2009-11-06 10:46:27.000000000 +0100 +@@ -49,8 +49,8 @@ + + static int xenbus_irq; + +-extern void xenbus_probe(void *); +-static DECLARE_WORK(probe_work, xenbus_probe, NULL); ++extern void xenbus_probe(struct work_struct *); ++static DECLARE_WORK(probe_work, xenbus_probe); + + static DECLARE_WAIT_QUEUE_HEAD(xb_waitq); + +--- head-2010-01-18.orig/drivers/xen/xenbus/xenbus_probe.c 2010-01-07 09:53:42.000000000 +0100 ++++ head-2010-01-18/drivers/xen/xenbus/xenbus_probe.c 2009-12-04 10:51:20.000000000 +0100 +@@ -856,7 +856,7 @@ void unregister_xenstore_notifier(struct + EXPORT_SYMBOL_GPL(unregister_xenstore_notifier); + + +-void xenbus_probe(void *unused) ++void xenbus_probe(struct work_struct *unused) + { + BUG_ON(!is_xenstored_ready()); + +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/desc_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/desc_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -4,8 +4,6 @@ + #include + #include + +-#define CPU_16BIT_STACK_SIZE 1024 +- + #ifndef __ASSEMBLY__ + + #include +@@ -15,8 +13,6 @@ + + extern struct desc_struct cpu_gdt_table[GDT_ENTRIES]; + +-DECLARE_PER_CPU(unsigned char, cpu_16bit_stack[CPU_16BIT_STACK_SIZE]); +- + struct Xgt_desc_struct { + unsigned short size; + unsigned long address __attribute__((packed)); +@@ -32,11 +28,6 @@ static inline struct desc_struct *get_cp + return (struct desc_struct *)per_cpu(cpu_gdt_descr, cpu).address; + } + +-/* +- * This is the ldt that every process will get unless we need +- * something other than this. +- */ +-extern struct desc_struct default_ldt[]; + extern struct desc_struct idt_table[]; + extern void set_intr_gate(unsigned int irq, void * addr); + +@@ -63,8 +54,8 @@ static inline void pack_gate(__u32 *a, _ + #define DESCTYPE_DPL3 0x60 /* DPL-3 */ + #define DESCTYPE_S 0x10 /* !system */ + ++#ifndef CONFIG_XEN + #define load_TR_desc() __asm__ __volatile__("ltr %w0"::"q" (GDT_ENTRY_TSS*8)) +-#define load_LDT_desc() __asm__ __volatile__("lldt %w0"::"q" (GDT_ENTRY_LDT*8)) + + #define load_gdt(dtr) __asm__ __volatile("lgdt %0"::"m" (*dtr)) + #define load_idt(dtr) __asm__ __volatile("lidt %0"::"m" (*dtr)) +@@ -75,6 +66,7 @@ static inline void pack_gate(__u32 *a, _ + #define store_idt(dtr) __asm__ ("sidt %0":"=m" (*dtr)) + #define store_tr(tr) __asm__ ("str %0":"=m" (tr)) + #define store_ldt(ldt) __asm__ ("sldt %0":"=m" (ldt)) ++#endif + + #if TLS_SIZE != 24 + # error update this code. +@@ -90,22 +82,43 @@ static inline void load_TLS(struct threa + } + + #ifndef CONFIG_XEN ++#define write_ldt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) ++#define write_gdt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) ++#define write_idt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) ++ + static inline void write_dt_entry(void *dt, int entry, __u32 entry_a, __u32 entry_b) + { + __u32 *lp = (__u32 *)((char *)dt + entry*8); + *lp = entry_a; + *(lp+1) = entry_b; + } +- +-#define write_ldt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) +-#define write_gdt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) ++#define set_ldt native_set_ldt + #else + extern int write_ldt_entry(void *ldt, int entry, __u32 entry_a, __u32 entry_b); + extern int write_gdt_entry(void *gdt, int entry, __u32 entry_a, __u32 entry_b); ++#define set_ldt xen_set_ldt ++#endif ++ ++#ifndef CONFIG_XEN ++static inline fastcall void native_set_ldt(const void *addr, ++ unsigned int entries) ++{ ++ if (likely(entries == 0)) ++ __asm__ __volatile__("lldt %w0"::"q" (0)); ++ else { ++ unsigned cpu = smp_processor_id(); ++ __u32 a, b; ++ ++ pack_descriptor(&a, &b, (unsigned long)addr, ++ entries * sizeof(struct desc_struct) - 1, ++ DESCTYPE_LDT, 0); ++ write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_LDT, a, b); ++ __asm__ __volatile__("lldt %w0"::"q" (GDT_ENTRY_LDT*8)); ++ } ++} + #endif +-#ifndef CONFIG_X86_NO_IDT +-#define write_idt_entry(dt, entry, a, b) write_dt_entry(dt, entry, a, b) + ++#ifndef CONFIG_X86_NO_IDT + static inline void _set_gate(int gate, unsigned int type, void *addr, unsigned short seg) + { + __u32 a, b; +@@ -125,14 +138,6 @@ static inline void __set_tss_desc(unsign + } + #endif + +-static inline void set_ldt_desc(unsigned int cpu, void *addr, unsigned int entries) +-{ +- __u32 a, b; +- pack_descriptor(&a, &b, (unsigned long)addr, +- entries * sizeof(struct desc_struct) - 1, +- DESCTYPE_LDT, 0); +- write_gdt_entry(get_cpu_gdt_table(cpu), GDT_ENTRY_LDT, a, b); +-} + + #define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr) + +@@ -163,36 +168,22 @@ static inline void set_ldt_desc(unsigned + + static inline void clear_LDT(void) + { +- int cpu = get_cpu(); +- +- /* +- * NB. We load the default_ldt for lcall7/27 handling on demand, as +- * it slows down context switching. Noone uses it anyway. +- */ +- cpu = cpu; /* XXX avoid compiler warning */ +- xen_set_ldt(NULL, 0); +- put_cpu(); ++ set_ldt(NULL, 0); + } + + /* + * load one particular LDT into the current CPU + */ +-static inline void load_LDT_nolock(mm_context_t *pc, int cpu) ++static inline void load_LDT_nolock(mm_context_t *pc) + { +- void *segments = pc->ldt; +- int count = pc->size; +- +- if (likely(!count)) +- segments = NULL; +- +- xen_set_ldt(segments, count); ++ set_ldt(pc->ldt, pc->size); + } + + static inline void load_LDT(mm_context_t *pc) + { +- int cpu = get_cpu(); +- load_LDT_nolock(pc, cpu); +- put_cpu(); ++ preempt_disable(); ++ load_LDT_nolock(pc); ++ preempt_enable(); + } + + static inline unsigned long get_desc_base(unsigned long *desc) +@@ -204,6 +195,29 @@ static inline unsigned long get_desc_bas + return base; + } + ++#else /* __ASSEMBLY__ */ ++ ++/* ++ * GET_DESC_BASE reads the descriptor base of the specified segment. ++ * ++ * Args: ++ * idx - descriptor index ++ * gdt - GDT pointer ++ * base - 32bit register to which the base will be written ++ * lo_w - lo word of the "base" register ++ * lo_b - lo byte of the "base" register ++ * hi_b - hi byte of the low word of the "base" register ++ * ++ * Example: ++ * GET_DESC_BASE(GDT_ENTRY_ESPFIX_SS, %ebx, %eax, %ax, %al, %ah) ++ * Will read the base address of GDT_ENTRY_ESPFIX_SS and put it into %eax. ++ */ ++#define GET_DESC_BASE(idx, gdt, base, lo_w, lo_b, hi_b) \ ++ movb idx*8+4(gdt), lo_b; \ ++ movb idx*8+7(gdt), hi_b; \ ++ shll $16, base; \ ++ movw idx*8+2(gdt), lo_w; ++ + #endif /* !__ASSEMBLY__ */ + + #endif +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -13,13 +13,16 @@ + #ifndef _ASM_FIXMAP_H + #define _ASM_FIXMAP_H + +- + /* used by vmalloc.c, vsyscall.lds.S. + * + * Leave one empty page between vmalloc'ed areas and + * the start of the fixmap. + */ + extern unsigned long __FIXADDR_TOP; ++#ifdef CONFIG_COMPAT_VDSO ++#define FIXADDR_USER_START __fix_to_virt(FIX_VDSO) ++#define FIXADDR_USER_END __fix_to_virt(FIX_VDSO - 1) ++#endif + + #ifndef __ASSEMBLY__ + #include +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/highmem.h 2008-10-29 09:55:56.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/highmem.h 2009-11-06 10:46:27.000000000 +0100 +@@ -85,7 +85,7 @@ static inline void clear_user_highpage(s + + void copy_highpage(struct page *to, struct page *from); + static inline void copy_user_highpage(struct page *to, struct page *from, +- unsigned long vaddr) ++ unsigned long vaddr, struct vm_area_struct *vma) + { + copy_highpage(to, from); + } +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/hypervisor.h 2009-11-06 10:46:27.000000000 +0100 +@@ -47,15 +47,6 @@ + #include + #include + #include +-#if defined(__i386__) +-# ifdef CONFIG_X86_PAE +-# include +-# else +-# include +-# endif +-#elif defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11) +-# include +-#endif + + extern shared_info_t *HYPERVISOR_shared_info; + +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/irqflags_32.h 2007-06-12 13:14:02.000000000 +0200 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/irqflags_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -22,9 +22,6 @@ + + #define __raw_local_save_flags() (current_vcpu_info()->evtchn_upcall_mask) + +-#define raw_local_save_flags(flags) \ +- do { (flags) = __raw_local_save_flags(); } while (0) +- + #define raw_local_irq_restore(x) \ + do { \ + vcpu_info_t *_vcpu; \ +@@ -66,18 +63,6 @@ void raw_safe_halt(void); + */ + void halt(void); + +-static inline int raw_irqs_disabled_flags(unsigned long flags) +-{ +- return (flags != 0); +-} +- +-#define raw_irqs_disabled() \ +-({ \ +- unsigned long flags = __raw_local_save_flags(); \ +- \ +- raw_irqs_disabled_flags(flags); \ +-}) +- + /* + * For spinlocks, etc: + */ +@@ -90,9 +75,64 @@ static inline int raw_irqs_disabled_flag + flags; \ + }) + ++#else ++/* Offsets into shared_info_t. */ ++#define evtchn_upcall_pending /* 0 */ ++#define evtchn_upcall_mask 1 ++ ++#define sizeof_vcpu_shift 6 ++ ++#ifdef CONFIG_SMP ++#define GET_VCPU_INFO movl TI_cpu(%ebp),%esi ; \ ++ shl $sizeof_vcpu_shift,%esi ; \ ++ addl HYPERVISOR_shared_info,%esi ++#else ++#define GET_VCPU_INFO movl HYPERVISOR_shared_info,%esi ++#endif ++ ++#define __DISABLE_INTERRUPTS movb $1,evtchn_upcall_mask(%esi) ++#define __ENABLE_INTERRUPTS movb $0,evtchn_upcall_mask(%esi) ++#define __TEST_PENDING testb $0xFF,evtchn_upcall_pending(%esi) ++#define DISABLE_INTERRUPTS(clb) GET_VCPU_INFO ; \ ++ __DISABLE_INTERRUPTS ++#define ENABLE_INTERRUPTS(clb) GET_VCPU_INFO ; \ ++ __ENABLE_INTERRUPTS ++#define ENABLE_INTERRUPTS_SYSEXIT __ENABLE_INTERRUPTS ; \ ++sysexit_scrit: /**** START OF SYSEXIT CRITICAL REGION ****/ ; \ ++ __TEST_PENDING ; \ ++ jnz 14f /* process more events if necessary... */ ; \ ++ movl PT_ESI(%esp), %esi ; \ ++ sysexit ; \ ++14: __DISABLE_INTERRUPTS ; \ ++ TRACE_IRQS_OFF ; \ ++sysexit_ecrit: /**** END OF SYSEXIT CRITICAL REGION ****/ ; \ ++ mov $__KERNEL_PDA, %ecx ; \ ++ push %esp ; \ ++ mov %ecx, %gs ; \ ++ call evtchn_do_upcall ; \ ++ add $4,%esp ; \ ++ jmp ret_from_intr ++#define INTERRUPT_RETURN iret ++#endif /* __ASSEMBLY__ */ ++ ++#ifndef __ASSEMBLY__ ++#define raw_local_save_flags(flags) \ ++ do { (flags) = __raw_local_save_flags(); } while (0) ++ + #define raw_local_irq_save(flags) \ + do { (flags) = __raw_local_irq_save(); } while (0) + ++static inline int raw_irqs_disabled_flags(unsigned long flags) ++{ ++ return (flags != 0); ++} ++ ++#define raw_irqs_disabled() \ ++({ \ ++ unsigned long flags = __raw_local_save_flags(); \ ++ \ ++ raw_irqs_disabled_flags(flags); \ ++}) + #endif /* __ASSEMBLY__ */ + + /* +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/mmu_context_32.h 2007-06-12 13:14:02.000000000 +0200 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/mmu_context_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -27,14 +27,13 @@ static inline void enter_lazy_tlb(struct + static inline void __prepare_arch_switch(void) + { + /* +- * Save away %fs and %gs. No need to save %es and %ds, as those +- * are always kernel segments while inside the kernel. Must +- * happen before reload of cr3/ldt (i.e., not in __switch_to). ++ * Save away %fs. No need to save %gs, as it was saved on the ++ * stack on entry. No need to save %es and %ds, as those are ++ * always kernel segments while inside the kernel. + */ +- asm volatile ( "mov %%fs,%0 ; mov %%gs,%1" +- : "=m" (current->thread.fs), +- "=m" (current->thread.gs)); +- asm volatile ( "movl %0,%%fs ; movl %0,%%gs" ++ asm volatile ( "mov %%fs,%0" ++ : "=m" (current->thread.fs)); ++ asm volatile ( "movl %0,%%fs" + : : "r" (0) ); + } + +@@ -89,14 +88,14 @@ static inline void switch_mm(struct mm_s + * tlb flush IPI delivery. We must reload %cr3. + */ + load_cr3(next->pgd); +- load_LDT_nolock(&next->context, cpu); ++ load_LDT_nolock(&next->context); + } + } + #endif + } + +-#define deactivate_mm(tsk, mm) \ +- asm("movl %0,%%fs ; movl %0,%%gs": :"r" (0)) ++#define deactivate_mm(tsk, mm) \ ++ asm("movl %0,%%fs": :"r" (0)); + + static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next) + { +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-11-06 10:46:27.000000000 +0100 +@@ -1,8 +1,6 @@ + #ifndef _I386_PGTABLE_3LEVEL_H + #define _I386_PGTABLE_3LEVEL_H + +-#include +- + /* + * Intel Physical Address Extension (PAE) Mode - three-level page + * tables on PPro+ CPUs. +@@ -75,6 +73,23 @@ static inline void set_pte(pte_t *ptep, + xen_l3_entry_update((pudptr), (pudval)) + + /* ++ * For PTEs and PDEs, we must clear the P-bit first when clearing a page table ++ * entry, so clear the bottom half first and enforce ordering with a compiler ++ * barrier. ++ */ ++static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) ++{ ++ if ((mm != current->mm && mm != &init_mm) ++ || HYPERVISOR_update_va_mapping(addr, __pte(0), 0)) { ++ ptep->pte_low = 0; ++ smp_wmb(); ++ ptep->pte_high = 0; ++ } ++} ++ ++#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) ++ ++/* + * Pentium-II erratum A13: in PAE mode we explicitly have to flush + * the TLB via cr3 if the top-level pgd is changed... + * We do not let the generic code free and clear pgd entries due to +@@ -93,45 +108,16 @@ static inline void pud_clear (pud_t * pu + #define pmd_offset(pud, address) ((pmd_t *) pud_page(*(pud)) + \ + pmd_index(address)) + +-static inline int pte_none(pte_t pte) +-{ +- return !(pte.pte_low | pte.pte_high); +-} +- +-/* +- * For PTEs and PDEs, we must clear the P-bit first when clearing a page table +- * entry, so clear the bottom half first and enforce ordering with a compiler +- * barrier. +- */ +-static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) ++static inline pte_t raw_ptep_get_and_clear(pte_t *ptep, pte_t res) + { +- if ((mm != current->mm && mm != &init_mm) +- || HYPERVISOR_update_va_mapping(addr, __pte(0), 0)) { +- ptep->pte_low = 0; +- smp_wmb(); ++ uint64_t val = __pte_val(res); ++ if (__cmpxchg64(ptep, val, 0) != val) { ++ /* xchg acts as a barrier before the setting of the high bits */ ++ res.pte_low = xchg(&ptep->pte_low, 0); ++ res.pte_high = ptep->pte_high; + ptep->pte_high = 0; + } +-} +- +-#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) +- +-#define __HAVE_ARCH_PTEP_GET_AND_CLEAR +-static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) +-{ +- pte_t pte = *ptep; +- if (!pte_none(pte)) { +- if ((mm != &init_mm) || +- HYPERVISOR_update_va_mapping(addr, __pte(0), 0)) { +- uint64_t val = __pte_val(pte); +- if (__cmpxchg64(ptep, val, 0) != val) { +- /* xchg acts as a barrier before the setting of the high bits */ +- pte.pte_low = xchg(&ptep->pte_low, 0); +- pte.pte_high = ptep->pte_high; +- ptep->pte_high = 0; +- } +- } +- } +- return pte; ++ return res; + } + + #define __HAVE_ARCH_PTEP_CLEAR_FLUSH +@@ -160,6 +146,11 @@ static inline int pte_same(pte_t a, pte_ + + #define pte_page(x) pfn_to_page(pte_pfn(x)) + ++static inline int pte_none(pte_t pte) ++{ ++ return !(pte.pte_low | pte.pte_high); ++} ++ + #define __pte_mfn(_pte) (((_pte).pte_low >> PAGE_SHIFT) | \ + ((_pte).pte_high << (32-PAGE_SHIFT))) + #define pte_mfn(_pte) ((_pte).pte_low & _PAGE_PRESENT ? \ +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -38,14 +38,14 @@ struct vm_area_struct; + #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) + extern unsigned long empty_zero_page[1024]; + extern pgd_t *swapper_pg_dir; +-extern kmem_cache_t *pgd_cache; +-extern kmem_cache_t *pmd_cache; ++extern struct kmem_cache *pgd_cache; ++extern struct kmem_cache *pmd_cache; + extern spinlock_t pgd_lock; + extern struct page *pgd_list; + +-void pmd_ctor(void *, kmem_cache_t *, unsigned long); +-void pgd_ctor(void *, kmem_cache_t *, unsigned long); +-void pgd_dtor(void *, kmem_cache_t *, unsigned long); ++void pmd_ctor(void *, struct kmem_cache *, unsigned long); ++void pgd_ctor(void *, struct kmem_cache *, unsigned long); ++void pgd_dtor(void *, struct kmem_cache *, unsigned long); + void pgtable_cache_init(void); + void paging_init(void); + +@@ -276,7 +276,6 @@ static inline pte_t pte_mkhuge(pte_t pte + #define pte_update(mm, addr, ptep) do { } while (0) + #define pte_update_defer(mm, addr, ptep) do { } while (0) + +- + /* + * We only update the dirty/accessed state if we set + * the dirty bit by hand in the kernel, since the hardware +@@ -342,6 +341,19 @@ do { \ + __young; \ + }) + ++#define __HAVE_ARCH_PTEP_GET_AND_CLEAR ++static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep) ++{ ++ pte_t pte = *ptep; ++ if (!pte_none(pte) ++ && (mm != &init_mm ++ || HYPERVISOR_update_va_mapping(addr, __pte(0), 0))) { ++ pte = raw_ptep_get_and_clear(ptep, pte); ++ pte_update(mm, addr, ptep); ++ } ++ return pte; ++} ++ + #define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL + #define ptep_get_and_clear_full(mm, addr, ptep, full) \ + ((full) ? ({ \ +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/processor_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + + /* flag for disabling the tsc */ +@@ -73,6 +74,7 @@ struct cpuinfo_x86 { + #endif + unsigned char x86_max_cores; /* cpuid returned max cores value */ + unsigned char apicid; ++ unsigned short x86_clflush_size; + #ifdef CONFIG_SMP + unsigned char booted_cores; /* number of cores as seen by OS */ + __u8 phys_proc_id; /* Physical processor id. */ +@@ -114,6 +116,8 @@ extern struct cpuinfo_x86 cpu_data[]; + extern int cpu_llc_id[NR_CPUS]; + extern char ignore_fpu_irq; + ++void __init cpu_detect(struct cpuinfo_x86 *c); ++ + extern void identify_cpu(struct cpuinfo_x86 *); + extern void print_cpu_info(struct cpuinfo_x86 *); + extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c); +@@ -146,8 +150,8 @@ static inline void detect_ht(struct cpui + #define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */ + #define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */ + +-static inline void __cpuid(unsigned int *eax, unsigned int *ebx, +- unsigned int *ecx, unsigned int *edx) ++static inline fastcall void xen_cpuid(unsigned int *eax, unsigned int *ebx, ++ unsigned int *ecx, unsigned int *edx) + { + /* ecx is often an input as well as an output. */ + __asm__(XEN_CPUID +@@ -158,59 +162,6 @@ static inline void __cpuid(unsigned int + : "0" (*eax), "2" (*ecx)); + } + +-/* +- * Generic CPUID function +- * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx +- * resulting in stale register contents being returned. +- */ +-static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) +-{ +- *eax = op; +- *ecx = 0; +- __cpuid(eax, ebx, ecx, edx); +-} +- +-/* Some CPUID calls want 'count' to be placed in ecx */ +-static inline void cpuid_count(int op, int count, int *eax, int *ebx, int *ecx, +- int *edx) +-{ +- *eax = op; +- *ecx = count; +- __cpuid(eax, ebx, ecx, edx); +-} +- +-/* +- * CPUID functions returning a single datum +- */ +-static inline unsigned int cpuid_eax(unsigned int op) +-{ +- unsigned int eax, ebx, ecx, edx; +- +- cpuid(op, &eax, &ebx, &ecx, &edx); +- return eax; +-} +-static inline unsigned int cpuid_ebx(unsigned int op) +-{ +- unsigned int eax, ebx, ecx, edx; +- +- cpuid(op, &eax, &ebx, &ecx, &edx); +- return ebx; +-} +-static inline unsigned int cpuid_ecx(unsigned int op) +-{ +- unsigned int eax, ebx, ecx, edx; +- +- cpuid(op, &eax, &ebx, &ecx, &edx); +- return ecx; +-} +-static inline unsigned int cpuid_edx(unsigned int op) +-{ +- unsigned int eax, ebx, ecx, edx; +- +- cpuid(op, &eax, &ebx, &ecx, &edx); +- return edx; +-} +- + #define load_cr3(pgdir) write_cr3(__pa(pgdir)) + + /* +@@ -480,9 +431,9 @@ struct thread_struct { + .vm86_info = NULL, \ + .sysenter_cs = __KERNEL_CS, \ + .io_bitmap_ptr = NULL, \ ++ .gs = __KERNEL_PDA, \ + } + +-#ifndef CONFIG_X86_NO_TSS + /* + * Note that the .io_bitmap member must be extra-big. This is because + * the CPU will access an additional byte beyond the end of the IO +@@ -497,26 +448,9 @@ struct thread_struct { + .io_bitmap = { [ 0 ... IO_BITMAP_LONGS] = ~0 }, \ + } + +-static inline void __load_esp0(struct tss_struct *tss, struct thread_struct *thread) +-{ +- tss->esp0 = thread->esp0; +- /* This can only happen when SEP is enabled, no need to test "SEP"arately */ +- if (unlikely(tss->ss1 != thread->sysenter_cs)) { +- tss->ss1 = thread->sysenter_cs; +- wrmsr(MSR_IA32_SYSENTER_CS, thread->sysenter_cs, 0); +- } +-} +-#define load_esp0(tss, thread) \ +- __load_esp0(tss, thread) +-#else +-#define load_esp0(tss, thread) do { \ +- if (HYPERVISOR_stack_switch(__KERNEL_DS, (thread)->esp0)) \ +- BUG(); \ +-} while (0) +-#endif +- + #define start_thread(regs, new_eip, new_esp) do { \ +- __asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0)); \ ++ __asm__("movl %0,%%fs": :"r" (0)); \ ++ regs->xgs = 0; \ + set_fs(USER_DS); \ + regs->xds = __USER_DS; \ + regs->xes = __USER_DS; \ +@@ -526,26 +460,6 @@ static inline void __load_esp0(struct ts + regs->esp = new_esp; \ + } while (0) + +-/* +- * These special macros can be used to get or set a debugging register +- */ +-#define get_debugreg(var, register) \ +- (var) = HYPERVISOR_get_debugreg((register)) +-#define set_debugreg(value, register) \ +- WARN_ON(HYPERVISOR_set_debugreg((register), (value))) +- +-/* +- * Set IOPL bits in EFLAGS from given mask +- */ +-static inline void set_iopl_mask(unsigned mask) +-{ +- struct physdev_set_iopl set_iopl; +- +- /* Force the change at ring 0. */ +- set_iopl.iopl = (mask == 0) ? 1 : (mask >> 12) & 3; +- WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl)); +-} +- + /* Forward declaration, a strange C thing */ + struct task_struct; + struct mm_struct; +@@ -637,6 +551,105 @@ static inline void rep_nop(void) + + #define cpu_relax() rep_nop() + ++#define paravirt_enabled() 0 ++#define __cpuid xen_cpuid ++ ++#ifndef CONFIG_X86_NO_TSS ++static inline void __load_esp0(struct tss_struct *tss, struct thread_struct *thread) ++{ ++ tss->esp0 = thread->esp0; ++ /* This can only happen when SEP is enabled, no need to test "SEP"arately */ ++ if (unlikely(tss->ss1 != thread->sysenter_cs)) { ++ tss->ss1 = thread->sysenter_cs; ++ wrmsr(MSR_IA32_SYSENTER_CS, thread->sysenter_cs, 0); ++ } ++} ++#define load_esp0(tss, thread) \ ++ __load_esp0(tss, thread) ++#else ++#define load_esp0(tss, thread) do { \ ++ if (HYPERVISOR_stack_switch(__KERNEL_DS, (thread)->esp0)) \ ++ BUG(); \ ++} while (0) ++#endif ++ ++ ++/* ++ * These special macros can be used to get or set a debugging register ++ */ ++#define get_debugreg(var, register) \ ++ (var) = HYPERVISOR_get_debugreg(register) ++#define set_debugreg(value, register) \ ++ WARN_ON(HYPERVISOR_set_debugreg(register, value)) ++ ++#define set_iopl_mask xen_set_iopl_mask ++ ++/* ++ * Set IOPL bits in EFLAGS from given mask ++ */ ++static inline void xen_set_iopl_mask(unsigned mask) ++{ ++ struct physdev_set_iopl set_iopl; ++ ++ /* Force the change at ring 0. */ ++ set_iopl.iopl = (mask == 0) ? 1 : (mask >> 12) & 3; ++ WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl)); ++} ++ ++ ++/* ++ * Generic CPUID function ++ * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx ++ * resulting in stale register contents being returned. ++ */ ++static inline void cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx) ++{ ++ *eax = op; ++ *ecx = 0; ++ __cpuid(eax, ebx, ecx, edx); ++} ++ ++/* Some CPUID calls want 'count' to be placed in ecx */ ++static inline void cpuid_count(int op, int count, int *eax, int *ebx, int *ecx, ++ int *edx) ++{ ++ *eax = op; ++ *ecx = count; ++ __cpuid(eax, ebx, ecx, edx); ++} ++ ++/* ++ * CPUID functions returning a single datum ++ */ ++static inline unsigned int cpuid_eax(unsigned int op) ++{ ++ unsigned int eax, ebx, ecx, edx; ++ ++ cpuid(op, &eax, &ebx, &ecx, &edx); ++ return eax; ++} ++static inline unsigned int cpuid_ebx(unsigned int op) ++{ ++ unsigned int eax, ebx, ecx, edx; ++ ++ cpuid(op, &eax, &ebx, &ecx, &edx); ++ return ebx; ++} ++static inline unsigned int cpuid_ecx(unsigned int op) ++{ ++ unsigned int eax, ebx, ecx, edx; ++ ++ cpuid(op, &eax, &ebx, &ecx, &edx); ++ return ecx; ++} ++static inline unsigned int cpuid_edx(unsigned int op) ++{ ++ unsigned int eax, ebx, ecx, edx; ++ ++ cpuid(op, &eax, &ebx, &ecx, &edx); ++ return edx; ++} ++ + /* generic versions from gas */ + #define GENERIC_NOP1 ".byte 0x90\n" + #define GENERIC_NOP2 ".byte 0x89,0xf6\n" +@@ -736,4 +749,8 @@ extern unsigned long boot_option_idle_ov + extern void enable_sep_cpu(void); + extern int sysenter_setup(void); + ++extern int init_gdt(int cpu, struct task_struct *idle); ++extern void cpu_set_gdt(int); ++extern void secondary_cpu_init(void); ++ + #endif /* __ASM_I386_PROCESSOR_H */ +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/smp_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/smp_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -8,6 +8,7 @@ + #include + #include + #include ++#include + #endif + + #ifdef CONFIG_X86_LOCAL_APIC +@@ -56,7 +57,7 @@ extern void cpu_uninit(void); + * from the initial startup. We map APIC_BASE very early in page_setup(), + * so this is correct in the x86 case. + */ +-#define raw_smp_processor_id() (current_thread_info()->cpu) ++#define raw_smp_processor_id() (read_pda(cpu_number)) + + extern cpumask_t cpu_possible_map; + #define cpu_callin_map cpu_possible_map +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/system_32.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/system_32.h 2009-11-06 10:46:27.000000000 +0100 +@@ -139,17 +139,17 @@ __asm__ __volatile__ ("movw %%dx,%1\n\t" + #define write_cr4(x) \ + __asm__ __volatile__("movl %0,%%cr4": :"r" (x)) + +-/* +- * Clear and set 'TS' bit respectively +- */ ++#define wbinvd() \ ++ __asm__ __volatile__ ("wbinvd": : :"memory") ++ ++/* Clear the 'TS' bit */ + #define clts() (HYPERVISOR_fpu_taskswitch(0)) ++ ++/* Set the 'TS' bit */ + #define stts() (HYPERVISOR_fpu_taskswitch(1)) + + #endif /* __KERNEL__ */ + +-#define wbinvd() \ +- __asm__ __volatile__ ("wbinvd": : :"memory") +- + static inline unsigned long get_limit(unsigned long segment) + { + unsigned long __limit; +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/desc_64.h 2008-01-28 12:24:19.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/desc_64.h 2009-11-06 10:46:27.000000000 +0100 +@@ -9,62 +9,11 @@ + + #include + #include ++#include + + #include + #include + +-// 8 byte segment descriptor +-struct desc_struct { +- u16 limit0; +- u16 base0; +- unsigned base1 : 8, type : 4, s : 1, dpl : 2, p : 1; +- unsigned limit : 4, avl : 1, l : 1, d : 1, g : 1, base2 : 8; +-} __attribute__((packed)); +- +-struct n_desc_struct { +- unsigned int a,b; +-}; +- +-enum { +- GATE_INTERRUPT = 0xE, +- GATE_TRAP = 0xF, +- GATE_CALL = 0xC, +-}; +- +-// 16byte gate +-struct gate_struct { +- u16 offset_low; +- u16 segment; +- unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1; +- u16 offset_middle; +- u32 offset_high; +- u32 zero1; +-} __attribute__((packed)); +- +-#define PTR_LOW(x) ((unsigned long)(x) & 0xFFFF) +-#define PTR_MIDDLE(x) (((unsigned long)(x) >> 16) & 0xFFFF) +-#define PTR_HIGH(x) ((unsigned long)(x) >> 32) +- +-enum { +- DESC_TSS = 0x9, +- DESC_LDT = 0x2, +-}; +- +-// LDT or TSS descriptor in the GDT. 16 bytes. +-struct ldttss_desc { +- u16 limit0; +- u16 base0; +- unsigned base1 : 8, type : 5, dpl : 2, p : 1; +- unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8; +- u32 base3; +- u32 zero1; +-} __attribute__((packed)); +- +-struct desc_ptr { +- unsigned short size; +- unsigned long address; +-} __attribute__((packed)) ; +- + extern struct desc_ptr idt_descr, cpu_gdt_descr[NR_CPUS]; + + extern struct desc_struct cpu_gdt_table[GDT_ENTRIES]; +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-11-06 10:46:27.000000000 +0100 +@@ -237,19 +237,18 @@ extern unsigned int __kernel_page_user; + + static inline unsigned long pgd_bad(pgd_t pgd) + { +- unsigned long val = __pgd_val(pgd); +- val &= ~PTE_MASK; +- val &= ~(_PAGE_USER | _PAGE_DIRTY); +- return val & ~(_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED); ++ return __pgd_val(pgd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); + } + +-static inline unsigned long pud_bad(pud_t pud) +-{ +- unsigned long val = __pud_val(pud); +- val &= ~PTE_MASK; +- val &= ~(_PAGE_USER | _PAGE_DIRTY); +- return val & ~(_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED); +-} ++static inline unsigned long pud_bad(pud_t pud) ++{ ++ return __pud_val(pud) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); ++} ++ ++static inline unsigned long pmd_bad(pmd_t pmd) ++{ ++ return __pmd_val(pmd) & ~(PTE_MASK | _KERNPG_TABLE | _PAGE_USER); ++} + + #define set_pte_at(_mm,addr,ptep,pteval) do { \ + if (((_mm) != current->mm && (_mm) != &init_mm) || \ +@@ -404,8 +403,6 @@ static inline int pmd_large(pmd_t pte) { + #define pmd_present(x) (__pmd_val(x) & _PAGE_PRESENT) + #endif + #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) +-#define pmd_bad(x) ((__pmd_val(x) & ~(PTE_MASK | _PAGE_USER | _PAGE_PRESENT)) \ +- != (_KERNPG_TABLE & ~(_PAGE_USER | _PAGE_PRESENT))) + #define pfn_pmd(nr,prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val(prot))) + #define pmd_pfn(x) ((pmd_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT) + +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/processor_64.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/processor_64.h 2009-11-06 10:46:27.000000000 +0100 +@@ -484,6 +484,14 @@ static inline void __mwait(unsigned long + : :"a" (eax), "c" (ecx)); + } + ++static inline void __sti_mwait(unsigned long eax, unsigned long ecx) ++{ ++ /* "mwait %eax,%ecx;" */ ++ asm volatile( ++ "sti; .byte 0x0f,0x01,0xc9;" ++ : :"a" (eax), "c" (ecx)); ++} ++ + extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); + + #define stack_current() \ +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/smp_64.h 2009-11-06 10:45:48.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/smp_64.h 2009-11-06 10:46:27.000000000 +0100 +@@ -88,11 +88,6 @@ extern u8 x86_cpu_to_log_apicid[NR_CPUS] + extern u8 bios_cpu_apicid[]; + + #ifdef CONFIG_X86_LOCAL_APIC +-static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) +-{ +- return cpus_addr(cpumask)[0]; +-} +- + static inline int cpu_present_to_apicid(int mps_cpu) + { + if (mps_cpu < NR_CPUS) +@@ -127,13 +122,6 @@ static __inline int logical_smp_processo + #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] + #else + #define cpu_physical_id(cpu) boot_cpu_id +-static inline int smp_call_function_single(int cpuid, void (*func) (void *info), +- void *info, int retry, int wait) +-{ +- /* Disable interrupts here? */ +- func(info); +- return 0; +-} + #endif /* !CONFIG_SMP */ + #endif + +--- head-2010-01-18.orig/kernel/kexec.c 2009-11-06 10:45:37.000000000 +0100 ++++ head-2010-01-18/kernel/kexec.c 2009-11-06 10:46:27.000000000 +0100 +@@ -375,7 +375,7 @@ static struct page *kimage_alloc_pages(g + if (limit == ~0UL) + address_bits = BITS_PER_LONG; + else +- address_bits = long_log2(limit); ++ address_bits = ilog2(limit); + + if (xen_limit_pages_to_max_mfn(pages, order, address_bits) < 0) { + __free_pages(pages, order); +--- head-2010-01-18.orig/net/core/dev.c 2009-12-04 10:49:48.000000000 +0100 ++++ head-2010-01-18/net/core/dev.c 2009-12-04 10:51:26.000000000 +0100 +@@ -1834,10 +1834,10 @@ inline int skb_checksum_setup(struct sk_ + goto out; + switch (skb->nh.iph->protocol) { + case IPPROTO_TCP: +- skb->csum = offsetof(struct tcphdr, check); ++ skb->csum_offset = offsetof(struct tcphdr, check); + break; + case IPPROTO_UDP: +- skb->csum = offsetof(struct udphdr, check); ++ skb->csum_offset = offsetof(struct udphdr, check); + break; + default: + if (net_ratelimit()) +@@ -1846,7 +1846,7 @@ inline int skb_checksum_setup(struct sk_ + " %d packet", skb->nh.iph->protocol); + goto out; + } +- if ((skb->h.raw + skb->csum + 2) > skb->tail) ++ if ((skb->h.raw + skb->csum_offset + 2) > skb->tail) + goto out; + skb->ip_summed = CHECKSUM_PARTIAL; + skb->proto_csum_blank = 0; --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/sfc-driverlink +++ linux-ec2-2.6.32/debian.ec2/patches.xen/sfc-driverlink @@ -0,0 +1,1133 @@ +From: David Riddoch +commit d96c061bfd1839e34e136de0555564520acc97af +Author: Steve Hodgson +Date: Mon Jul 14 15:38:47 2008 +0100 + +Subject: sfc: Driverlink API for exporting hardware features to client drivers + +References: FATE#303479 +Acked-by: jbeulich@novell.com + +--- head-2009-11-06.orig/drivers/net/sfc/Makefile 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/Makefile 2009-07-28 10:04:25.000000000 +0200 +@@ -1,6 +1,7 @@ + sfc-y += efx.o falcon.o tx.o rx.o falcon_gmac.o \ + falcon_xmac.o selftest.o ethtool.o xfp_phy.o \ +- mdio_10g.o tenxpress.o boards.o sfe4001.o ++ mdio_10g.o tenxpress.o boards.o sfe4001.o \ ++ driverlink.o + sfc-$(CONFIG_SFC_MTD) += mtd.o + + obj-$(CONFIG_SFC) += sfc.o +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2009-11-06/drivers/net/sfc/driverlink.c 2009-07-28 10:04:25.000000000 +0200 +@@ -0,0 +1,367 @@ ++/**************************************************************************** ++ * Driver for Solarflare Solarstorm network controllers and boards ++ * Copyright 2005 Fen Systems Ltd. ++ * Copyright 2005-2008 Solarflare Communications Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published ++ * by the Free Software Foundation, incorporated herein by reference. ++ */ ++ ++#include ++#include ++#include ++#include ++#include "net_driver.h" ++#include "efx.h" ++#include "driverlink_api.h" ++#include "driverlink.h" ++ ++/* Protects @efx_driverlink_lock and @efx_driver_list */ ++static DEFINE_MUTEX(efx_driverlink_lock); ++ ++/* List of all registered drivers */ ++static LIST_HEAD(efx_driver_list); ++ ++/* List of all registered Efx ports */ ++static LIST_HEAD(efx_port_list); ++ ++/** ++ * Driver link handle used internally to track devices ++ * @efx_dev: driverlink device handle exported to consumers ++ * @efx: efx_nic backing the driverlink device ++ * @port_node: per-device list head ++ * @driver_node: per-driver list head ++ */ ++struct efx_dl_handle { ++ struct efx_dl_device efx_dev; ++ struct efx_nic *efx; ++ struct list_head port_node; ++ struct list_head driver_node; ++}; ++ ++static struct efx_dl_handle *efx_dl_handle(struct efx_dl_device *efx_dev) ++{ ++ return container_of(efx_dev, struct efx_dl_handle, efx_dev); ++} ++ ++/* Remove an Efx device, and call the driver's remove() callback if ++ * present. The caller must hold @efx_driverlink_lock. */ ++static void efx_dl_del_device(struct efx_dl_device *efx_dev) ++{ ++ struct efx_dl_handle *efx_handle = efx_dl_handle(efx_dev); ++ ++ EFX_INFO(efx_handle->efx, "%s driverlink client unregistering\n", ++ efx_dev->driver->name); ++ ++ if (efx_dev->driver->remove) ++ efx_dev->driver->remove(efx_dev); ++ ++ list_del(&efx_handle->driver_node); ++ list_del(&efx_handle->port_node); ++ ++ kfree(efx_handle); ++} ++ ++/* Attempt to probe the given device with the driver, creating a ++ * new &struct efx_dl_device. If the probe routine returns an error, ++ * then the &struct efx_dl_device is destroyed */ ++static void efx_dl_try_add_device(struct efx_nic *efx, ++ struct efx_dl_driver *driver) ++{ ++ struct efx_dl_handle *efx_handle; ++ struct efx_dl_device *efx_dev; ++ int rc; ++ ++ efx_handle = kzalloc(sizeof(*efx_handle), GFP_KERNEL); ++ if (!efx_handle) ++ goto fail; ++ efx_dev = &efx_handle->efx_dev; ++ efx_handle->efx = efx; ++ efx_dev->driver = driver; ++ efx_dev->pci_dev = efx->pci_dev; ++ INIT_LIST_HEAD(&efx_handle->port_node); ++ INIT_LIST_HEAD(&efx_handle->driver_node); ++ ++ rc = driver->probe(efx_dev, efx->net_dev, ++ efx->dl_info, efx->silicon_rev); ++ if (rc) ++ goto fail; ++ ++ list_add_tail(&efx_handle->driver_node, &driver->device_list); ++ list_add_tail(&efx_handle->port_node, &efx->dl_device_list); ++ ++ EFX_INFO(efx, "%s driverlink client registered\n", driver->name); ++ return; ++ ++ fail: ++ EFX_INFO(efx, "%s driverlink client skipped\n", driver->name); ++ ++ kfree(efx_handle); ++} ++ ++/* Unregister a driver from the driverlink layer, calling the ++ * driver's remove() callback for every attached device */ ++void efx_dl_unregister_driver(struct efx_dl_driver *driver) ++{ ++ struct efx_dl_handle *efx_handle, *efx_handle_n; ++ ++ printk(KERN_INFO "Efx driverlink unregistering %s driver\n", ++ driver->name); ++ ++ mutex_lock(&efx_driverlink_lock); ++ ++ list_for_each_entry_safe(efx_handle, efx_handle_n, ++ &driver->device_list, driver_node) ++ efx_dl_del_device(&efx_handle->efx_dev); ++ ++ list_del(&driver->node); ++ ++ mutex_unlock(&efx_driverlink_lock); ++} ++EXPORT_SYMBOL(efx_dl_unregister_driver); ++ ++/* Register a new driver with the driverlink layer. The driver's ++ * probe routine will be called for every attached nic. */ ++int efx_dl_register_driver(struct efx_dl_driver *driver) ++{ ++ struct efx_nic *efx; ++ int rc; ++ ++ printk(KERN_INFO "Efx driverlink registering %s driver\n", ++ driver->name); ++ ++ INIT_LIST_HEAD(&driver->node); ++ INIT_LIST_HEAD(&driver->device_list); ++ ++ rc = mutex_lock_interruptible(&efx_driverlink_lock); ++ if (rc) ++ return rc; ++ ++ list_add_tail(&driver->node, &efx_driver_list); ++ list_for_each_entry(efx, &efx_port_list, dl_node) ++ efx_dl_try_add_device(efx, driver); ++ ++ mutex_unlock(&efx_driverlink_lock); ++ ++ return 0; ++} ++EXPORT_SYMBOL(efx_dl_register_driver); ++ ++void efx_dl_unregister_nic(struct efx_nic *efx) ++{ ++ struct efx_dl_handle *efx_handle, *efx_handle_n; ++ ++ mutex_lock(&efx_driverlink_lock); ++ ++ list_for_each_entry_safe_reverse(efx_handle, efx_handle_n, ++ &efx->dl_device_list, ++ port_node) ++ efx_dl_del_device(&efx_handle->efx_dev); ++ ++ list_del(&efx->dl_node); ++ ++ mutex_unlock(&efx_driverlink_lock); ++} ++ ++int efx_dl_register_nic(struct efx_nic *efx) ++{ ++ struct efx_dl_driver *driver; ++ int rc; ++ ++ rc = mutex_lock_interruptible(&efx_driverlink_lock); ++ if (rc) ++ return rc; ++ ++ list_add_tail(&efx->dl_node, &efx_port_list); ++ list_for_each_entry(driver, &efx_driver_list, node) ++ efx_dl_try_add_device(efx, driver); ++ ++ mutex_unlock(&efx_driverlink_lock); ++ ++ return 0; ++} ++ ++/* Dummy callback implementations. ++ * To avoid a branch point on the fast-path, the callbacks are always ++ * implemented - they are never NULL. ++ */ ++static enum efx_veto efx_dummy_tx_packet_callback(struct efx_dl_device *efx_dev, ++ struct sk_buff *skb) ++{ ++ return EFX_ALLOW_PACKET; ++} ++ ++static enum efx_veto efx_dummy_rx_packet_callback(struct efx_dl_device *efx_dev, ++ const char *pkt_buf, int len) ++{ ++ return EFX_ALLOW_PACKET; ++} ++ ++static int efx_dummy_request_mtu_callback(struct efx_dl_device *efx_dev, ++ int new_mtu) ++{ ++ return 0; ++} ++ ++static void efx_dummy_mtu_changed_callback(struct efx_dl_device *efx_dev, ++ int mtu) ++{ ++ return; ++} ++ ++static void efx_dummy_event_callback(struct efx_dl_device *efx_dev, void *event) ++{ ++ return; ++} ++ ++struct efx_dl_callbacks efx_default_callbacks = { ++ .tx_packet = efx_dummy_tx_packet_callback, ++ .rx_packet = efx_dummy_rx_packet_callback, ++ .request_mtu = efx_dummy_request_mtu_callback, ++ .mtu_changed = efx_dummy_mtu_changed_callback, ++ .event = efx_dummy_event_callback, ++}; ++ ++void efx_dl_unregister_callbacks(struct efx_dl_device *efx_dev, ++ struct efx_dl_callbacks *callbacks) ++{ ++ struct efx_dl_handle *efx_handle = efx_dl_handle(efx_dev); ++ struct efx_nic *efx = efx_handle->efx; ++ ++ efx_suspend(efx); ++ ++ EFX_INFO(efx, "removing callback hooks into %s driver\n", ++ efx_dev->driver->name); ++ ++ if (callbacks->tx_packet) { ++ BUG_ON(efx->dl_cb_dev.tx_packet != efx_dev); ++ efx->dl_cb.tx_packet = efx_default_callbacks.tx_packet; ++ efx->dl_cb_dev.tx_packet = NULL; ++ } ++ if (callbacks->rx_packet) { ++ BUG_ON(efx->dl_cb_dev.rx_packet != efx_dev); ++ efx->dl_cb.rx_packet = efx_default_callbacks.rx_packet; ++ efx->dl_cb_dev.rx_packet = NULL; ++ } ++ if (callbacks->request_mtu) { ++ BUG_ON(efx->dl_cb_dev.request_mtu != efx_dev); ++ efx->dl_cb.request_mtu = efx_default_callbacks.request_mtu; ++ efx->dl_cb_dev.request_mtu = NULL; ++ } ++ if (callbacks->mtu_changed) { ++ BUG_ON(efx->dl_cb_dev.mtu_changed != efx_dev); ++ efx->dl_cb.mtu_changed = efx_default_callbacks.mtu_changed; ++ efx->dl_cb_dev.mtu_changed = NULL; ++ } ++ if (callbacks->event) { ++ BUG_ON(efx->dl_cb_dev.event != efx_dev); ++ efx->dl_cb.event = efx_default_callbacks.event; ++ efx->dl_cb_dev.event = NULL; ++ } ++ ++ efx_resume(efx); ++} ++EXPORT_SYMBOL(efx_dl_unregister_callbacks); ++ ++int efx_dl_register_callbacks(struct efx_dl_device *efx_dev, ++ struct efx_dl_callbacks *callbacks) ++{ ++ struct efx_dl_handle *efx_handle = efx_dl_handle(efx_dev); ++ struct efx_nic *efx = efx_handle->efx; ++ int rc = 0; ++ ++ efx_suspend(efx); ++ ++ /* Check that the requested callbacks are not already hooked. */ ++ if ((callbacks->tx_packet && efx->dl_cb_dev.tx_packet) || ++ (callbacks->rx_packet && efx->dl_cb_dev.rx_packet) || ++ (callbacks->request_mtu && efx->dl_cb_dev.request_mtu) || ++ (callbacks->mtu_changed && efx->dl_cb_dev.mtu_changed) || ++ (callbacks->event && efx->dl_cb_dev.event)) { ++ rc = -EBUSY; ++ goto out; ++ } ++ ++ EFX_INFO(efx, "adding callback hooks to %s driver\n", ++ efx_dev->driver->name); ++ ++ /* Hook in the requested callbacks, leaving any NULL members ++ * referencing the members of @efx_default_callbacks */ ++ if (callbacks->tx_packet) { ++ efx->dl_cb.tx_packet = callbacks->tx_packet; ++ efx->dl_cb_dev.tx_packet = efx_dev; ++ } ++ if (callbacks->rx_packet) { ++ efx->dl_cb.rx_packet = callbacks->rx_packet; ++ efx->dl_cb_dev.rx_packet = efx_dev; ++ } ++ if (callbacks->request_mtu) { ++ efx->dl_cb.request_mtu = callbacks->request_mtu; ++ efx->dl_cb_dev.request_mtu = efx_dev; ++ } ++ if (callbacks->mtu_changed) { ++ efx->dl_cb.mtu_changed = callbacks->mtu_changed; ++ efx->dl_cb_dev.mtu_changed = efx_dev; ++ } ++ if (callbacks->event) { ++ efx->dl_cb.event = callbacks->event; ++ efx->dl_cb_dev.event = efx_dev; ++ } ++ ++ out: ++ efx_resume(efx); ++ ++ return rc; ++} ++EXPORT_SYMBOL(efx_dl_register_callbacks); ++ ++void efx_dl_schedule_reset(struct efx_dl_device *efx_dev) ++{ ++ struct efx_dl_handle *efx_handle = efx_dl_handle(efx_dev); ++ struct efx_nic *efx = efx_handle->efx; ++ ++ efx_schedule_reset(efx, RESET_TYPE_ALL); ++} ++EXPORT_SYMBOL(efx_dl_schedule_reset); ++ ++void efx_dl_reset_unlock(void) ++{ ++ mutex_unlock(&efx_driverlink_lock); ++} ++ ++/* Suspend ready for reset, serialising against all the driverlink interfacse ++ * and calling the suspend() callback of every registered driver */ ++void efx_dl_reset_suspend(struct efx_nic *efx) ++{ ++ struct efx_dl_handle *efx_handle; ++ struct efx_dl_device *efx_dev; ++ ++ mutex_lock(&efx_driverlink_lock); ++ ++ list_for_each_entry_reverse(efx_handle, ++ &efx->dl_device_list, ++ port_node) { ++ efx_dev = &efx_handle->efx_dev; ++ if (efx_dev->driver->reset_suspend) ++ efx_dev->driver->reset_suspend(efx_dev); ++ } ++} ++ ++/* Resume after a reset, calling the resume() callback of every registered ++ * driver, and releasing @Efx_driverlink_lock acquired in ++ * efx_dl_reset_resume() */ ++void efx_dl_reset_resume(struct efx_nic *efx, int ok) ++{ ++ struct efx_dl_handle *efx_handle; ++ struct efx_dl_device *efx_dev; ++ ++ list_for_each_entry(efx_handle, &efx->dl_device_list, ++ port_node) { ++ efx_dev = &efx_handle->efx_dev; ++ if (efx_dev->driver->reset_resume) ++ efx_dev->driver->reset_resume(efx_dev, ok); ++ } ++ ++ mutex_unlock(&efx_driverlink_lock); ++} +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2009-11-06/drivers/net/sfc/driverlink.h 2009-07-28 10:04:25.000000000 +0200 +@@ -0,0 +1,43 @@ ++/**************************************************************************** ++ * Driver for Solarflare Solarstorm network controllers and boards ++ * Copyright 2005 Fen Systems Ltd. ++ * Copyright 2006-2008 Solarflare Communications Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published ++ * by the Free Software Foundation, incorporated herein by reference. ++ */ ++ ++#ifndef EFX_DRIVERLINK_H ++#define EFX_DRIVERLINK_H ++ ++/* Forward declarations */ ++struct efx_dl_device; ++struct efx_nic; ++ ++/* Efx callback devices ++ * ++ * A list of the devices that own each callback. The partner to ++ * struct efx_dl_callbacks. ++ */ ++struct efx_dl_cb_devices { ++ struct efx_dl_device *tx_packet; ++ struct efx_dl_device *rx_packet; ++ struct efx_dl_device *request_mtu; ++ struct efx_dl_device *mtu_changed; ++ struct efx_dl_device *event; ++}; ++ ++extern struct efx_dl_callbacks efx_default_callbacks; ++ ++#define EFX_DL_CALLBACK(_port, _name, ...) \ ++ (_port)->dl_cb._name((_port)->dl_cb_dev._name, __VA_ARGS__) ++ ++extern int efx_dl_register_nic(struct efx_nic *efx); ++extern void efx_dl_unregister_nic(struct efx_nic *efx); ++ ++/* Suspend and resume client drivers over a hardware reset */ ++extern void efx_dl_reset_suspend(struct efx_nic *efx); ++extern void efx_dl_reset_resume(struct efx_nic *efx, int ok); ++ ++#endif /* EFX_DRIVERLINK_H */ +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2009-11-06/drivers/net/sfc/driverlink_api.h 2009-07-28 10:04:25.000000000 +0200 +@@ -0,0 +1,303 @@ ++/**************************************************************************** ++ * Driver for Solarflare Solarstorm network controllers and boards ++ * Copyright 2005-2006 Fen Systems Ltd. ++ * Copyright 2005-2008 Solarflare Communications Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 as published ++ * by the Free Software Foundation, incorporated herein by reference. ++ */ ++ ++#ifndef EFX_DRIVERLINK_API_H ++#define EFX_DRIVERLINK_API_H ++ ++#include ++ ++/* Forward declarations */ ++struct pci_dev; ++struct net_device; ++struct sk_buff; ++struct efx_dl_device; ++struct efx_dl_device_info; ++ ++/* An extra safeguard in addition to symbol versioning */ ++#define EFX_DRIVERLINK_API_VERSION 2 ++ ++/** ++ * struct efx_dl_driver - An Efx driverlink device driver ++ * ++ * A driverlink client defines and initializes as many instances of ++ * efx_dl_driver as required, registering each one with ++ * efx_dl_register_driver(). ++ * ++ * @name: Name of the driver ++ * @probe: Called when device added ++ * The client should use the @def_info linked list and @silicon_rev ++ * to determine if they wish to attach to this device. ++ * Context: process, driverlink semaphore held ++ * @remove: Called when device removed ++ * The client must ensure the finish all operations with this ++ * device before returning from this method. ++ * Context: process, driverlink semaphore held ++ * @reset_suspend: Called before device is reset ++ * Called immediately before a hardware reset. The client must stop all ++ * hardware processing before returning from this method. Callbacks will ++ * be inactive when this method is called. ++ * Context: process, driverlink semaphore held. rtnl_lock may be held ++ * @reset_resume: Called after device is reset ++ * Called after a hardware reset. If @ok is true, the client should ++ * state and resume normal operations. If @ok is false, the client should ++ * abandon use of the hardware resources. remove() will still be called. ++ * Context: process, driverlink semaphore held. rtnl_lock may be held ++ */ ++struct efx_dl_driver { ++ const char *name; ++ ++ int (*probe) (struct efx_dl_device *efx_dl_dev, ++ const struct net_device *net_dev, ++ const struct efx_dl_device_info *dev_info, ++ const char *silicon_rev); ++ void (*remove) (struct efx_dl_device *efx_dev); ++ void (*reset_suspend) (struct efx_dl_device *efx_dev); ++ void (*reset_resume) (struct efx_dl_device *efx_dev, int ok); ++ ++/* private: */ ++ struct list_head node; ++ struct list_head device_list; ++}; ++ ++/** ++ * enum efx_dl_device_info_type - Device information identifier. ++ * ++ * Used to identify each item in the &struct efx_dl_device_info linked list ++ * provided to each driverlink client in the probe() @dev_info member. ++ * ++ * @EFX_DL_FALCON_RESOURCES: Information type is &struct efx_dl_falcon_resources ++ */ ++enum efx_dl_device_info_type { ++ /** Falcon resources available for export */ ++ EFX_DL_FALCON_RESOURCES = 0, ++}; ++ ++/** ++ * struct efx_dl_device_info - device information structure ++ * ++ * @next: Link to next structure, if any ++ * @type: Type code for this structure ++ */ ++struct efx_dl_device_info { ++ struct efx_dl_device_info *next; ++ enum efx_dl_device_info_type type; ++}; ++ ++/** ++ * enum efx_dl_falcon_resource_flags - Falcon resource information flags. ++ * ++ * Flags that describe hardware variations for the current Falcon device. ++ * ++ * @EFX_DL_FALCON_DUAL_FUNC: Port is dual-function. ++ * Certain silicon revisions have two pci functions, and require ++ * certain hardware resources to be accessed via the secondary ++ * function ++ * @EFX_DL_FALCON_USE_MSI: Port is initialised to use MSI/MSI-X interrupts. ++ * Falcon supports traditional legacy interrupts and MSI/MSI-X ++ * interrupts. The choice is made at run time by the sfc driver, and ++ * notified to the clients by this enumeration ++ */ ++enum efx_dl_falcon_resource_flags { ++ EFX_DL_FALCON_DUAL_FUNC = 0x1, ++ EFX_DL_FALCON_USE_MSI = 0x2, ++}; ++ ++/** ++ * struct efx_dl_falcon_resources - Falcon resource information. ++ * ++ * This structure describes Falcon hardware resources available for ++ * use by a driverlink driver. ++ * ++ * @hdr: Resource linked list header ++ * @biu_lock: Register access lock. ++ * Some Falcon revisions require register access for configuration ++ * registers to be serialised between ports and PCI functions. ++ * The sfc driver will provide the appropriate lock semantics for ++ * the underlying hardware. ++ * @buffer_table_min: First available buffer table entry ++ * @buffer_table_lim: Last available buffer table entry + 1 ++ * @evq_timer_min: First available event queue with timer ++ * @evq_timer_lim: Last available event queue with timer + 1 ++ * @evq_int_min: First available event queue with interrupt ++ * @evq_int_lim: Last available event queue with interrupt + 1 ++ * @rxq_min: First available RX queue ++ * @rxq_lim: Last available RX queue + 1 ++ * @txq_min: First available TX queue ++ * @txq_lim: Last available TX queue + 1 ++ * @flags: Hardware variation flags ++ */ ++struct efx_dl_falcon_resources { ++ struct efx_dl_device_info hdr; ++ spinlock_t *biu_lock; ++ unsigned buffer_table_min; ++ unsigned buffer_table_lim; ++ unsigned evq_timer_min; ++ unsigned evq_timer_lim; ++ unsigned evq_int_min; ++ unsigned evq_int_lim; ++ unsigned rxq_min; ++ unsigned rxq_lim; ++ unsigned txq_min; ++ unsigned txq_lim; ++ enum efx_dl_falcon_resource_flags flags; ++}; ++ ++/** ++ * struct efx_dl_device - An Efx driverlink device. ++ * ++ * @pci_dev: PCI device used by the sfc driver. ++ * @priv: Driver private data ++ * Driverlink clients can use this to store a pointer to their ++ * internal per-device data structure. Each (driver, device) ++ * tuple has a separate &struct efx_dl_device, so clients can use ++ * this @priv field independently. ++ * @driver: Efx driverlink driver for this device ++ */ ++struct efx_dl_device { ++ struct pci_dev *pci_dev; ++ void *priv; ++ struct efx_dl_driver *driver; ++}; ++ ++/** ++ * enum efx_veto - Packet veto request flag. ++ * ++ * This is the return type for the rx_packet() and tx_packet() methods ++ * in &struct efx_dl_callbacks. ++ * ++ * @EFX_ALLOW_PACKET: Packet may be transmitted/received ++ * @EFX_VETO_PACKET: Packet must not be transmitted/received ++ */ ++enum efx_veto { ++ EFX_ALLOW_PACKET = 0, ++ EFX_VETO_PACKET = 1, ++}; ++ ++/** ++ * struct efx_dl_callbacks - Efx callbacks ++ * ++ * This is a tighly controlled set of simple callbacks, that are attached ++ * to the sfc driver via efx_dl_register_callbacks(). They export just enough ++ * state to allow clients to make use of the available hardware resources. ++ * ++ * For efficiency, only one client can hook each callback. Since these ++ * callbacks are called on packet transmit and reception paths, and the ++ * sfc driver may have multiple tx and rx queues per port, clients should ++ * avoid acquiring locks or allocating memory. ++ * ++ * @tx_packet: Called when packet is about to be transmitted ++ * Called for every packet about to be transmitted, providing means ++ * for the client to snoop traffic, and veto transmission by returning ++ * %EFX_VETO_PACKET (the sfc driver will subsequently free the skb). ++ * Context: tasklet, netif_tx_lock held ++ * @rx_packet: Called when packet is received ++ * Called for every received packet (after LRO), allowing the client ++ * to snoop every received packet (on every rx queue), and veto ++ * reception by returning %EFX_VETO_PACKET. ++ * Context: tasklet ++ * @request_mtu: Called to request MTU change. ++ * Called whenever the user requests the net_dev mtu to be changed. ++ * If the client returns an error, the mtu change is aborted. The sfc ++ * driver guarantees that no other callbacks are running. ++ * Context: process, rtnl_lock held. ++ * @mtu_changed: Called when MTU has been changed. ++ * Called after the mtu has been successfully changed, always after ++ * a previous call to request_mtu(). The sfc driver guarantees that no ++ * other callbacks are running. ++ * Context: process, rtnl_lock held. ++ * @event: Called when a hardware NIC event is not understood by the sfc driver. ++ * Context: tasklet. ++ */ ++struct efx_dl_callbacks { ++ enum efx_veto (*tx_packet) (struct efx_dl_device *efx_dev, ++ struct sk_buff *skb); ++ enum efx_veto (*rx_packet) (struct efx_dl_device *efx_dev, ++ const char *pkt_hdr, int pkt_len); ++ int (*request_mtu) (struct efx_dl_device *efx_dev, int new_mtu); ++ void (*mtu_changed) (struct efx_dl_device *efx_dev, int mtu); ++ void (*event) (struct efx_dl_device *efx_dev, void *p_event); ++}; ++ ++/* Include API version number in symbol used for efx_dl_register_driver */ ++#define efx_dl_stringify_1(x, y) x ## y ++#define efx_dl_stringify_2(x, y) efx_dl_stringify_1(x, y) ++#define efx_dl_register_driver \ ++ efx_dl_stringify_2(efx_dl_register_driver_api_ver_, \ ++ EFX_DRIVERLINK_API_VERSION) ++ ++/* Exported driverlink api used to register and unregister the client driver ++ * and any callbacks [only one per port allowed], and to allow a client driver ++ * to request reset to recover from an error condition. ++ * ++ * All of these functions acquire the driverlink semaphore, so must not be ++ * called from an efx_dl_driver or efx_dl_callbacks member, and must be called ++ * from process context. ++ */ ++extern int efx_dl_register_driver(struct efx_dl_driver *driver); ++ ++extern void efx_dl_unregister_driver(struct efx_dl_driver *driver); ++ ++extern int efx_dl_register_callbacks(struct efx_dl_device *efx_dev, ++ struct efx_dl_callbacks *callbacks); ++ ++extern void efx_dl_unregister_callbacks(struct efx_dl_device *efx_dev, ++ struct efx_dl_callbacks *callbacks); ++ ++/* Schedule a reset without grabbing any locks */ ++extern void efx_dl_schedule_reset(struct efx_dl_device *efx_dev); ++ ++/** ++ * efx_dl_for_each_device_info_matching - iterate an efx_dl_device_info list ++ * @_dev_info: Pointer to first &struct efx_dl_device_info ++ * @_type: Type code to look for ++ * @_info_type: Structure type corresponding to type code ++ * @_field: Name of &struct efx_dl_device_info field in the type ++ * @_p: Iterator variable ++ * ++ * Example: ++ * struct efx_dl_falcon_resources *res; ++ * efx_dl_for_each_device_info_matching(dev_info, EFX_DL_FALCON_RESOURCES, ++ * struct efx_dl_falcon_resources, ++ * hdr, res) { ++ * if (res->flags & EFX_DL_FALCON_DUAL_FUNC) ++ * .... ++ * } ++ */ ++#define efx_dl_for_each_device_info_matching(_dev_info, _type, \ ++ _info_type, _field, _p) \ ++ for ((_p) = container_of((_dev_info), _info_type, _field); \ ++ (_p) != NULL; \ ++ (_p) = container_of((_p)->_field.next, _info_type, _field))\ ++ if ((_p)->_field.type != _type) \ ++ continue; \ ++ else ++ ++/** ++ * efx_dl_search_device_info - search an efx_dl_device_info list ++ * @_dev_info: Pointer to first &struct efx_dl_device_info ++ * @_type: Type code to look for ++ * @_info_type: Structure type corresponding to type code ++ * @_field: Name of &struct efx_dl_device_info member in this type ++ * @_p: Result variable ++ * ++ * Example: ++ * struct efx_dl_falcon_resources *res; ++ * efx_dl_search_device_info(dev_info, EFX_DL_FALCON_RESOURCES, ++ * struct efx_dl_falcon_resources, hdr, res); ++ * if (res) ++ * .... ++ */ ++#define efx_dl_search_device_info(_dev_info, _type, _info_type, \ ++ _field, _p) \ ++ efx_dl_for_each_device_info_matching((_dev_info), (_type), \ ++ _info_type, _field, (_p)) \ ++ break; ++ ++#endif /* EFX_DRIVERLINK_API_H */ +--- head-2009-11-06.orig/drivers/net/sfc/efx.c 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/efx.c 2009-10-12 13:40:25.000000000 +0200 +@@ -1487,12 +1487,21 @@ static int efx_change_mtu(struct net_dev + + efx_stop_all(efx); + ++ /* Ask driverlink client if we can change MTU */ ++ rc = EFX_DL_CALLBACK(efx, request_mtu, new_mtu); ++ if (rc) ++ goto out; ++ + EFX_LOG(efx, "changing MTU to %d\n", new_mtu); + + efx_fini_channels(efx); + net_dev->mtu = new_mtu; + efx_init_channels(efx); + ++ /* Notify driverlink client of new MTU */ ++ EFX_DL_CALLBACK(efx, mtu_changed, new_mtu); ++ ++ out: + efx_start_all(efx); + return rc; + } +@@ -1680,6 +1689,23 @@ static void efx_unregister_netdev(struct + * Device reset and suspend + * + **************************************************************************/ ++/* Serialise access to the driverlink callbacks, by quiescing event processing ++ * (without flushing the descriptor queues), and acquiring the rtnl_lock */ ++void efx_suspend(struct efx_nic *efx) ++{ ++ EFX_LOG(efx, "suspending operations\n"); ++ ++ rtnl_lock(); ++ efx_stop_all(efx); ++} ++ ++void efx_resume(struct efx_nic *efx) ++{ ++ EFX_LOG(efx, "resuming operations\n"); ++ ++ efx_start_all(efx); ++ rtnl_unlock(); ++} + + /* Tears down the entire software state and most of the hardware state + * before reset. */ +@@ -1760,8 +1786,8 @@ static int efx_reset(struct efx_nic *efx + enum reset_type method = efx->reset_pending; + int rc = 0; + +- /* Serialise with kernel interfaces */ + rtnl_lock(); ++ efx_dl_reset_suspend(efx); + + /* If we're not RUNNING then don't reset. Leave the reset_pending + * flag set so that efx_pci_probe_main will be retried */ +@@ -1807,6 +1833,7 @@ out_disable: + } + + out_unlock: ++ efx_dl_reset_resume(efx, 1); + rtnl_unlock(); + return rc; + } +@@ -1951,6 +1978,9 @@ static int efx_init_struct(struct efx_ni + efx->mac_op = &efx_dummy_mac_operations; + efx->phy_op = &efx_dummy_phy_operations; + efx->mdio.dev = net_dev; ++ INIT_LIST_HEAD(&efx->dl_node); ++ INIT_LIST_HEAD(&efx->dl_device_list); ++ efx->dl_cb = efx_default_callbacks; + INIT_WORK(&efx->phy_work, efx_phy_work); + INIT_WORK(&efx->mac_work, efx_mac_work); + atomic_set(&efx->netif_stop_count, 1); +@@ -2054,6 +2084,7 @@ static void efx_pci_remove(struct pci_de + efx = pci_get_drvdata(pci_dev); + if (!efx) + return; ++ efx_dl_unregister_nic(efx); + + /* Mark the NIC as fini, then stop the interface */ + rtnl_lock(); +@@ -2230,9 +2261,16 @@ static int __devinit efx_pci_probe(struc + if (rc) + goto fail5; + ++ /* Register with driverlink layer */ ++ rc = efx_dl_register_nic(efx); ++ if (rc) ++ goto fail6; ++ + EFX_LOG(efx, "initialisation successful\n"); + return 0; + ++ fail6: ++ efx_unregister_netdev(efx); + fail5: + efx_pci_remove_main(efx); + fail4: +--- head-2009-11-06.orig/drivers/net/sfc/falcon.c 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/falcon.c 2009-07-28 10:04:25.000000000 +0200 +@@ -36,14 +36,14 @@ + + /** + * struct falcon_nic_data - Falcon NIC state +- * @next_buffer_table: First available buffer table id ++ * @resources: Resource information for driverlink client + * @pci_dev2: The secondary PCI device if present + * @i2c_data: Operations and state for I2C bit-bashing algorithm + * @int_error_count: Number of internal errors seen recently + * @int_error_expire: Time at which error count will be expired + */ + struct falcon_nic_data { +- unsigned next_buffer_table; ++ struct efx_dl_falcon_resources resources; + struct pci_dev *pci_dev2; + struct i2c_algo_bit_data i2c_data; + +@@ -336,8 +336,8 @@ static int falcon_alloc_special_buffer(s + memset(buffer->addr, 0xff, len); + + /* Select new buffer ID */ +- buffer->index = nic_data->next_buffer_table; +- nic_data->next_buffer_table += buffer->entries; ++ buffer->index = nic_data->resources.buffer_table_min; ++ nic_data->resources.buffer_table_min += buffer->entries; + + EFX_LOG(efx, "allocating special buffers %d-%d at %llx+%x " + "(virt %p phys %llx)\n", buffer->index, +@@ -960,10 +960,12 @@ static void falcon_handle_driver_event(s + case TX_DESCQ_FLS_DONE_EV_DECODE: + EFX_TRACE(efx, "channel %d TXQ %d flushed\n", + channel->channel, ev_sub_data); ++ EFX_DL_CALLBACK(efx, event, event); + break; + case RX_DESCQ_FLS_DONE_EV_DECODE: + EFX_TRACE(efx, "channel %d RXQ %d flushed\n", + channel->channel, ev_sub_data); ++ EFX_DL_CALLBACK(efx, event, event); + break; + case EVQ_INIT_DONE_EV_DECODE: + EFX_LOG(efx, "channel %d EVQ %d initialised\n", +@@ -972,14 +974,17 @@ static void falcon_handle_driver_event(s + case SRM_UPD_DONE_EV_DECODE: + EFX_TRACE(efx, "channel %d SRAM update done\n", + channel->channel); ++ EFX_DL_CALLBACK(efx, event, event); + break; + case WAKE_UP_EV_DECODE: + EFX_TRACE(efx, "channel %d RXQ %d wakeup event\n", + channel->channel, ev_sub_data); ++ EFX_DL_CALLBACK(efx, event, event); + break; + case TIMER_EV_DECODE: + EFX_TRACE(efx, "channel %d RX queue %d timer expired\n", + channel->channel, ev_sub_data); ++ EFX_DL_CALLBACK(efx, event, event); + break; + case RX_RECOVERY_EV_DECODE: + EFX_ERR(efx, "channel %d seen DRIVER RX_RESET event. " +@@ -1004,6 +1009,7 @@ static void falcon_handle_driver_event(s + EFX_TRACE(efx, "channel %d unknown driver event code %d " + "data %04x\n", channel->channel, ev_sub_code, + ev_sub_data); ++ EFX_DL_CALLBACK(efx, event, event); + break; + } + } +@@ -2744,6 +2750,59 @@ static int falcon_probe_nvconfig(struct + return rc; + } + ++/* Looks at available SRAM resources and silicon revision, and works out ++ * how many queues we can support, and where things like descriptor caches ++ * should live. */ ++static int falcon_dimension_resources(struct efx_nic *efx) ++{ ++ unsigned internal_dcs_entries; ++ struct falcon_nic_data *nic_data = efx->nic_data; ++ struct efx_dl_falcon_resources *res = &nic_data->resources; ++ ++ /* Fill out the driverlink resource list */ ++ res->hdr.type = EFX_DL_FALCON_RESOURCES; ++ res->biu_lock = &efx->biu_lock; ++ efx->dl_info = &res->hdr; ++ ++ /* NB. The minimum values get increased as this driver initialises ++ * its resources, so this should prevent any overlap. ++ */ ++ switch (falcon_rev(efx)) { ++ case FALCON_REV_A1: ++ res->rxq_min = 16; ++ res->txq_min = 16; ++ res->evq_int_min = 4; ++ res->evq_int_lim = 5; ++ res->evq_timer_min = 5; ++ res->evq_timer_lim = 4096; ++ internal_dcs_entries = 8192; ++ break; ++ case FALCON_REV_B0: ++ default: ++ res->rxq_min = 0; ++ res->txq_min = 0; ++ res->evq_int_min = 0; ++ res->evq_int_lim = 64; ++ res->evq_timer_min = 64; ++ res->evq_timer_lim = 4096; ++ internal_dcs_entries = 4096; ++ break; ++ } ++ ++ /* Internal SRAM only for now */ ++ res->rxq_lim = internal_dcs_entries / RX_DC_ENTRIES; ++ res->txq_lim = internal_dcs_entries / TX_DC_ENTRIES; ++ res->buffer_table_lim = 8192; ++ ++ if (FALCON_IS_DUAL_FUNC(efx)) ++ res->flags |= EFX_DL_FALCON_DUAL_FUNC; ++ ++ if (EFX_INT_MODE_USE_MSI(efx)) ++ res->flags |= EFX_DL_FALCON_USE_MSI; ++ ++ return 0; ++} ++ + /* Probe the NIC variant (revision, ASIC vs FPGA, function count, port + * count, port speed). Set workaround and feature flags accordingly. + */ +@@ -2771,9 +2830,11 @@ static int falcon_probe_nic_variant(stru + EFX_ERR(efx, "Falcon rev A1 PCI-X not supported\n"); + return -ENODEV; + } ++ efx->silicon_rev = "falcon/a1"; + break; + + case FALCON_REV_B0: ++ efx->silicon_rev = "falcon/b0"; + break; + + default: +@@ -2883,6 +2944,10 @@ int falcon_probe_nic(struct efx_nic *efx + if (rc) + goto fail5; + ++ rc = falcon_dimension_resources(efx); ++ if (rc) ++ goto fail6; ++ + /* Initialise I2C adapter */ + efx->i2c_adap.owner = THIS_MODULE; + nic_data->i2c_data = falcon_i2c_bit_operations; +@@ -2892,10 +2957,12 @@ int falcon_probe_nic(struct efx_nic *efx + strlcpy(efx->i2c_adap.name, "SFC4000 GPIO", sizeof(efx->i2c_adap.name)); + rc = i2c_bit_add_bus(&efx->i2c_adap); + if (rc) +- goto fail5; ++ goto fail6; + + return 0; + ++ fail6: ++ efx->dl_info = NULL; + fail5: + falcon_remove_spi_devices(efx); + falcon_free_buffer(efx, &efx->irq_status); +@@ -3083,6 +3150,7 @@ void falcon_remove_nic(struct efx_nic *e + /* Tear down the private nic state */ + kfree(efx->nic_data); + efx->nic_data = NULL; ++ efx->dl_info = NULL; + } + + void falcon_update_nic_stats(struct efx_nic *efx) +--- head-2009-11-06.orig/drivers/net/sfc/net_driver.h 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/net_driver.h 2009-07-28 10:04:25.000000000 +0200 +@@ -29,6 +29,8 @@ + + #include "enum.h" + #include "bitfield.h" ++#include "driverlink_api.h" ++#include "driverlink.h" + + /************************************************************************** + * +@@ -754,6 +756,12 @@ union efx_multicast_hash { + * @loopback_mode: Loopback status + * @loopback_modes: Supported loopback mode bitmask + * @loopback_selftest: Offline self-test private state ++ * @silicon_rev: Silicon revision description for driverlink ++ * @dl_info: Linked list of hardware parameters exposed through driverlink ++ * @dl_node: Driverlink port list ++ * @dl_device_list: Driverlink device list ++ * @dl_cb: Driverlink callbacks table ++ * @dl_cb_dev: Driverlink callback owner devices + * + * The @priv field of the corresponding &struct net_device points to + * this. +@@ -844,6 +852,13 @@ struct efx_nic { + unsigned int loopback_modes; + + void *loopback_selftest; ++ ++ const char *silicon_rev; ++ struct efx_dl_device_info *dl_info; ++ struct list_head dl_node; ++ struct list_head dl_device_list; ++ struct efx_dl_callbacks dl_cb; ++ struct efx_dl_cb_devices dl_cb_dev; + }; + + static inline int efx_dev_registered(struct efx_nic *efx) +--- head-2009-11-06.orig/drivers/net/sfc/rx.c 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/rx.c 2009-11-06 10:32:03.000000000 +0100 +@@ -447,7 +447,21 @@ static void efx_rx_packet_lro(struct efx + struct efx_rx_buffer *rx_buf, + bool checksummed) + { ++ struct efx_nic *efx = channel->efx; + struct napi_struct *napi = &channel->napi_str; ++ enum efx_veto veto; ++ ++ /* It would be faster if we had access to packets at the ++ * other side of generic LRO. Unfortunately, there isn't ++ * an obvious interface to this, so veto packets before LRO */ ++ veto = EFX_DL_CALLBACK(efx, rx_packet, rx_buf->data, rx_buf->len); ++ if (unlikely(veto)) { ++ EFX_TRACE(efx, "LRO RX vetoed by driverlink %s driver\n", ++ efx->dl_cb_dev.rx_packet->driver->name); ++ /* Free the buffer now */ ++ efx_free_rx_buffer(efx, rx_buf); ++ return; ++ } + + /* Pass the skb/page into the LRO engine */ + if (rx_buf->page) { +@@ -550,6 +564,7 @@ void __efx_rx_packet(struct efx_channel + struct efx_rx_buffer *rx_buf, bool checksummed) + { + struct efx_nic *efx = channel->efx; ++ enum efx_veto veto; + struct sk_buff *skb; + + /* If we're in loopback test, then pass the packet directly to the +@@ -561,6 +576,16 @@ void __efx_rx_packet(struct efx_channel + goto done; + } + ++ /* Allow callback to veto the packet */ ++ veto = EFX_DL_CALLBACK(efx, rx_packet, rx_buf->data, rx_buf->len); ++ if (unlikely(veto)) { ++ EFX_LOG(efx, "RX vetoed by driverlink %s driver\n", ++ efx->dl_cb_dev.rx_packet->driver->name); ++ /* Free the buffer now */ ++ efx_free_rx_buffer(efx, rx_buf); ++ goto done; ++ } ++ + if (rx_buf->skb) { + prefetch(skb_shinfo(rx_buf->skb)); + +--- head-2009-11-06.orig/drivers/net/sfc/tx.c 2009-11-06 10:29:51.000000000 +0100 ++++ head-2009-11-06/drivers/net/sfc/tx.c 2009-10-12 13:40:32.000000000 +0200 +@@ -374,6 +374,7 @@ netdev_tx_t efx_hard_start_xmit(struct s + { + struct efx_nic *efx = netdev_priv(net_dev); + struct efx_tx_queue *tx_queue; ++ enum efx_veto veto; + + if (unlikely(efx->port_inhibited)) + return NETDEV_TX_BUSY; +@@ -383,6 +384,17 @@ netdev_tx_t efx_hard_start_xmit(struct s + else + tx_queue = &efx->tx_queue[EFX_TX_QUEUE_NO_CSUM]; + ++ /* See if driverlink wants to veto the packet. */ ++ veto = EFX_DL_CALLBACK(efx, tx_packet, skb); ++ if (unlikely(veto)) { ++ EFX_TRACE(efx, "TX queue %d packet vetoed by " ++ "driverlink %s driver\n", tx_queue->queue, ++ efx->dl_cb_dev.tx_packet->driver->name); ++ /* Free the skb; nothing else will do it */ ++ dev_kfree_skb_any(skb); ++ return NETDEV_TX_OK; ++ } ++ + return efx_xmit(efx, tx_queue, skb); + } + --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-vmalloc_32 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-vmalloc_32 @@ -0,0 +1,66 @@ +From: jbeulich@novell.com +Subject: guarantee 32-bit (bus-)addressability of vmalloc_32() output +Patch-mainline: non-Xen part in 2.6.33 +References: bnc#548010, bnc#552492 + +--- head-2009-12-16.orig/mm/vmalloc.c 2009-12-16 11:52:01.000000000 +0100 ++++ head-2009-12-16/mm/vmalloc.c 2009-12-16 12:15:18.000000000 +0100 +@@ -1416,6 +1416,14 @@ static void *__vmalloc_area_node(struct + { + struct page **pages; + unsigned int nr_pages, array_size, i; ++ gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO; ++#ifdef CONFIG_XEN ++ gfp_t dma_mask = gfp_mask & (__GFP_DMA | __GFP_DMA32); ++ ++ BUILD_BUG_ON((__GFP_DMA | __GFP_DMA32) != (__GFP_DMA + __GFP_DMA32)); ++ if (dma_mask == (__GFP_DMA | __GFP_DMA32)) ++ gfp_mask &= ~(__GFP_DMA | __GFP_DMA32); ++#endif + + nr_pages = (area->size - PAGE_SIZE) >> PAGE_SHIFT; + array_size = (nr_pages * sizeof(struct page *)); +@@ -1423,13 +1431,12 @@ static void *__vmalloc_area_node(struct + area->nr_pages = nr_pages; + /* Please note that the recursion is strictly bounded. */ + if (array_size > PAGE_SIZE) { +- pages = __vmalloc_node(array_size, 1, gfp_mask | __GFP_ZERO, +- PAGE_KERNEL, node, caller); ++ pages = __vmalloc_node(array_size, 1, ++ nested_gfp | __GFP_HIGHMEM, ++ PAGE_KERNEL, node, caller); + area->flags |= VM_VPAGES; + } else { +- pages = kmalloc_node(array_size, +- (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO, +- node); ++ pages = kmalloc_node(array_size, nested_gfp, node); + } + area->pages = pages; + area->caller = caller; +@@ -1453,6 +1460,16 @@ static void *__vmalloc_area_node(struct + goto fail; + } + area->pages[i] = page; ++#ifdef CONFIG_XEN ++ if (dma_mask) { ++ if (xen_limit_pages_to_max_mfn(page, 0, 32)) { ++ area->nr_pages = i + 1; ++ goto fail; ++ } ++ if (gfp_mask & __GFP_ZERO) ++ clear_highpage(page); ++ } ++#endif + } + + if (map_vm_area(area, prot, &pages)) +@@ -1612,6 +1629,8 @@ void *vmalloc_exec(unsigned long size) + #define GFP_VMALLOC32 GFP_DMA32 | GFP_KERNEL + #elif defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA) + #define GFP_VMALLOC32 GFP_DMA | GFP_KERNEL ++#elif defined(CONFIG_XEN) ++#define GFP_VMALLOC32 __GFP_DMA | __GFP_DMA32 | GFP_KERNEL + #else + #define GFP_VMALLOC32 GFP_KERNEL + #endif --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-virq-per-cpu-irq +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-virq-per-cpu-irq @@ -0,0 +1,649 @@ +From: jbeulich@novell.com +Subject: fold per-CPU VIRQs onto a single IRQ each +Patch-mainline: obsolete + +--- head-2010-01-07.orig/arch/x86/kernel/time-xen.c 2009-11-23 10:48:29.000000000 +0100 ++++ head-2010-01-07/arch/x86/kernel/time-xen.c 2009-11-23 10:49:09.000000000 +0100 +@@ -688,19 +688,17 @@ int xen_update_persistent_clock(void) + } + + /* Dynamically-mapped IRQ. */ +-DEFINE_PER_CPU(int, timer_irq); ++static int __read_mostly timer_irq = -1; ++static struct irqaction timer_action = { ++ .handler = timer_interrupt, ++ .flags = IRQF_DISABLED|IRQF_TIMER, ++ .name = "timer" ++}; + + static void __init setup_cpu0_timer_irq(void) + { +- per_cpu(timer_irq, 0) = +- bind_virq_to_irqhandler( +- VIRQ_TIMER, +- 0, +- timer_interrupt, +- IRQF_DISABLED|IRQF_TIMER|IRQF_NOBALANCING, +- "timer0", +- NULL); +- BUG_ON(per_cpu(timer_irq, 0) < 0); ++ timer_irq = bind_virq_to_irqaction(VIRQ_TIMER, 0, &timer_action); ++ BUG_ON(timer_irq < 0); + } + + void __init time_init(void) +@@ -828,8 +826,6 @@ void xen_halt(void) + EXPORT_SYMBOL(xen_halt); + + #ifdef CONFIG_SMP +-static char timer_name[NR_CPUS][15]; +- + int __cpuinit local_setup_timer(unsigned int cpu) + { + int seq, irq; +@@ -855,16 +851,10 @@ int __cpuinit local_setup_timer(unsigned + init_missing_ticks_accounting(cpu); + } while (read_seqretry(&xtime_lock, seq)); + +- sprintf(timer_name[cpu], "timer%u", cpu); +- irq = bind_virq_to_irqhandler(VIRQ_TIMER, +- cpu, +- timer_interrupt, +- IRQF_DISABLED|IRQF_TIMER|IRQF_NOBALANCING, +- timer_name[cpu], +- NULL); ++ irq = bind_virq_to_irqaction(VIRQ_TIMER, cpu, &timer_action); + if (irq < 0) + return irq; +- per_cpu(timer_irq, cpu) = irq; ++ BUG_ON(timer_irq != irq); + + return 0; + } +@@ -872,7 +862,7 @@ int __cpuinit local_setup_timer(unsigned + void __cpuinit local_teardown_timer(unsigned int cpu) + { + BUG_ON(cpu == 0); +- unbind_from_irqhandler(per_cpu(timer_irq, cpu), NULL); ++ unbind_from_per_cpu_irq(timer_irq, cpu, &timer_action); + } + #endif + +--- head-2010-01-07.orig/drivers/xen/core/evtchn.c 2009-11-06 11:10:20.000000000 +0100 ++++ head-2010-01-07/drivers/xen/core/evtchn.c 2009-11-06 11:10:22.000000000 +0100 +@@ -58,6 +58,23 @@ static DEFINE_SPINLOCK(irq_mapping_updat + static int evtchn_to_irq[NR_EVENT_CHANNELS] = { + [0 ... NR_EVENT_CHANNELS-1] = -1 }; + ++#if defined(CONFIG_SMP) && defined(CONFIG_X86) ++static struct per_cpu_irqaction { ++ struct irqaction action; /* must be first */ ++ struct per_cpu_irqaction *next; ++ cpumask_t cpus; ++} *virq_actions[NR_VIRQS]; ++/* IRQ <-> VIRQ mapping. */ ++static DECLARE_BITMAP(virq_per_cpu, NR_VIRQS) __read_mostly; ++static DEFINE_PER_CPU(int[NR_VIRQS], virq_to_evtchn); ++#define BUG_IF_VIRQ_PER_CPU(irq) \ ++ BUG_ON(type_from_irq(irq) == IRQT_VIRQ \ ++ && test_bit(index_from_irq(irq), virq_per_cpu)) ++#else ++#define BUG_IF_VIRQ_PER_CPU(irq) ((void)(irq)) ++#define PER_CPU_VIRQ_IRQ ++#endif ++ + /* IRQ <-> IPI mapping. */ + #ifndef NR_IPIS + #define NR_IPIS 1 +@@ -132,15 +149,6 @@ static inline u32 mk_irq_info(u32 type, + * Accessors for packed IRQ information. + */ + +-#ifdef PER_CPU_IPI_IRQ +-static inline unsigned int evtchn_from_irq(int irq) +-{ +- const struct irq_cfg *cfg = irq_cfg(irq); +- +- return cfg ? cfg->info & ((1U << _EVTCHN_BITS) - 1) : 0; +-} +-#endif +- + static inline unsigned int index_from_irq(int irq) + { + const struct irq_cfg *cfg = irq_cfg(irq); +@@ -156,24 +164,39 @@ static inline unsigned int type_from_irq + return cfg ? cfg->info >> (32 - _IRQT_BITS) : IRQT_UNBOUND; + } + +-#ifndef PER_CPU_IPI_IRQ + static inline unsigned int evtchn_from_per_cpu_irq(unsigned int irq, + unsigned int cpu) + { +- BUG_ON(type_from_irq(irq) != IRQT_IPI); +- return per_cpu(ipi_to_evtchn, cpu)[index_from_irq(irq)]; ++ switch (type_from_irq(irq)) { ++#ifndef PER_CPU_VIRQ_IRQ ++ case IRQT_VIRQ: ++ return per_cpu(virq_to_evtchn, cpu)[index_from_irq(irq)]; ++#endif ++#ifndef PER_CPU_IPI_IRQ ++ case IRQT_IPI: ++ return per_cpu(ipi_to_evtchn, cpu)[index_from_irq(irq)]; ++#endif ++ } ++ BUG(); ++ return 0; + } + + static inline unsigned int evtchn_from_irq(unsigned int irq) + { +- if (type_from_irq(irq) != IRQT_IPI) { +- const struct irq_cfg *cfg = irq_cfg(irq); ++ const struct irq_cfg *cfg; + +- return cfg ? cfg->info & ((1U << _EVTCHN_BITS) - 1) : 0; ++ switch (type_from_irq(irq)) { ++#ifndef PER_CPU_VIRQ_IRQ ++ case IRQT_VIRQ: ++#endif ++#ifndef PER_CPU_IPI_IRQ ++ case IRQT_IPI: ++#endif ++ return evtchn_from_per_cpu_irq(irq, smp_processor_id()); + } +- return evtchn_from_per_cpu_irq(irq, smp_processor_id()); ++ cfg = irq_cfg(irq); ++ return cfg ? cfg->info & ((1U << _EVTCHN_BITS) - 1) : 0; + } +-#endif + + /* IRQ <-> VIRQ mapping. */ + DEFINE_PER_CPU(int[NR_VIRQS], virq_to_irq) = {[0 ... NR_VIRQS-1] = -1}; +@@ -510,6 +533,14 @@ static int bind_virq_to_irq(unsigned int + evtchn = bind_virq.port; + + evtchn_to_irq[evtchn] = irq; ++#ifndef PER_CPU_VIRQ_IRQ ++ { ++ unsigned int cpu; ++ ++ for_each_possible_cpu(cpu) ++ per_cpu(virq_to_evtchn, cpu)[virq] = evtchn; ++ } ++#endif + irq_cfg(irq)->info = mk_irq_info(IRQT_VIRQ, virq, evtchn); + + per_cpu(virq_to_irq, cpu)[virq] = irq; +@@ -564,7 +595,9 @@ static void unbind_from_irq(unsigned int + unsigned int cpu; + int evtchn = evtchn_from_irq(irq); + ++ BUG_IF_VIRQ_PER_CPU(irq); + BUG_IF_IPI(irq); ++ + spin_lock(&irq_mapping_update_lock); + + if (!--irq_cfg(irq)->bindcount && VALID_EVTCHN(evtchn)) { +@@ -577,6 +610,11 @@ static void unbind_from_irq(unsigned int + case IRQT_VIRQ: + per_cpu(virq_to_irq, cpu_from_evtchn(evtchn)) + [index_from_irq(irq)] = -1; ++#ifndef PER_CPU_VIRQ_IRQ ++ for_each_possible_cpu(cpu) ++ per_cpu(virq_to_evtchn, cpu) ++ [index_from_irq(irq)] = 0; ++#endif + break; + #if defined(CONFIG_SMP) && defined(PER_CPU_IPI_IRQ) + case IRQT_IPI: +@@ -606,11 +644,13 @@ static void unbind_from_irq(unsigned int + spin_unlock(&irq_mapping_update_lock); + } + +-#if defined(CONFIG_SMP) && !defined(PER_CPU_IPI_IRQ) +-void unbind_from_per_cpu_irq(unsigned int irq, unsigned int cpu) ++#if defined(CONFIG_SMP) && (!defined(PER_CPU_IPI_IRQ) || !defined(PER_CPU_VIRQ_IRQ)) ++void unbind_from_per_cpu_irq(unsigned int irq, unsigned int cpu, ++ struct irqaction *action) + { + struct evtchn_close close; + int evtchn = evtchn_from_per_cpu_irq(irq, cpu); ++ struct irqaction *free_action = NULL; + + spin_lock(&irq_mapping_update_lock); + +@@ -621,6 +661,32 @@ void unbind_from_per_cpu_irq(unsigned in + + BUG_ON(irq_cfg(irq)->bindcount <= 1); + irq_cfg(irq)->bindcount--; ++ ++#ifndef PER_CPU_VIRQ_IRQ ++ if (type_from_irq(irq) == IRQT_VIRQ) { ++ unsigned int virq = index_from_irq(irq); ++ struct per_cpu_irqaction *cur, *prev = NULL; ++ ++ cur = virq_actions[virq]; ++ while (cur) { ++ if (cur->action.dev_id == action) { ++ cpu_clear(cpu, cur->cpus); ++ if (cpus_empty(cur->cpus)) { ++ if (prev) ++ prev->next = cur->next; ++ else ++ virq_actions[virq] = cur->next; ++ free_action = action; ++ } ++ } else if (cpu_isset(cpu, cur->cpus)) ++ evtchn = 0; ++ cur = (prev = cur)->next; ++ } ++ if (!VALID_EVTCHN(evtchn)) ++ goto done; ++ } ++#endif ++ + cpumask_clear_cpu(cpu, desc->affinity); + + close.port = evtchn; +@@ -628,9 +694,16 @@ void unbind_from_per_cpu_irq(unsigned in + BUG(); + + switch (type_from_irq(irq)) { ++#ifndef PER_CPU_VIRQ_IRQ ++ case IRQT_VIRQ: ++ per_cpu(virq_to_evtchn, cpu)[index_from_irq(irq)] = 0; ++ break; ++#endif ++#ifndef PER_CPU_IPI_IRQ + case IRQT_IPI: + per_cpu(ipi_to_evtchn, cpu)[index_from_irq(irq)] = 0; + break; ++#endif + default: + BUG(); + break; +@@ -642,9 +715,16 @@ void unbind_from_per_cpu_irq(unsigned in + evtchn_to_irq[evtchn] = -1; + } + ++#ifndef PER_CPU_VIRQ_IRQ ++done: ++#endif + spin_unlock(&irq_mapping_update_lock); ++ ++ if (free_action) ++ free_irq(irq, free_action); + } +-#endif /* CONFIG_SMP && !PER_CPU_IPI_IRQ */ ++EXPORT_SYMBOL_GPL(unbind_from_per_cpu_irq); ++#endif /* CONFIG_SMP && (!PER_CPU_IPI_IRQ || !PER_CPU_VIRQ_IRQ) */ + + int bind_caller_port_to_irqhandler( + unsigned int caller_port, +@@ -726,6 +806,8 @@ int bind_virq_to_irqhandler( + { + int irq, retval; + ++ BUG_IF_VIRQ_PER_CPU(virq); ++ + irq = bind_virq_to_irq(virq, cpu); + if (irq < 0) + return irq; +@@ -741,6 +823,108 @@ int bind_virq_to_irqhandler( + EXPORT_SYMBOL_GPL(bind_virq_to_irqhandler); + + #ifdef CONFIG_SMP ++#ifndef PER_CPU_VIRQ_IRQ ++int bind_virq_to_irqaction( ++ unsigned int virq, ++ unsigned int cpu, ++ struct irqaction *action) ++{ ++ struct evtchn_bind_virq bind_virq; ++ int evtchn, irq, retval = 0; ++ struct per_cpu_irqaction *cur = NULL, *new; ++ ++ BUG_ON(!test_bit(virq, virq_per_cpu)); ++ ++ if (action->dev_id) ++ return -EINVAL; ++ ++ new = kzalloc(sizeof(*new), GFP_ATOMIC); ++ if (new) { ++ new->action = *action; ++ new->action.dev_id = action; ++ } ++ ++ spin_lock(&irq_mapping_update_lock); ++ ++ for (cur = virq_actions[virq]; cur; cur = cur->next) ++ if (cur->action.dev_id == action) ++ break; ++ if (!cur) { ++ if (!new) { ++ spin_unlock(&irq_mapping_update_lock); ++ return -ENOMEM; ++ } ++ new->next = virq_actions[virq]; ++ virq_actions[virq] = cur = new; ++ retval = 1; ++ } ++ cpu_set(cpu, cur->cpus); ++ action = &cur->action; ++ ++ if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) { ++ unsigned int nr; ++ ++ BUG_ON(!retval); ++ ++ if ((irq = find_unbound_irq(cpu, true)) < 0) { ++ if (cur) ++ virq_actions[virq] = cur->next; ++ spin_unlock(&irq_mapping_update_lock); ++ if (cur != new) ++ kfree(new); ++ return irq; ++ } ++ ++ /* Extra reference so count will never drop to zero. */ ++ irq_cfg(irq)->bindcount++; ++ ++ for_each_possible_cpu(nr) ++ per_cpu(virq_to_irq, nr)[virq] = irq; ++ irq_cfg(irq)->info = mk_irq_info(IRQT_VIRQ, virq, 0); ++ } ++ ++ evtchn = per_cpu(virq_to_evtchn, cpu)[virq]; ++ if (!VALID_EVTCHN(evtchn)) { ++ bind_virq.virq = virq; ++ bind_virq.vcpu = cpu; ++ if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, ++ &bind_virq) != 0) ++ BUG(); ++ evtchn = bind_virq.port; ++ evtchn_to_irq[evtchn] = irq; ++ per_cpu(virq_to_evtchn, cpu)[virq] = evtchn; ++ ++ bind_evtchn_to_cpu(evtchn, cpu); ++ } ++ ++ irq_cfg(irq)->bindcount++; ++ ++ spin_unlock(&irq_mapping_update_lock); ++ ++ if (cur != new) ++ kfree(new); ++ ++ if (retval == 0) { ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ unmask_evtchn(evtchn); ++ local_irq_restore(flags); ++ } else { ++ action->flags |= IRQF_PERCPU; ++ retval = setup_irq(irq, action); ++ if (retval) { ++ unbind_from_per_cpu_irq(irq, cpu, cur->action.dev_id); ++ BUG_ON(retval > 0); ++ irq = retval; ++ } ++ } ++ ++ return irq; ++} ++EXPORT_SYMBOL_GPL(bind_virq_to_irqaction); ++#endif ++ + #ifdef PER_CPU_IPI_IRQ + int bind_ipi_to_irqhandler( + unsigned int ipi, +@@ -820,7 +1004,7 @@ int __cpuinit bind_ipi_to_irqaction( + action->flags |= IRQF_PERCPU | IRQF_NO_SUSPEND; + retval = setup_irq(irq, action); + if (retval) { +- unbind_from_per_cpu_irq(irq, cpu); ++ unbind_from_per_cpu_irq(irq, cpu, NULL); + BUG_ON(retval > 0); + irq = retval; + } +@@ -855,7 +1039,9 @@ static void rebind_irq_to_cpu(unsigned i + { + int evtchn = evtchn_from_irq(irq); + ++ BUG_IF_VIRQ_PER_CPU(irq); + BUG_IF_IPI(irq); ++ + if (VALID_EVTCHN(evtchn)) + rebind_evtchn_to_cpu(evtchn, tcpu); + } +@@ -1135,7 +1321,9 @@ void notify_remote_via_irq(int irq) + { + int evtchn = evtchn_from_irq(irq); + ++ BUG_ON(type_from_irq(irq) == IRQT_VIRQ); + BUG_IF_IPI(irq); ++ + if (VALID_EVTCHN(evtchn)) + notify_remote_via_evtchn(evtchn); + } +@@ -1143,6 +1331,7 @@ EXPORT_SYMBOL_GPL(notify_remote_via_irq) + + int irq_to_evtchn_port(int irq) + { ++ BUG_IF_VIRQ_PER_CPU(irq); + BUG_IF_IPI(irq); + return evtchn_from_irq(irq); + } +@@ -1237,6 +1426,12 @@ static void restore_cpu_virqs(unsigned i + if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) + continue; + ++#ifndef PER_CPU_VIRQ_IRQ ++ if (test_bit(virq, virq_per_cpu) ++ && !VALID_EVTCHN(per_cpu(virq_to_evtchn, cpu)[virq])) ++ continue; ++#endif ++ + BUG_ON(irq_cfg(irq)->info != mk_irq_info(IRQT_VIRQ, virq, 0)); + + /* Get a new binding from Xen. */ +@@ -1249,7 +1444,20 @@ static void restore_cpu_virqs(unsigned i + + /* Record the new mapping. */ + evtchn_to_irq[evtchn] = irq; ++#ifdef PER_CPU_VIRQ_IRQ + irq_cfg(irq)->info = mk_irq_info(IRQT_VIRQ, virq, evtchn); ++#else ++ if (test_bit(virq, virq_per_cpu)) ++ per_cpu(virq_to_evtchn, cpu)[virq] = evtchn; ++ else { ++ unsigned int cpu; ++ ++ irq_cfg(irq)->info = mk_irq_info(IRQT_VIRQ, virq, ++ evtchn); ++ for_each_possible_cpu(cpu) ++ per_cpu(virq_to_evtchn, cpu)[virq] = evtchn; ++ } ++#endif + bind_evtchn_to_cpu(evtchn, cpu); + + /* Ready for use. */ +@@ -1305,7 +1513,11 @@ static int evtchn_resume(struct sys_devi + + /* Avoid doing anything in the 'suspend cancelled' case. */ + status.dom = DOMID_SELF; ++#ifdef PER_CPU_VIRQ_IRQ + status.port = evtchn_from_irq(percpu_read(virq_to_irq[VIRQ_TIMER])); ++#else ++ status.port = percpu_read(virq_to_evtchn[VIRQ_TIMER]); ++#endif + if (HYPERVISOR_event_channel_op(EVTCHNOP_status, &status)) + BUG(); + if (status.status == EVTCHNSTAT_virq +@@ -1534,6 +1746,15 @@ void __init xen_init_IRQ(void) + unsigned int i; + struct physdev_pirq_eoi_gmfn eoi_gmfn; + ++#ifndef PER_CPU_VIRQ_IRQ ++ __set_bit(VIRQ_TIMER, virq_per_cpu); ++ __set_bit(VIRQ_DEBUG, virq_per_cpu); ++ __set_bit(VIRQ_XENOPROF, virq_per_cpu); ++#ifdef CONFIG_IA64 ++ __set_bit(VIRQ_ITC, virq_per_cpu); ++#endif ++#endif ++ + init_evtchn_cpu_bindings(); + + i = get_order(sizeof(unsigned long) * BITS_TO_LONGS(nr_pirqs)); +--- head-2010-01-07.orig/drivers/xen/core/smpboot.c 2009-11-06 11:10:20.000000000 +0100 ++++ head-2010-01-07/drivers/xen/core/smpboot.c 2009-11-06 11:10:22.000000000 +0100 +@@ -168,13 +168,13 @@ static int __cpuinit xen_smp_intr_init(u + fail: + xen_spinlock_cleanup(cpu); + unbind_reboot: +- unbind_from_per_cpu_irq(reboot_irq, cpu); ++ unbind_from_per_cpu_irq(reboot_irq, cpu, NULL); + unbind_call1: +- unbind_from_per_cpu_irq(call1func_irq, cpu); ++ unbind_from_per_cpu_irq(call1func_irq, cpu, NULL); + unbind_call: +- unbind_from_per_cpu_irq(callfunc_irq, cpu); ++ unbind_from_per_cpu_irq(callfunc_irq, cpu, NULL); + unbind_resched: +- unbind_from_per_cpu_irq(resched_irq, cpu); ++ unbind_from_per_cpu_irq(resched_irq, cpu, NULL); + return rc; + } + +@@ -184,10 +184,10 @@ static void __cpuinit xen_smp_intr_exit( + if (cpu != 0) + local_teardown_timer(cpu); + +- unbind_from_per_cpu_irq(resched_irq, cpu); +- unbind_from_per_cpu_irq(callfunc_irq, cpu); +- unbind_from_per_cpu_irq(call1func_irq, cpu); +- unbind_from_per_cpu_irq(reboot_irq, cpu); ++ unbind_from_per_cpu_irq(resched_irq, cpu, NULL); ++ unbind_from_per_cpu_irq(callfunc_irq, cpu, NULL); ++ unbind_from_per_cpu_irq(call1func_irq, cpu, NULL); ++ unbind_from_per_cpu_irq(reboot_irq, cpu, NULL); + xen_spinlock_cleanup(cpu); + } + #endif +--- head-2010-01-07.orig/drivers/xen/core/spinlock.c 2009-11-06 11:10:20.000000000 +0100 ++++ head-2010-01-07/drivers/xen/core/spinlock.c 2009-11-06 11:10:22.000000000 +0100 +@@ -55,7 +55,7 @@ int __cpuinit xen_spinlock_init(unsigned + + void __cpuinit xen_spinlock_cleanup(unsigned int cpu) + { +- unbind_from_per_cpu_irq(spinlock_irq, cpu); ++ unbind_from_per_cpu_irq(spinlock_irq, cpu, NULL); + } + + int xen_spin_wait(raw_spinlock_t *lock, unsigned int token) +--- head-2010-01-07.orig/drivers/xen/netback/netback.c 2009-11-06 10:52:23.000000000 +0100 ++++ head-2010-01-07/drivers/xen/netback/netback.c 2010-01-04 13:31:26.000000000 +0100 +@@ -1619,6 +1619,12 @@ static irqreturn_t netif_be_dbg(int irq, + + return IRQ_HANDLED; + } ++ ++static struct irqaction netif_be_dbg_action = { ++ .handler = netif_be_dbg, ++ .flags = IRQF_SHARED, ++ .name = "net-be-dbg" ++}; + #endif + + static int __init netback_init(void) +@@ -1678,12 +1684,9 @@ static int __init netback_init(void) + netif_xenbus_init(); + + #ifdef NETBE_DEBUG_INTERRUPT +- (void)bind_virq_to_irqhandler(VIRQ_DEBUG, +- 0, +- netif_be_dbg, +- IRQF_SHARED, +- "net-be-dbg", +- &netif_be_dbg); ++ (void)bind_virq_to_irqaction(VIRQ_DEBUG, ++ 0, ++ &netif_be_dbg_action); + #endif + + return 0; +--- head-2010-01-07.orig/drivers/xen/xenoprof/xenoprofile.c 2010-01-07 09:59:32.000000000 +0100 ++++ head-2010-01-07/drivers/xen/xenoprof/xenoprofile.c 2010-01-07 11:04:10.000000000 +0100 +@@ -210,6 +210,11 @@ static irqreturn_t xenoprof_ovf_interrup + return IRQ_HANDLED; + } + ++static struct irqaction ovf_action = { ++ .handler = xenoprof_ovf_interrupt, ++ .flags = IRQF_DISABLED, ++ .name = "xenoprof" ++}; + + static void unbind_virq(void) + { +@@ -217,7 +222,7 @@ static void unbind_virq(void) + + for_each_online_cpu(i) { + if (ovf_irq[i] >= 0) { +- unbind_from_irqhandler(ovf_irq[i], NULL); ++ unbind_from_per_cpu_irq(ovf_irq[i], i, &ovf_action); + ovf_irq[i] = -1; + } + } +@@ -230,12 +235,7 @@ static int bind_virq(void) + int result; + + for_each_online_cpu(i) { +- result = bind_virq_to_irqhandler(VIRQ_XENOPROF, +- i, +- xenoprof_ovf_interrupt, +- IRQF_DISABLED|IRQF_NOBALANCING, +- "xenoprof", +- NULL); ++ result = bind_virq_to_irqaction(VIRQ_XENOPROF, i, &ovf_action); + + if (result < 0) { + unbind_virq(); +--- head-2010-01-07.orig/include/xen/evtchn.h 2009-12-18 10:13:26.000000000 +0100 ++++ head-2010-01-07/include/xen/evtchn.h 2009-12-18 10:13:32.000000000 +0100 +@@ -92,6 +92,17 @@ int bind_virq_to_irqhandler( + unsigned long irqflags, + const char *devname, + void *dev_id); ++#if defined(CONFIG_SMP) && defined(CONFIG_XEN) && defined(CONFIG_X86) ++int bind_virq_to_irqaction( ++ unsigned int virq, ++ unsigned int cpu, ++ struct irqaction *action); ++#else ++#define bind_virq_to_irqaction(virq, cpu, action) \ ++ bind_virq_to_irqhandler(virq, cpu, (action)->handler, \ ++ (action)->flags | IRQF_NOBALANCING, \ ++ (action)->name, action) ++#endif + #if defined(CONFIG_SMP) && !defined(MODULE) + #ifndef CONFIG_X86 + int bind_ipi_to_irqhandler( +@@ -116,9 +127,13 @@ int bind_ipi_to_irqaction( + */ + void unbind_from_irqhandler(unsigned int irq, void *dev_id); + +-#if defined(CONFIG_SMP) && !defined(MODULE) && defined(CONFIG_X86) ++#if defined(CONFIG_SMP) && defined(CONFIG_XEN) && defined(CONFIG_X86) + /* Specialized unbind function for per-CPU IRQs. */ +-void unbind_from_per_cpu_irq(unsigned int irq, unsigned int cpu); ++void unbind_from_per_cpu_irq(unsigned int irq, unsigned int cpu, ++ struct irqaction *); ++#else ++#define unbind_from_per_cpu_irq(irq, cpu, action) \ ++ unbind_from_irqhandler(irq, action) + #endif + + #ifndef CONFIG_XEN --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-fixup-arch-x86 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-fixup-arch-x86 @@ -0,0 +1,67 @@ +Subject: xen3 x86 build fixes. +From: jbeulich@novell.com +Patch-mainline: obsolete + +--- head-2010-01-18.orig/arch/x86/include/asm/topology.h 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/asm/topology.h 2009-10-15 11:04:35.000000000 +0200 +@@ -30,7 +30,7 @@ + # define ENABLE_TOPO_DEFINES + # endif + #else +-# ifdef CONFIG_SMP ++# if defined(CONFIG_SMP) && !defined(CONFIG_XEN) + # define ENABLE_TOPO_DEFINES + # endif + #endif +--- head-2010-01-18.orig/arch/x86/kdb/kdba_bt.c 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/kdb/kdba_bt.c 2009-10-12 15:43:36.000000000 +0200 +@@ -3243,6 +3243,9 @@ bb_usage_mov(const struct bb_operand *sr + bb_is_int_reg(dst->base_rc) && + full_register_dst) { + #ifdef CONFIG_X86_32 ++#ifndef TSS_sysenter_sp0 ++#define TSS_sysenter_sp0 SYSENTER_stack_sp0 ++#endif + /* mov from TSS_sysenter_sp0+offset to esp to fix up the + * sysenter stack, it leaves esp well defined. mov + * TSS_ysenter_sp0+offset(%esp),%esp is followed by up to 5 +--- head-2010-01-18.orig/arch/x86/kernel/cpu/intel_cacheinfo.c 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/intel_cacheinfo.c 2010-01-18 16:16:46.000000000 +0100 +@@ -502,7 +502,7 @@ unsigned int __cpuinit init_intel_cachei + static DEFINE_PER_CPU(struct _cpuid4_info *, cpuid4_info); + #define CPUID4_INFO_IDX(x, y) (&((per_cpu(cpuid4_info, x))[y])) + +-#ifdef CONFIG_SMP ++#if defined(CONFIG_SMP) && !defined(CONFIG_XEN) + static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) + { + struct _cpuid4_info *this_leaf, *sibling_leaf; +--- head-2010-01-18.orig/arch/x86/power/Makefile 2010-01-18 15:20:21.000000000 +0100 ++++ head-2010-01-18/arch/x86/power/Makefile 2009-10-12 15:43:36.000000000 +0200 +@@ -5,3 +5,5 @@ CFLAGS_cpu.o := $(nostackp) + + obj-$(CONFIG_PM_SLEEP) += cpu.o + obj-$(CONFIG_HIBERNATION) += hibernate_$(BITS).o hibernate_asm_$(BITS).o ++ ++disabled-obj-$(CONFIG_XEN) := cpu.o +--- head-2010-01-18.orig/arch/x86/power/cpu.c 2009-12-04 10:44:45.000000000 +0100 ++++ head-2010-01-18/arch/x86/power/cpu.c 2009-10-12 15:43:36.000000000 +0200 +@@ -125,7 +125,6 @@ static void do_fpu_end(void) + + static void fix_processor_context(void) + { +-#ifndef CONFIG_X86_NO_TSS + int cpu = smp_processor_id(); + struct tss_struct *t = &per_cpu(init_tss, cpu); + +@@ -138,10 +137,7 @@ static void fix_processor_context(void) + + #ifdef CONFIG_X86_64 + get_cpu_gdt_table(cpu)[GDT_ENTRY_TSS].type = 9; +-#endif +-#endif + +-#ifdef CONFIG_X86_64 + syscall_init(); /* This sets MSR_*STAR and related */ + #endif + load_TR_desc(); /* This does ltr */ --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-auto-arch-x86_64.diff +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-auto-arch-x86_64.diff @@ -0,0 +1,222 @@ +Subject: xen3 arch-x86_64 +From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 983:3358caa6b3a3) +Patch-mainline: obsolete +Acked-by: jbeulich@novell.com + +--- head-2010-01-04.orig/arch/x86/kernel/asm-offsets_64.c 2010-01-04 12:00:41.000000000 +0100 ++++ head-2010-01-04/arch/x86/kernel/asm-offsets_64.c 2009-12-04 10:44:49.000000000 +0100 +@@ -115,8 +115,10 @@ int main(void) + ENTRY(cr8); + BLANK(); + #undef ENTRY ++#ifndef CONFIG_X86_NO_TSS + DEFINE(TSS_ist, offsetof(struct tss_struct, x86_tss.ist)); + BLANK(); ++#endif + DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx)); + BLANK(); + DEFINE(__NR_syscall_max, sizeof(syscalls) - 1); +--- head-2010-01-04.orig/arch/x86/kernel/machine_kexec_64.c 2009-04-21 10:35:13.000000000 +0200 ++++ head-2010-01-04/arch/x86/kernel/machine_kexec_64.c 2009-12-04 10:44:49.000000000 +0100 +@@ -19,6 +19,119 @@ + #include + #include + ++#ifdef CONFIG_XEN ++ ++/* In the case of Xen, override hypervisor functions to be able to create ++ * a regular identity mapping page table... ++ */ ++ ++#include ++#include ++ ++#define x__pmd(x) ((pmd_t) { (x) } ) ++#define x__pud(x) ((pud_t) { (x) } ) ++#define x__pgd(x) ((pgd_t) { (x) } ) ++ ++#define x_pmd_val(x) ((x).pmd) ++#define x_pud_val(x) ((x).pud) ++#define x_pgd_val(x) ((x).pgd) ++ ++static inline void x_set_pmd(pmd_t *dst, pmd_t val) ++{ ++ x_pmd_val(*dst) = x_pmd_val(val); ++} ++ ++static inline void x_set_pud(pud_t *dst, pud_t val) ++{ ++ x_pud_val(*dst) = phys_to_machine(x_pud_val(val)); ++} ++ ++static inline void x_pud_clear (pud_t *pud) ++{ ++ x_pud_val(*pud) = 0; ++} ++ ++static inline void x_set_pgd(pgd_t *dst, pgd_t val) ++{ ++ x_pgd_val(*dst) = phys_to_machine(x_pgd_val(val)); ++} ++ ++static inline void x_pgd_clear (pgd_t * pgd) ++{ ++ x_pgd_val(*pgd) = 0; ++} ++ ++#define X__PAGE_KERNEL_LARGE_EXEC \ ++ _PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_PSE ++#define X_KERNPG_TABLE _PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY ++ ++#define __ma(x) (pfn_to_mfn(__pa((x)) >> PAGE_SHIFT) << PAGE_SHIFT) ++ ++#if PAGES_NR > KEXEC_XEN_NO_PAGES ++#error PAGES_NR is greater than KEXEC_XEN_NO_PAGES - Xen support will break ++#endif ++ ++#if PA_CONTROL_PAGE != 0 ++#error PA_CONTROL_PAGE is non zero - Xen support will break ++#endif ++ ++void machine_kexec_setup_load_arg(xen_kexec_image_t *xki, struct kimage *image) ++{ ++ void *control_page; ++ void *table_page; ++ ++ memset(xki->page_list, 0, sizeof(xki->page_list)); ++ ++ control_page = page_address(image->control_code_page) + PAGE_SIZE; ++ memcpy(control_page, relocate_kernel, PAGE_SIZE); ++ ++ table_page = page_address(image->control_code_page); ++ ++ xki->page_list[PA_CONTROL_PAGE] = __ma(control_page); ++ xki->page_list[PA_TABLE_PAGE] = __ma(table_page); ++ ++ xki->page_list[PA_PGD] = __ma(kexec_pgd); ++ xki->page_list[PA_PUD_0] = __ma(kexec_pud0); ++ xki->page_list[PA_PUD_1] = __ma(kexec_pud1); ++ xki->page_list[PA_PMD_0] = __ma(kexec_pmd0); ++ xki->page_list[PA_PMD_1] = __ma(kexec_pmd1); ++ xki->page_list[PA_PTE_0] = __ma(kexec_pte0); ++ xki->page_list[PA_PTE_1] = __ma(kexec_pte1); ++} ++ ++int __init machine_kexec_setup_resources(struct resource *hypervisor, ++ struct resource *phys_cpus, ++ int nr_phys_cpus) ++{ ++ int k; ++ ++ /* The per-cpu crash note resources belong to the hypervisor resource */ ++ for (k = 0; k < nr_phys_cpus; k++) ++ request_resource(hypervisor, phys_cpus + k); ++ ++ return 0; ++} ++ ++void machine_kexec_register_resources(struct resource *res) { ; } ++ ++#else /* CONFIG_XEN */ ++ ++#define x__pmd(x) __pmd(x) ++#define x__pud(x) __pud(x) ++#define x__pgd(x) __pgd(x) ++ ++#define x_set_pmd(x, y) set_pmd(x, y) ++#define x_set_pud(x, y) set_pud(x, y) ++#define x_set_pgd(x, y) set_pgd(x, y) ++ ++#define x_pud_clear(x) pud_clear(x) ++#define x_pgd_clear(x) pgd_clear(x) ++ ++#define X__PAGE_KERNEL_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC ++#define X_KERNPG_TABLE _KERNPG_TABLE ++ ++#endif /* CONFIG_XEN */ ++ + static int init_one_level2_page(struct kimage *image, pgd_t *pgd, + unsigned long addr) + { +@@ -61,7 +174,7 @@ static void init_level2_page(pmd_t *leve + addr &= PAGE_MASK; + end_addr = addr + PUD_SIZE; + while (addr < end_addr) { +- set_pmd(level2p++, __pmd(addr | __PAGE_KERNEL_LARGE_EXEC)); ++ x_set_pmd(level2p++, x__pmd(addr | X__PAGE_KERNEL_LARGE_EXEC)); + addr += PMD_SIZE; + } + } +@@ -86,12 +199,12 @@ static int init_level3_page(struct kimag + } + level2p = (pmd_t *)page_address(page); + init_level2_page(level2p, addr); +- set_pud(level3p++, __pud(__pa(level2p) | _KERNPG_TABLE)); ++ x_set_pud(level3p++, x__pud(__pa(level2p) | X_KERNPG_TABLE)); + addr += PUD_SIZE; + } + /* clear the unused entries */ + while (addr < end_addr) { +- pud_clear(level3p++); ++ x_pud_clear(level3p++); + addr += PUD_SIZE; + } + out: +@@ -121,12 +234,12 @@ static int init_level4_page(struct kimag + result = init_level3_page(image, level3p, addr, last_addr); + if (result) + goto out; +- set_pgd(level4p++, __pgd(__pa(level3p) | _KERNPG_TABLE)); ++ x_set_pgd(level4p++, x__pgd(__pa(level3p) | X_KERNPG_TABLE)); + addr += PGDIR_SIZE; + } + /* clear the unused entries */ + while (addr < end_addr) { +- pgd_clear(level4p++); ++ x_pgd_clear(level4p++); + addr += PGDIR_SIZE; + } + out: +@@ -187,8 +300,14 @@ static int init_pgtable(struct kimage *i + { + pgd_t *level4p; + int result; ++ unsigned long x_max_pfn = max_pfn; ++ ++#ifdef CONFIG_XEN ++ x_max_pfn = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL); ++#endif ++ + level4p = (pgd_t *)__va(start_pgtable); +- result = init_level4_page(image, level4p, 0, max_pfn << PAGE_SHIFT); ++ result = init_level4_page(image, level4p, 0, x_max_pfn << PAGE_SHIFT); + if (result) + return result; + /* +@@ -222,6 +341,7 @@ void machine_kexec_cleanup(struct kimage + free_transition_pgtable(image); + } + ++#ifndef CONFIG_XEN + /* + * Do not allocate memory (or fail in any way) in machine_kexec(). + * We are past the point of no return, committed to rebooting now. +@@ -280,6 +400,7 @@ void machine_kexec(struct kimage *image) + + __ftrace_enabled_restore(save_ftrace_enabled); + } ++#endif + + void arch_crash_save_vmcoreinfo(void) + { +--- head-2010-01-04.orig/arch/x86/vdso/Makefile 2010-01-04 12:00:41.000000000 +0100 ++++ head-2010-01-04/arch/x86/vdso/Makefile 2009-12-04 10:44:49.000000000 +0100 +@@ -65,6 +65,8 @@ obj-$(VDSO32-y) += vdso32-syms.lds + vdso32.so-$(VDSO32-y) += int80 + vdso32.so-$(CONFIG_COMPAT) += syscall + vdso32.so-$(VDSO32-y) += sysenter ++xen-vdso32-$(subst 1,$(CONFIG_COMPAT),$(shell expr $(CONFIG_XEN_COMPAT)0 '<' 0x0302000)) += int80 ++vdso32.so-$(CONFIG_XEN) += $(xen-vdso32-y) + + vdso32-images = $(vdso32.so-y:%=vdso32-%.so) + --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/sfc-set-arch +++ linux-ec2-2.6.32/debian.ec2/patches.xen/sfc-set-arch @@ -0,0 +1,38 @@ +From: Kieran Mansley +Subject: set efhw_arch field of device type +References: bnc#489105 +Patch-mainline: n/a + +Acked-by: jbeulich@novell.com + +--- head-2009-04-07.orig/drivers/net/sfc/sfc_resource/ci/efhw/common.h 2009-04-07 14:39:57.000000000 +0200 ++++ head-2009-04-07/drivers/net/sfc/sfc_resource/ci/efhw/common.h 2009-04-07 15:02:05.000000000 +0200 +@@ -41,6 +41,10 @@ + + #include + ++enum efhw_arch { ++ EFHW_ARCH_FALCON, ++}; ++ + typedef uint32_t efhw_buffer_addr_t; + #define EFHW_BUFFER_ADDR_FMT "[ba:%"PRIx32"]" + +--- head-2009-04-07.orig/drivers/net/sfc/sfc_resource/nic.c 2009-04-07 14:39:57.000000000 +0200 ++++ head-2009-04-07/drivers/net/sfc/sfc_resource/nic.c 2009-04-07 15:02:05.000000000 +0200 +@@ -47,6 +47,7 @@ int efhw_device_type_init(struct efhw_de + switch (device_id) { + case 0x0703: + case 0x6703: ++ dt->arch = EFHW_ARCH_FALCON; + dt->variant = 'A'; + switch (class_revision) { + case 0: +@@ -60,6 +61,7 @@ int efhw_device_type_init(struct efhw_de + } + break; + case 0x0710: ++ dt->arch = EFHW_ARCH_FALCON; + dt->variant = 'B'; + switch (class_revision) { + case 2: --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-modular-blktap +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-modular-blktap @@ -0,0 +1,27 @@ +From: ccoffing@novell.com +Subject: Retain backwards-compatible module name with CONFIG_XEN_BLKDEV_TAP=m +Patch-mainline: obsolete + +--- head-2009-05-29.orig/drivers/xen/blktap/Makefile 2007-06-12 13:13:44.000000000 +0200 ++++ head-2009-05-29/drivers/xen/blktap/Makefile 2009-05-29 12:39:04.000000000 +0200 +@@ -1,5 +1,5 @@ + LINUXINCLUDE += -I../xen/include/public/io + +-obj-$(CONFIG_XEN_BLKDEV_TAP) := xenblktap.o ++obj-$(CONFIG_XEN_BLKDEV_TAP) := blktap.o + +-xenblktap-y := xenbus.o interface.o blktap.o ++blktap-y := xenbus.o interface.o blocktap.o +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2009-05-29/drivers/xen/blktap/blocktap.c 2009-05-29 12:39:04.000000000 +0200 +@@ -0,0 +1 @@ ++#include "blktap.c" +--- head-2009-05-29.orig/drivers/xen/blktap2/Makefile 2009-05-29 10:25:53.000000000 +0200 ++++ head-2009-05-29/drivers/xen/blktap2/Makefile 2009-05-29 12:39:04.000000000 +0200 +@@ -1,3 +1,4 @@ +-obj-$(CONFIG_XEN_BLKDEV_TAP2) := blktap.o ++obj-$(CONFIG_XEN_BLKDEV_TAP2) := blktap2.o + +-blktap-objs := control.o ring.o wait_queue.o device.o request.o sysfs.o ++blktap2-y := control.o ring.o wait_queue.o device.o request.o ++blktap2-$(CONFIG_SYSFS) += sysfs.o --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-x86-exit-mmap +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-x86-exit-mmap @@ -0,0 +1,72 @@ +Subject: be more aggressive about de-activating mm-s under destruction +From: jbeulich@novell.com +Patch-mainline: obsolete + +... by not only handling the current task on the CPU arch_exit_mmap() +gets executed on, but also forcing remote CPUs to do so. + +--- head-2009-10-12.orig/arch/x86/mm/pgtable-xen.c 2009-10-13 17:22:09.000000000 +0200 ++++ head-2009-10-12/arch/x86/mm/pgtable-xen.c 2009-10-14 14:19:25.000000000 +0200 +@@ -1,5 +1,6 @@ + #include + #include ++#include + #include + #include + #include +@@ -416,27 +417,44 @@ void arch_dup_mmap(struct mm_struct *old + mm_pin(mm); + } + +-void arch_exit_mmap(struct mm_struct *mm) ++/* ++ * We aggressively remove defunct pgd from cr3. We execute unmap_vmas() *much* ++ * faster this way, as no hypercalls are needed for the page table updates. ++ */ ++static void leave_active_mm(struct task_struct *tsk, struct mm_struct *mm) ++ __releases(tsk->alloc_lock) + { +- struct task_struct *tsk = current; +- +- task_lock(tsk); +- +- /* +- * We aggressively remove defunct pgd from cr3. We execute unmap_vmas() +- * *much* faster this way, as no tlb flushes means bigger wrpt batches. +- */ + if (tsk->active_mm == mm) { + tsk->active_mm = &init_mm; + atomic_inc(&init_mm.mm_count); + + switch_mm(mm, &init_mm, tsk); + +- atomic_dec(&mm->mm_count); +- BUG_ON(atomic_read(&mm->mm_count) == 0); ++ if (atomic_dec_and_test(&mm->mm_count)) ++ BUG(); + } + + task_unlock(tsk); ++} ++ ++static void _leave_active_mm(void *mm) ++{ ++ struct task_struct *tsk = current; ++ ++ if (spin_trylock(&tsk->alloc_lock)) ++ leave_active_mm(tsk, mm); ++} ++ ++void arch_exit_mmap(struct mm_struct *mm) ++{ ++ struct task_struct *tsk = current; ++ ++ task_lock(tsk); ++ leave_active_mm(tsk, mm); ++ ++ preempt_disable(); ++ smp_call_function_many(mm_cpumask(mm), _leave_active_mm, mm, 1); ++ preempt_enable(); + + if (PagePinned(virt_to_page(mm->pgd)) + && atomic_read(&mm->mm_count) == 1 --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-x86_64-pgd-alloc-order +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-x86_64-pgd-alloc-order @@ -0,0 +1,337 @@ +From: jbeulich@novell.com +Subject: don't require order-1 allocations for pgd-s +Patch-mainline: obsolete + +At the same time remove the useless user mode pair of init_level4_pgt. + +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-11-23 10:55:40.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/hypervisor.h 2009-12-04 12:11:43.000000000 +0100 +@@ -104,8 +104,8 @@ void do_hypervisor_callback(struct pt_re + * be MACHINE addresses. + */ + +-void xen_pt_switch(unsigned long ptr); +-void xen_new_user_pt(unsigned long ptr); /* x86_64 only */ ++void xen_pt_switch(pgd_t *); ++void xen_new_user_pt(pgd_t *); /* x86_64 only */ + void xen_load_gs(unsigned int selector); /* x86_64 only */ + void xen_tlb_flush(void); + void xen_invlpg(unsigned long ptr); +@@ -113,7 +113,7 @@ void xen_invlpg(unsigned long ptr); + void xen_l1_entry_update(pte_t *ptr, pte_t val); + void xen_l2_entry_update(pmd_t *ptr, pmd_t val); + void xen_l3_entry_update(pud_t *ptr, pud_t val); /* x86_64/PAE */ +-void xen_l4_entry_update(pgd_t *ptr, int user, pgd_t val); /* x86_64 only */ ++void xen_l4_entry_update(pgd_t *ptr, pgd_t val); /* x86_64 only */ + void xen_pgd_pin(pgd_t *); + void xen_pgd_unpin(pgd_t *); + +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/mmu_context.h 2009-11-06 10:52:22.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/mmu_context.h 2009-12-04 12:11:43.000000000 +0100 +@@ -82,6 +82,9 @@ static inline void switch_mm(struct mm_s + { + unsigned cpu = smp_processor_id(); + struct mmuext_op _op[2 + (sizeof(long) > 4)], *op = _op; ++#ifdef CONFIG_X86_64 ++ pgd_t *upgd; ++#endif + + if (likely(prev != next)) { + BUG_ON(!xen_feature(XENFEAT_writable_page_tables) && +@@ -100,10 +103,11 @@ static inline void switch_mm(struct mm_s + op->arg1.mfn = virt_to_mfn(next->pgd); + op++; + +- /* xen_new_user_pt(__pa(__user_pgd(next->pgd))) */ ++ /* xen_new_user_pt(next->pgd) */ + #ifdef CONFIG_X86_64 + op->cmd = MMUEXT_NEW_USER_BASEPTR; +- op->arg1.mfn = virt_to_mfn(__user_pgd(next->pgd)); ++ upgd = __user_pgd(next->pgd); ++ op->arg1.mfn = likely(upgd) ? virt_to_mfn(upgd) : 0; + op++; + #endif + +@@ -131,7 +135,7 @@ static inline void switch_mm(struct mm_s + * to make sure to use no freed page tables. + */ + load_cr3(next->pgd); +- xen_new_user_pt(__pa(__user_pgd(next->pgd))); ++ xen_new_user_pt(next->pgd); + load_LDT_nolock(&next->context); + } + } +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-10-13 17:22:09.000000000 +0200 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/pgalloc.h 2009-12-04 12:11:43.000000000 +0100 +@@ -118,15 +118,13 @@ static inline void pud_populate(struct m + #endif /* CONFIG_X86_PAE */ + + #if PAGETABLE_LEVELS > 3 +-#define __user_pgd(pgd) ((pgd) + PTRS_PER_PGD) +- + static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud) + { + pgd_t ent = __pgd(_PAGE_TABLE | __pa(pud)); + + paravirt_alloc_pud(mm, __pa(pud) >> PAGE_SHIFT); + if (unlikely(PagePinned(virt_to_page(pgd)))) +- xen_l4_entry_update(pgd, 1, ent); ++ xen_l4_entry_update(pgd, ent); + else + *__user_pgd(pgd) = *pgd = ent; + } +--- head-2010-01-18.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-11-06 11:12:01.000000000 +0100 ++++ head-2010-01-18/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-12-04 12:11:43.000000000 +0100 +@@ -100,18 +100,25 @@ static inline void xen_set_pud(pud_t *pu + : (void)(*__pudp = xen_make_pud(0)); \ + }) + +-#define __user_pgd(pgd) ((pgd) + PTRS_PER_PGD) ++static inline pgd_t *__user_pgd(pgd_t *pgd) ++{ ++ if (unlikely(((unsigned long)pgd & PAGE_MASK) ++ == (unsigned long)init_level4_pgt)) ++ return NULL; ++ return (pgd_t *)(virt_to_page(pgd)->index ++ + ((unsigned long)pgd & ~PAGE_MASK)); ++} + + static inline void xen_set_pgd(pgd_t *pgdp, pgd_t pgd) + { +- xen_l4_entry_update(pgdp, 0, pgd); ++ xen_l4_entry_update(pgdp, pgd); + } + + #define xen_pgd_clear(pgd) \ + ({ \ + pgd_t *__pgdp = (pgd); \ + PagePinned(virt_to_page(__pgdp)) \ +- ? xen_l4_entry_update(__pgdp, 1, xen_make_pgd(0)) \ ++ ? xen_l4_entry_update(__pgdp, xen_make_pgd(0)) \ + : (void)(*__user_pgd(__pgdp) = *__pgdp = xen_make_pgd(0)); \ + }) + +--- head-2010-01-18.orig/arch/x86/kernel/cpu/common-xen.c 2009-11-06 11:12:01.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/common-xen.c 2010-01-18 17:14:45.000000000 +0100 +@@ -1026,8 +1026,7 @@ DEFINE_PER_CPU_FIRST(union irq_stack_uni + void xen_switch_pt(void) + { + #ifdef CONFIG_XEN +- xen_pt_switch(__pa_symbol(init_level4_pgt)); +- xen_new_user_pt(__pa_symbol(__user_pgd(init_level4_pgt))); ++ xen_pt_switch(init_level4_pgt); + #endif + } + +--- head-2010-01-18.orig/arch/x86/kernel/head_64-xen.S 2009-12-04 14:37:14.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/head_64-xen.S 2009-12-04 14:37:53.000000000 +0100 +@@ -56,14 +56,6 @@ ENTRY(name) + __PAGE_ALIGNED_BSS + NEXT_PAGE(init_level4_pgt) + .fill 512,8,0 +- /* +- * We update two pgd entries to make kernel and user pgd consistent +- * at pgd_populate(). It can be used for kernel modules. So we place +- * this page here for those cases to avoid memory corruption. +- * We also use this page to establish the initial mapping for the +- * vsyscall area. +- */ +- .fill 512,8,0 + + NEXT_PAGE(level3_kernel_pgt) + .fill 512,8,0 +--- head-2010-01-18.orig/arch/x86/mm/hypervisor.c 2010-01-05 16:47:51.000000000 +0100 ++++ head-2010-01-18/arch/x86/mm/hypervisor.c 2010-01-05 16:47:55.000000000 +0100 +@@ -525,7 +525,7 @@ void xen_l3_entry_update(pud_t *ptr, pud + #endif + + #ifdef CONFIG_X86_64 +-void xen_l4_entry_update(pgd_t *ptr, int user, pgd_t val) ++void xen_l4_entry_update(pgd_t *ptr, pgd_t val) + { + mmu_update_t u[2]; + struct page *page = NULL; +@@ -538,8 +538,11 @@ void xen_l4_entry_update(pgd_t *ptr, int + } + u[0].ptr = virt_to_machine(ptr); + u[0].val = __pgd_val(val); +- if (user) { +- u[1].ptr = virt_to_machine(__user_pgd(ptr)); ++ if (((unsigned long)ptr & ~PAGE_MASK) ++ <= pgd_index(TASK_SIZE_MAX) * sizeof(*ptr)) { ++ ptr = __user_pgd(ptr); ++ BUG_ON(!ptr); ++ u[1].ptr = virt_to_machine(ptr); + u[1].val = __pgd_val(val); + do_lN_entry_update(u, 2, page); + } else +@@ -547,21 +550,25 @@ void xen_l4_entry_update(pgd_t *ptr, int + } + #endif /* CONFIG_X86_64 */ + +-void xen_pt_switch(unsigned long ptr) ++#ifdef CONFIG_X86_64 ++void xen_pt_switch(pgd_t *pgd) + { + struct mmuext_op op; + op.cmd = MMUEXT_NEW_BASEPTR; +- op.arg1.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT); ++ op.arg1.mfn = virt_to_mfn(pgd); + BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0); + } + +-void xen_new_user_pt(unsigned long ptr) ++void xen_new_user_pt(pgd_t *pgd) + { + struct mmuext_op op; ++ ++ pgd = __user_pgd(pgd); + op.cmd = MMUEXT_NEW_USER_BASEPTR; +- op.arg1.mfn = pfn_to_mfn(ptr >> PAGE_SHIFT); ++ op.arg1.mfn = pgd ? virt_to_mfn(pgd) : 0; + BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0); + } ++#endif + + void xen_tlb_flush(void) + { +@@ -638,7 +645,14 @@ void xen_pgd_pin(pgd_t *pgd) + op[0].arg1.mfn = virt_to_mfn(pgd); + #ifdef CONFIG_X86_64 + op[1].cmd = op[0].cmd = MMUEXT_PIN_L4_TABLE; +- op[1].arg1.mfn = virt_to_mfn(__user_pgd(pgd)); ++ pgd = __user_pgd(pgd); ++ if (pgd) ++ op[1].arg1.mfn = virt_to_mfn(pgd); ++ else { ++ op[1].cmd = MMUEXT_PIN_L3_TABLE; ++ op[1].arg1.mfn = pfn_to_mfn(__pa_symbol(level3_user_pgt) ++ >> PAGE_SHIFT); ++ } + #endif + if (HYPERVISOR_mmuext_op(op, NR_PGD_PIN_OPS, NULL, DOMID_SELF) < 0) + BUG(); +@@ -651,8 +665,10 @@ void xen_pgd_unpin(pgd_t *pgd) + op[0].cmd = MMUEXT_UNPIN_TABLE; + op[0].arg1.mfn = virt_to_mfn(pgd); + #ifdef CONFIG_X86_64 ++ pgd = __user_pgd(pgd); ++ BUG_ON(!pgd); + op[1].cmd = MMUEXT_UNPIN_TABLE; +- op[1].arg1.mfn = virt_to_mfn(__user_pgd(pgd)); ++ op[1].arg1.mfn = virt_to_mfn(pgd); + #endif + if (HYPERVISOR_mmuext_op(op, NR_PGD_PIN_OPS, NULL, DOMID_SELF) < 0) + BUG(); +--- head-2010-01-18.orig/arch/x86/mm/init_64-xen.c 2009-10-13 17:25:37.000000000 +0200 ++++ head-2010-01-18/arch/x86/mm/init_64-xen.c 2009-12-04 12:11:43.000000000 +0100 +@@ -718,9 +718,6 @@ void __init xen_init_pt(void) + (PTRS_PER_PUD - pud_index(__START_KERNEL_map)) + * sizeof(*level3_kernel_pgt)); + +- __user_pgd(init_level4_pgt)[pgd_index(VSYSCALL_START)] = +- __pgd(__pa_symbol(level3_user_pgt) | _PAGE_TABLE); +- + /* Do an early initialization of the fixmap area. */ + addr = __fix_to_virt(FIX_EARLYCON_MEM_BASE); + if (pud_present(level3_kernel_pgt[pud_index(addr)])) { +@@ -736,8 +733,6 @@ void __init xen_init_pt(void) + + early_make_page_readonly(init_level4_pgt, + XENFEAT_writable_page_tables); +- early_make_page_readonly(__user_pgd(init_level4_pgt), +- XENFEAT_writable_page_tables); + early_make_page_readonly(level3_kernel_pgt, + XENFEAT_writable_page_tables); + early_make_page_readonly(level3_user_pgt, +--- head-2010-01-18.orig/arch/x86/mm/pgtable-xen.c 2009-10-14 14:20:47.000000000 +0200 ++++ head-2010-01-18/arch/x86/mm/pgtable-xen.c 2009-12-04 12:11:43.000000000 +0100 +@@ -269,9 +269,11 @@ static void pgd_walk(pgd_t *pgd_base, pg + BUG(); + seq = 0; + } ++ pgd = __user_pgd(pgd_base); ++ BUG_ON(!pgd); + MULTI_update_va_mapping(mcl + seq, +- (unsigned long)__user_pgd(pgd_base), +- pfn_pte(virt_to_phys(__user_pgd(pgd_base))>>PAGE_SHIFT, flags), ++ (unsigned long)pgd, ++ pfn_pte(virt_to_phys(pgd)>>PAGE_SHIFT, flags), + 0); + MULTI_update_va_mapping(mcl + seq + 1, + (unsigned long)pgd_base, +@@ -659,12 +661,29 @@ static void pgd_prepopulate_pmd(struct m + } + } + ++static inline pgd_t *user_pgd_alloc(pgd_t *pgd) ++{ + #ifdef CONFIG_X86_64 +-/* We allocate two contiguous pages for kernel and user. */ +-#define PGD_ORDER 1 +-#else +-#define PGD_ORDER 0 ++ if (pgd) { ++ pgd_t *upgd = (void *)__get_free_page(PGALLOC_GFP); ++ ++ if (upgd) ++ virt_to_page(pgd)->index = (long)upgd; ++ else { ++ free_page((unsigned long)pgd); ++ pgd = NULL; ++ } ++ } ++#endif ++ return pgd; ++} ++ ++static inline void user_pgd_free(pgd_t *pgd) ++{ ++#ifdef CONFIG_X86_64 ++ free_page(virt_to_page(pgd)->index); + #endif ++} + + pgd_t *pgd_alloc(struct mm_struct *mm) + { +@@ -672,7 +691,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm) + pmd_t *pmds[PREALLOCATED_PMDS]; + unsigned long flags; + +- pgd = (pgd_t *)__get_free_pages(PGALLOC_GFP, PGD_ORDER); ++ pgd = user_pgd_alloc((void *)__get_free_page(PGALLOC_GFP)); + + if (pgd == NULL) + goto out; +@@ -711,7 +730,8 @@ pgd_t *pgd_alloc(struct mm_struct *mm) + out_free_pmds: + free_pmds(pmds, mm, !xen_feature(XENFEAT_pae_pgdir_above_4gb)); + out_free_pgd: +- free_pages((unsigned long)pgd, PGD_ORDER); ++ user_pgd_free(pgd); ++ free_page((unsigned long)pgd); + out: + return NULL; + } +@@ -730,7 +750,8 @@ void pgd_free(struct mm_struct *mm, pgd_ + + pgd_mop_up_pmds(mm, pgd); + paravirt_pgd_free(mm, pgd); +- free_pages((unsigned long)pgd, PGD_ORDER); ++ user_pgd_free(pgd); ++ free_page((unsigned long)pgd); + } + + /* blktap and gntdev need this, as otherwise they would implicitly (and +--- head-2010-01-18.orig/drivers/xen/core/machine_reboot.c 2009-12-18 14:15:17.000000000 +0100 ++++ head-2010-01-18/drivers/xen/core/machine_reboot.c 2009-12-18 14:15:58.000000000 +0100 +@@ -188,8 +188,7 @@ static int take_machine_down(void *_susp + * in fast-suspend mode as that implies a new enough Xen. + */ + if (!suspend->fast_suspend) +- xen_new_user_pt(__pa(__user_pgd( +- current->active_mm->pgd))); ++ xen_new_user_pt(current->active_mm->pgd); + #endif + } + --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen-x86-no-lapic +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen-x86-no-lapic @@ -0,0 +1,374 @@ +From: jbeulich@novell.com +Subject: Disallow all accesses to the local APIC page +Patch-mainline: obsolete +References: 191115 + +--- head-2009-12-16.orig/arch/x86/include/asm/apic.h 2009-12-04 10:44:45.000000000 +0100 ++++ head-2009-12-16/arch/x86/include/asm/apic.h 2009-10-13 17:19:31.000000000 +0200 +@@ -10,7 +10,9 @@ + #include + #include + #include ++#ifndef CONFIG_XEN + #include ++#endif + #include + #include + #include +@@ -49,6 +51,7 @@ static inline void generic_apic_probe(vo + #ifdef CONFIG_X86_LOCAL_APIC + + extern unsigned int apic_verbosity; ++#ifndef CONFIG_XEN + extern int local_apic_timer_c2_ok; + + extern int disable_apic; +@@ -121,6 +124,8 @@ extern u64 native_apic_icr_read(void); + + extern int x2apic_mode; + ++#endif /* CONFIG_XEN */ ++ + #ifdef CONFIG_X86_X2APIC + /* + * Make previous memory operations globally visible before +@@ -367,6 +372,8 @@ struct apic { + */ + extern struct apic *apic; + ++#ifndef CONFIG_XEN ++ + /* + * APIC functionality to boot other CPUs - only used on SMP: + */ +@@ -460,6 +467,8 @@ static inline void default_wait_for_init + + extern void generic_bigsmp_probe(void); + ++#endif /* CONFIG_XEN */ ++ + + #ifdef CONFIG_X86_LOCAL_APIC + +@@ -479,6 +488,8 @@ static inline const struct cpumask *defa + DECLARE_EARLY_PER_CPU(u16, x86_bios_cpu_apicid); + + ++#ifndef CONFIG_XEN ++ + static inline unsigned int read_apic_id(void) + { + unsigned int reg; +@@ -590,6 +601,8 @@ static inline physid_mask_t default_apic + return physid_mask_of_physid(phys_apicid); + } + ++#endif /* CONFIG_XEN */ ++ + #endif /* CONFIG_X86_LOCAL_APIC */ + + #ifdef CONFIG_X86_32 +--- head-2009-12-16.orig/arch/x86/include/asm/apicdef.h 2009-12-18 09:53:29.000000000 +0100 ++++ head-2009-12-16/arch/x86/include/asm/apicdef.h 2009-10-14 17:01:50.000000000 +0200 +@@ -11,6 +11,8 @@ + #define IO_APIC_DEFAULT_PHYS_BASE 0xfec00000 + #define APIC_DEFAULT_PHYS_BASE 0xfee00000 + ++#ifndef CONFIG_XEN ++ + #define APIC_ID 0x20 + + #define APIC_LVR 0x30 +@@ -136,6 +138,16 @@ + #define APIC_BASE_MSR 0x800 + #define X2APIC_ENABLE (1UL << 10) + ++#else /* CONFIG_XEN */ ++ ++enum { ++ APIC_DEST_ALLBUT = 0x1, ++ APIC_DEST_SELF, ++ APIC_DEST_ALLINC ++}; ++ ++#endif /* CONFIG_XEN */ ++ + #ifdef CONFIG_X86_32 + # define MAX_IO_APICS 64 + #else +@@ -143,6 +155,8 @@ + # define MAX_LOCAL_APIC 32768 + #endif + ++#ifndef CONFIG_XEN ++ + /* + * All x86-64 systems are xAPIC compatible. + * In the following, "apicid" is a physical APIC ID. +@@ -413,6 +427,8 @@ struct local_apic { + + #undef u32 + ++#endif /* CONFIG_XEN */ ++ + #ifdef CONFIG_X86_32 + #define BAD_APICID 0xFFu + #else +--- head-2009-12-16.orig/arch/x86/include/mach-xen/asm/fixmap.h 2009-11-06 10:52:22.000000000 +0100 ++++ head-2009-12-16/arch/x86/include/mach-xen/asm/fixmap.h 2009-10-13 17:19:31.000000000 +0200 +@@ -17,7 +17,6 @@ + #ifndef __ASSEMBLY__ + #include + #include +-#include + #include + #ifdef CONFIG_X86_32 + #include +@@ -82,10 +81,10 @@ enum fixed_addresses { + #endif + FIX_DBGP_BASE, + FIX_EARLYCON_MEM_BASE, ++#ifndef CONFIG_XEN + #ifdef CONFIG_X86_LOCAL_APIC + FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */ + #endif +-#ifndef CONFIG_XEN + #ifdef CONFIG_X86_IO_APIC + FIX_IO_APIC_BASE_0, + FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS - 1, +--- head-2009-12-16.orig/arch/x86/include/mach-xen/asm/smp.h 2009-11-20 11:18:10.000000000 +0100 ++++ head-2009-12-16/arch/x86/include/mach-xen/asm/smp.h 2009-11-20 11:20:18.000000000 +0100 +@@ -15,7 +15,7 @@ + # include + # endif + #endif +-#include ++#include + #include + + extern int smp_num_siblings; +@@ -168,7 +168,7 @@ extern unsigned disabled_cpus __cpuinitd + + #include + +-#ifdef CONFIG_X86_LOCAL_APIC ++#if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_XEN) + + #ifndef CONFIG_X86_64 + static inline int logical_smp_processor_id(void) +--- head-2009-12-16.orig/arch/x86/kernel/acpi/boot.c 2009-11-06 10:52:02.000000000 +0100 ++++ head-2009-12-16/arch/x86/kernel/acpi/boot.c 2009-10-13 17:19:31.000000000 +0200 +@@ -71,13 +71,13 @@ int acpi_sci_override_gsi __initdata; + #ifndef CONFIG_XEN + int acpi_skip_timer_override __initdata; + int acpi_use_timer_override __initdata; +-#else +-#define acpi_skip_timer_override 0 +-#endif + + #ifdef CONFIG_X86_LOCAL_APIC + static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; + #endif ++#else ++#define acpi_skip_timer_override 0 ++#endif + + #ifndef __HAVE_ARCH_CMPXCHG + #warning ACPI uses CMPXCHG, i486 and later hardware +@@ -136,6 +136,7 @@ static int __init acpi_parse_madt(struct + return -ENODEV; + } + ++#ifndef CONFIG_XEN + if (madt->address) { + acpi_lapic_addr = (u64) madt->address; + +@@ -143,7 +144,6 @@ static int __init acpi_parse_madt(struct + madt->address); + } + +-#ifndef CONFIG_XEN + default_acpi_madt_oem_check(madt->header.oem_id, + madt->header.oem_table_id); + #endif +@@ -244,6 +244,7 @@ static int __init + acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header, + const unsigned long end) + { ++#ifndef CONFIG_XEN + struct acpi_madt_local_apic_override *lapic_addr_ovr = NULL; + + lapic_addr_ovr = (struct acpi_madt_local_apic_override *)header; +@@ -252,6 +253,7 @@ acpi_parse_lapic_addr_ovr(struct acpi_su + return -EINVAL; + + acpi_lapic_addr = lapic_addr_ovr->address; ++#endif + + return 0; + } +@@ -1055,7 +1057,7 @@ int mp_register_gsi(struct device *dev, + + ioapic_pin = mp_find_ioapic_pin(ioapic, gsi); + +-#ifdef CONFIG_X86_32 ++#if defined(CONFIG_X86_32) && !defined(CONFIG_XEN) + if (ioapic_renumber_irq) + gsi = ioapic_renumber_irq(ioapic, gsi); + #endif +--- head-2009-12-16.orig/arch/x86/kernel/apic/io_apic-xen.c 2009-11-06 10:52:22.000000000 +0100 ++++ head-2009-12-16/arch/x86/kernel/apic/io_apic-xen.c 2009-10-14 17:01:38.000000000 +0200 +@@ -1093,7 +1093,9 @@ static inline int irq_trigger(int idx) + return MPBIOS_trigger(idx); + } + ++#ifndef CONFIG_XEN + int (*ioapic_renumber_irq)(int ioapic, int irq); ++#endif + static int pin_2_irq(int idx, int apic, int pin) + { + int irq, i; +@@ -1115,11 +1117,13 @@ static int pin_2_irq(int idx, int apic, + while (i < apic) + irq += nr_ioapic_registers[i++]; + irq += pin; ++#ifndef CONFIG_XEN + /* + * For MPS mode, so far only needed by ES7000 platform + */ + if (ioapic_renumber_irq) + irq = ioapic_renumber_irq(apic, irq); ++#endif + } + + #ifdef CONFIG_X86_32 +@@ -4025,10 +4029,12 @@ int io_apic_set_pci_routing(struct devic + u8 __init io_apic_unique_id(u8 id) + { + #ifdef CONFIG_X86_32 ++#ifndef CONFIG_XEN + if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && + !APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) + return io_apic_get_unique_id(nr_ioapics, id); + else ++#endif + return id; + #else + int i; +--- head-2009-12-16.orig/arch/x86/kernel/irq-xen.c 2009-12-18 09:59:05.000000000 +0100 ++++ head-2009-12-16/arch/x86/kernel/irq-xen.c 2009-12-18 10:14:24.000000000 +0100 +@@ -15,9 +15,9 @@ + #include + #include + ++#ifndef CONFIG_XEN + atomic_t irq_err_count; + +-#ifndef CONFIG_XEN + /* Function pointer for generic interrupt vector handling */ + void (*generic_interrupt_extension)(void) = NULL; + #endif +@@ -57,7 +57,7 @@ static int show_other_interrupts(struct + for_each_online_cpu(j) + seq_printf(p, "%10u ", irq_stats(j)->__nmi_count); + seq_printf(p, " Non-maskable interrupts\n"); +-#ifdef CONFIG_X86_LOCAL_APIC ++#if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_XEN) + seq_printf(p, "%*s: ", prec, "LOC"); + for_each_online_cpu(j) + seq_printf(p, "%10u ", irq_stats(j)->apic_timer_irqs); +@@ -122,10 +122,12 @@ static int show_other_interrupts(struct + seq_printf(p, "%10u ", per_cpu(mce_poll_count, j)); + seq_printf(p, " Machine check polls\n"); + #endif ++#ifndef CONFIG_XEN + seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); + #if defined(CONFIG_X86_IO_APIC) + seq_printf(p, "%*s: %10u\n", prec, "MIS", atomic_read(&irq_mis_count)); + #endif ++#endif + return 0; + } + +@@ -221,12 +223,16 @@ u64 arch_irq_stat_cpu(unsigned int cpu) + + u64 arch_irq_stat(void) + { ++#ifndef CONFIG_XEN + u64 sum = atomic_read(&irq_err_count); + + #ifdef CONFIG_X86_IO_APIC + sum += atomic_read(&irq_mis_count); + #endif + return sum; ++#else ++ return 0; ++#endif + } + + +--- head-2009-12-16.orig/arch/x86/kernel/mpparse-xen.c 2009-11-06 10:52:22.000000000 +0100 ++++ head-2009-12-16/arch/x86/kernel/mpparse-xen.c 2009-10-13 17:19:31.000000000 +0200 +@@ -288,7 +288,9 @@ static int __init smp_check_mpc(struct m + + printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); + ++#ifndef CONFIG_XEN + printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->lapic); ++#endif + + return 1; + } +@@ -320,12 +322,14 @@ static int __init smp_read_mpc(struct mp + if (!smp_check_mpc(mpc, oem, str)) + return 0; + +-#if defined(CONFIG_X86_32) && !defined(CONFIG_XEN) ++#ifndef CONFIG_XEN ++#ifdef CONFIG_X86_32 + generic_mps_oem_check(mpc, oem, str); + #endif + /* save the local APIC address, it might be non-default */ + if (!acpi_lapic) + mp_lapic_addr = mpc->lapic; ++#endif + + if (early) + return 1; +@@ -519,10 +523,12 @@ static inline void __init construct_defa + int linttypes[2] = { mp_ExtINT, mp_NMI }; + int i; + ++#ifndef CONFIG_XEN + /* + * local APIC has default address + */ + mp_lapic_addr = APIC_DEFAULT_PHYS_BASE; ++#endif + + /* + * 2 CPUs, numbered 0 & 1. +@@ -655,10 +661,12 @@ void __init default_get_smp_config(unsig + */ + if (mpf->feature1 != 0) { + if (early) { ++#ifndef CONFIG_XEN + /* + * local APIC has default address + */ + mp_lapic_addr = APIC_DEFAULT_PHYS_BASE; ++#endif + return; + } + +--- head-2009-12-16.orig/drivers/xen/core/smpboot.c 2009-11-06 11:10:22.000000000 +0100 ++++ head-2009-12-16/drivers/xen/core/smpboot.c 2009-10-15 11:12:11.000000000 +0200 +@@ -354,7 +354,7 @@ void __init smp_prepare_cpus(unsigned in + * Here we can be sure that there is an IO-APIC in the system. Let's + * go and set it up: + */ +- if (!skip_ioapic_setup && nr_ioapics) ++ if (cpu_has_apic && !skip_ioapic_setup && nr_ioapics) + setup_IO_APIC(); + #endif + } --- linux-ec2-2.6.32.orig/debian.ec2/patches.xen/xen3-patch-2.6.27 +++ linux-ec2-2.6.32/debian.ec2/patches.xen/xen3-patch-2.6.27 @@ -0,0 +1,26130 @@ +From: Linux Kernel Mailing List +Subject: [PATCH] Linux: Update to 2.6.27 +Patch-mainline: 2.6.27 + + This patch contains the differences between Linux 2.6.26 and 2.6.27. + +Acked-by: Jeff Mahoney +Automatically created from "patches.kernel.org/patch-2.6.27" by xen-port-patches.py + +--- head-2010-01-18.orig/arch/x86/Kconfig 2009-11-20 11:02:02.000000000 +0100 ++++ head-2010-01-18/arch/x86/Kconfig 2009-11-20 11:02:09.000000000 +0100 +@@ -755,7 +755,7 @@ config AMD_IOMMU + bool "AMD IOMMU support" + select SWIOTLB + select PCI_MSI +- depends on X86_64 && PCI && ACPI ++ depends on X86_64 && PCI && ACPI && !XEN + ---help--- + With this option you can enable support for AMD IOMMU hardware in + your system. An IOMMU is a hardware component which provides +@@ -1470,7 +1470,7 @@ config MTRR + config MTRR_SANITIZER + def_bool y + prompt "MTRR cleanup support" +- depends on MTRR ++ depends on MTRR && !XEN + ---help--- + Convert MTRR layout from continuous to discrete, so X drivers can + add writeback entries. +--- head-2010-01-18.orig/arch/x86/Kconfig.debug 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/Kconfig.debug 2009-11-06 10:51:42.000000000 +0100 +@@ -25,6 +25,7 @@ config STRICT_DEVMEM + config X86_VERBOSE_BOOTUP + bool "Enable verbose x86 bootup info messages" + default y ++ depends on !XEN + ---help--- + Enables the informational output from the decompression stage + (e.g. bzImage) of the boot. If you disable this you will still +@@ -185,6 +186,7 @@ config X86_DS_SELFTEST + + config HAVE_MMIOTRACE_SUPPORT + def_bool y ++ depends on !XEN + + # + # IO delay types: +--- head-2010-01-18.orig/arch/x86/Makefile 2009-11-06 10:51:17.000000000 +0100 ++++ head-2010-01-18/arch/x86/Makefile 2009-11-06 10:51:42.000000000 +0100 +@@ -112,8 +112,8 @@ endif + KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,) + + # Xen subarch support +-mflags-$(CONFIG_X86_XEN) := -Iinclude/asm-x86/mach-xen +-mcore-$(CONFIG_X86_XEN) := arch/x86/mach-xen/ ++mflags-$(CONFIG_XEN) := -Iinclude/asm-x86/mach-xen ++mcore-$(CONFIG_XEN) := arch/x86/mach-xen/ + + KBUILD_CFLAGS += $(mflags-y) + KBUILD_AFLAGS += $(mflags-y) +--- head-2010-01-18.orig/arch/x86/ia32/ia32entry-xen.S 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/ia32/ia32entry-xen.S 2009-11-06 10:51:42.000000000 +0100 +@@ -15,6 +15,16 @@ + #include + #include + ++/* Avoid __ASSEMBLER__'ifying just for this. */ ++#include ++#define AUDIT_ARCH_I386 (EM_386|__AUDIT_ARCH_LE) ++#define __AUDIT_ARCH_LE 0x40000000 ++ ++#ifndef CONFIG_AUDITSYSCALL ++#define sysexit_audit int_ret_from_sys_call ++#define sysretl_audit int_ret_from_sys_call ++#endif ++ + #define IA32_NR_syscalls ((ia32_syscall_end - ia32_sys_call_table)/8) + + .macro IA32_ARG_FIXUP noebp=0 +@@ -37,6 +47,11 @@ + movq %rax,R8(%rsp) + .endm + ++ /* ++ * Reload arg registers from stack in case ptrace changed them. ++ * We don't reload %eax because syscall_trace_enter() returned ++ * the value it wants us to use in the table lookup. ++ */ + .macro LOAD_ARGS32 offset + movl \offset(%rsp),%r11d + movl \offset+8(%rsp),%r10d +@@ -46,7 +61,6 @@ + movl \offset+48(%rsp),%edx + movl \offset+56(%rsp),%esi + movl \offset+64(%rsp),%edi +- movl \offset+72(%rsp),%eax + .endm + + .macro CFI_STARTPROC32 simple +@@ -61,6 +75,19 @@ + CFI_UNDEFINED r15 + .endm + ++#ifdef CONFIG_PARAVIRT ++ENTRY(native_usergs_sysret32) ++ swapgs ++ sysretl ++ENDPROC(native_usergs_sysret32) ++ ++ENTRY(native_irq_enable_sysexit) ++ swapgs ++ sti ++ sysexit ++ENDPROC(native_irq_enable_sysexit) ++#endif ++ + /* + * 32bit SYSENTER instruction entry. + * +@@ -98,7 +125,7 @@ ENTRY(ia32_sysenter_target) + CFI_RESTORE rcx + movl %ebp,%ebp /* zero extension */ + movl %eax,%eax +- movl 48-THREAD_SIZE+threadinfo_sysenter_return(%rsp),%r10d ++ movl 48-THREAD_SIZE+TI_sysenter_return(%rsp),%r10d + movl $__USER32_DS,40(%rsp) + movq %rbp,32(%rsp) + movl $__USER32_CS,16(%rsp) +@@ -113,19 +140,75 @@ ENTRY(ia32_sysenter_target) + .quad 1b,ia32_badarg + .previous + GET_THREAD_INFO(%r10) +- orl $TS_COMPAT,threadinfo_status(%r10) +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) ++ orl $TS_COMPAT,TI_status(%r10) ++ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) + jnz sysenter_tracesys +-sysenter_do_call: + cmpl $(IA32_NR_syscalls-1),%eax + ja ia32_badsys ++sysenter_do_call: + IA32_ARG_FIXUP 1 ++sysenter_dispatch: + call *ia32_sys_call_table(,%rax,8) + movq %rax,RAX-ARGOFFSET(%rsp) ++ GET_THREAD_INFO(%r10) ++ DISABLE_INTERRUPTS(CLBR_NONE) ++ TRACE_IRQS_OFF ++ testl $_TIF_ALLWORK_MASK,TI_flags(%r10) ++ jnz sysexit_audit + jmp int_ret_from_sys_call + ++#ifdef CONFIG_AUDITSYSCALL ++ .macro auditsys_entry_common ++ movl %esi,%r9d /* 6th arg: 4th syscall arg */ ++ movl %edx,%r8d /* 5th arg: 3rd syscall arg */ ++ /* (already in %ecx) 4th arg: 2nd syscall arg */ ++ movl %ebx,%edx /* 3rd arg: 1st syscall arg */ ++ movl %eax,%esi /* 2nd arg: syscall number */ ++ movl $AUDIT_ARCH_I386,%edi /* 1st arg: audit arch */ ++ call audit_syscall_entry ++ movl RAX-ARGOFFSET(%rsp),%eax /* reload syscall number */ ++ cmpl $(IA32_NR_syscalls-1),%eax ++ ja ia32_badsys ++ movl %ebx,%edi /* reload 1st syscall arg */ ++ movl RCX-ARGOFFSET(%rsp),%esi /* reload 2nd syscall arg */ ++ movl RDX-ARGOFFSET(%rsp),%edx /* reload 3rd syscall arg */ ++ movl RSI-ARGOFFSET(%rsp),%ecx /* reload 4th syscall arg */ ++ movl RDI-ARGOFFSET(%rsp),%r8d /* reload 5th syscall arg */ ++ .endm ++ ++ .macro auditsys_exit exit,ebpsave=RBP ++ testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) ++ jnz int_ret_from_sys_call ++ TRACE_IRQS_ON ++ ENABLE_INTERRUPTS(CLBR_NONE) ++ movl %eax,%esi /* second arg, syscall return value */ ++ cmpl $0,%eax /* is it < 0? */ ++ setl %al /* 1 if so, 0 if not */ ++ movzbl %al,%edi /* zero-extend that into %edi */ ++ inc %edi /* first arg, 0->1(AUDITSC_SUCCESS), 1->2(AUDITSC_FAILURE) */ ++ call audit_syscall_exit ++ movl \ebpsave-ARGOFFSET(%rsp),%ebp /* reload user register value */ ++ movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi ++ DISABLE_INTERRUPTS(CLBR_NONE) ++ TRACE_IRQS_OFF ++ jmp int_with_check ++ .endm ++ ++sysenter_auditsys: ++ auditsys_entry_common ++ movl %ebp,%r9d /* reload 6th syscall arg */ ++ jmp sysenter_dispatch ++ ++sysexit_audit: ++ auditsys_exit sysexit_from_sys_call ++#endif ++ + sysenter_tracesys: + xchgl %r9d,%ebp ++#ifdef CONFIG_AUDITSYSCALL ++ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) ++ jz sysenter_auditsys ++#endif + SAVE_REST + CLEAR_RREGS + movq %r9,R9(%rsp) +@@ -186,18 +269,38 @@ ENTRY(ia32_cstar_target) + .quad 1b,ia32_badarg + .previous + GET_THREAD_INFO(%r10) +- orl $TS_COMPAT,threadinfo_status(%r10) +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) ++ orl $TS_COMPAT,TI_status(%r10) ++ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) + jnz cstar_tracesys + cstar_do_call: + cmpl $IA32_NR_syscalls-1,%eax + ja ia32_badsys + IA32_ARG_FIXUP 1 ++cstar_dispatch: + call *ia32_sys_call_table(,%rax,8) + movq %rax,RAX-ARGOFFSET(%rsp) ++ GET_THREAD_INFO(%r10) ++ DISABLE_INTERRUPTS(CLBR_NONE) ++ testl $_TIF_ALLWORK_MASK,TI_flags(%r10) ++ jnz sysretl_audit + jmp int_ret_from_sys_call + +-cstar_tracesys: ++#ifdef CONFIG_AUDITSYSCALL ++cstar_auditsys: ++ movl %r9d,R9-ARGOFFSET(%rsp) /* register to be clobbered by call */ ++ auditsys_entry_common ++ movl R9-ARGOFFSET(%rsp),%r9d /* reload 6th syscall arg */ ++ jmp cstar_dispatch ++ ++sysretl_audit: ++ auditsys_exit sysretl_from_sys_call, RCX /* user %ebp in RCX slot */ ++#endif ++ ++cstar_tracesys: ++#ifdef CONFIG_AUDITSYSCALL ++ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%r10) ++ jz cstar_auditsys ++#endif + xchgl %r9d,%ebp + SAVE_REST + CLEAR_RREGS +@@ -263,8 +366,8 @@ ENTRY(ia32_syscall) + this could be a problem. */ + SAVE_ARGS 0,0,1 + GET_THREAD_INFO(%r10) +- orl $TS_COMPAT,threadinfo_status(%r10) +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%r10) ++ orl $TS_COMPAT,TI_status(%r10) ++ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%r10) + jnz ia32_tracesys + ia32_do_syscall: + cmpl $(IA32_NR_syscalls-1),%eax +@@ -309,13 +412,11 @@ quiet_ni_syscall: + PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi + PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi + PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx +- PTREGSCALL stub32_sigsuspend, sys32_sigsuspend, %rcx + PTREGSCALL stub32_execve, sys32_execve, %rcx + PTREGSCALL stub32_fork, sys_fork, %rdi + PTREGSCALL stub32_clone, sys32_clone, %rdx + PTREGSCALL stub32_vfork, sys_vfork, %rdi + PTREGSCALL stub32_iopl, sys_iopl, %rsi +- PTREGSCALL stub32_rt_sigsuspend, sys_rt_sigsuspend, %rdx + + ENTRY(ia32_ptregs_common) + popq %r11 +@@ -415,7 +516,7 @@ ia32_sys_call_table: + .quad sys_ssetmask + .quad sys_setreuid16 /* 70 */ + .quad sys_setregid16 +- .quad stub32_sigsuspend ++ .quad sys32_sigsuspend + .quad compat_sys_sigpending + .quad sys_sethostname + .quad compat_sys_setrlimit /* 75 */ +@@ -522,7 +623,7 @@ ia32_sys_call_table: + .quad sys32_rt_sigpending + .quad compat_sys_rt_sigtimedwait + .quad sys32_rt_sigqueueinfo +- .quad stub32_rt_sigsuspend ++ .quad sys_rt_sigsuspend + .quad sys32_pread /* 180 */ + .quad sys32_pwrite + .quad sys_chown16 +@@ -670,4 +771,10 @@ ia32_sys_call_table: + .quad sys32_fallocate + .quad compat_sys_timerfd_settime /* 325 */ + .quad compat_sys_timerfd_gettime ++ .quad compat_sys_signalfd4 ++ .quad sys_eventfd2 ++ .quad sys_epoll_create1 ++ .quad sys_dup3 /* 330 */ ++ .quad sys_pipe2 ++ .quad sys_inotify_init1 + ia32_syscall_end: +--- head-2010-01-18.orig/arch/x86/kernel/Makefile 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/Makefile 2009-11-06 10:51:42.000000000 +0100 +@@ -134,9 +134,11 @@ ifeq ($(CONFIG_X86_64),y) + obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o + obj-y += vsmp_64.o + +- obj-$(CONFIG_XEN) += nmi_64.o ++ obj-$(CONFIG_XEN) += nmi.o + time_64-$(CONFIG_XEN) += time_32.o + endif + +-disabled-obj-$(CONFIG_XEN) := crash.o early-quirks.o hpet.o i8253.o i8259_$(BITS).o \ +- pci-swiotlb_64.o reboot.o smpboot.o tlb_$(BITS).o tsc_$(BITS).o tsc_sync.o vsmp_64.o ++disabled-obj-$(CONFIG_XEN) := %_uv.o crash.o early-quirks.o hpet.o i8253.o \ ++ i8259.o irqinit_$(BITS).o pci-swiotlb_64.o reboot.o smpboot.o \ ++ tlb_$(BITS).o tsc.o tsc_sync.o vsmp_64.o ++disabled-obj-$(CONFIG_XEN_UNPRIVILEGED_GUEST) += probe_roms_32.o +--- head-2010-01-18.orig/arch/x86/kernel/acpi/boot.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/acpi/boot.c 2009-11-06 10:51:42.000000000 +0100 +@@ -1300,6 +1300,7 @@ static int __init force_acpi_ht(const st + return 0; + } + ++#ifndef CONFIG_XEN + /* + * Force ignoring BIOS IRQ0 pin2 override + */ +@@ -1317,6 +1318,7 @@ static int __init dmi_ignore_irq0_timer_ + } + return 0; + } ++#endif + + static int __init force_acpi_rsdt(const struct dmi_system_id *d) + { +@@ -1521,6 +1523,7 @@ static struct dmi_system_id __initdata a + {} + }; + ++#ifndef CONFIG_XEN + /* second table for DMI checks that should run after early-quirks */ + static struct dmi_system_id __initdata acpi_dmi_table_late[] = { + /* +@@ -1567,6 +1570,7 @@ static struct dmi_system_id __initdata a + }, + {} + }; ++#endif + + /* + * acpi_boot_table_init() and acpi_boot_init() +@@ -1651,8 +1655,10 @@ int __init early_acpi_boot_init(void) + + int __init acpi_boot_init(void) + { ++#ifndef CONFIG_XEN + /* those are executed after early-quirks are executed */ + dmi_check_system(acpi_dmi_table_late); ++#endif + + /* + * If acpi_disabled, bail out +--- head-2010-01-18.orig/arch/x86/kernel/acpi/sleep-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/acpi/sleep-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -9,6 +9,7 @@ + #include + #include + #include ++#include + + #include "realmode/wakeup.h" + #include "sleep.h" +@@ -20,7 +21,7 @@ unsigned long acpi_realmode_flags; + /* address in low memory of the wakeup routine. */ + static unsigned long acpi_realmode; + +-#ifdef CONFIG_64BIT ++#if defined(CONFIG_SMP) && defined(CONFIG_64BIT) + static char temp_stack[10240]; + #endif + #endif +@@ -54,18 +55,27 @@ int acpi_save_state_mem(void) + header->video_mode = saved_video_mode; + + header->wakeup_jmp_seg = acpi_wakeup_address >> 4; ++ ++ /* ++ * Set up the wakeup GDT. We set these up as Big Real Mode, ++ * that is, with limits set to 4 GB. At least the Lenovo ++ * Thinkpad X61 is known to need this for the video BIOS ++ * initialization quirk to work; this is likely to also ++ * be the case for other laptops or integrated video devices. ++ */ ++ + /* GDT[0]: GDT self-pointer */ + header->wakeup_gdt[0] = + (u64)(sizeof(header->wakeup_gdt) - 1) + + ((u64)(acpi_wakeup_address + + ((char *)&header->wakeup_gdt - (char *)acpi_realmode)) + << 16); +- /* GDT[1]: real-mode-like code segment */ +- header->wakeup_gdt[1] = (0x009bULL << 40) + +- ((u64)acpi_wakeup_address << 16) + 0xffff; +- /* GDT[2]: real-mode-like data segment */ +- header->wakeup_gdt[2] = (0x0093ULL << 40) + +- ((u64)acpi_wakeup_address << 16) + 0xffff; ++ /* GDT[1]: big real mode-like code segment */ ++ header->wakeup_gdt[1] = ++ GDT_ENTRY(0x809b, acpi_wakeup_address, 0xfffff); ++ /* GDT[2]: big real mode-like data segment */ ++ header->wakeup_gdt[2] = ++ GDT_ENTRY(0x8093, acpi_wakeup_address, 0xfffff); + + #ifndef CONFIG_64BIT + store_gdt((struct desc_ptr *)&header->pmode_gdt); +@@ -79,7 +89,7 @@ int acpi_save_state_mem(void) + #endif /* !CONFIG_64BIT */ + + header->pmode_cr0 = read_cr0(); +- header->pmode_cr4 = read_cr4(); ++ header->pmode_cr4 = read_cr4_safe(); + header->realmode_flags = acpi_realmode_flags; + header->real_magic = 0x12345678; + +@@ -89,7 +99,9 @@ int acpi_save_state_mem(void) + saved_magic = 0x12345678; + #else /* CONFIG_64BIT */ + header->trampoline_segment = setup_trampoline() >> 4; +- init_rsp = (unsigned long)temp_stack + 4096; ++#ifdef CONFIG_SMP ++ stack_start.sp = temp_stack + 4096; ++#endif + initial_code = (unsigned long)wakeup_long64; + saved_magic = 0x123456789abcdef0; + #endif /* CONFIG_64BIT */ +@@ -145,6 +157,12 @@ static int __init acpi_sleep_setup(char + acpi_realmode_flags |= 2; + if (strncmp(str, "s3_beep", 7) == 0) + acpi_realmode_flags |= 4; ++#ifdef CONFIG_HIBERNATION ++ if (strncmp(str, "s4_nohwsig", 10) == 0) ++ acpi_no_s4_hw_signature(); ++#endif ++ if (strncmp(str, "old_ordering", 12) == 0) ++ acpi_old_suspend_ordering(); + str = strchr(str, ','); + if (str != NULL) + str += strspn(str, ", \t"); +--- head-2010-01-18.orig/arch/x86/kernel/apic_32-xen.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/apic_32-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -59,7 +59,10 @@ static cpumask_t timer_bcast_ipi; + /* + * Debug level, exported for io_apic.c + */ +-int apic_verbosity; ++unsigned int apic_verbosity; ++ ++/* Have we found an MP table */ ++int smp_found_config; + + #ifndef CONFIG_XEN + static int modern_apic(void) +--- head-2010-01-18.orig/arch/x86/kernel/apic_64-xen.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/apic_64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -39,7 +39,10 @@ int disable_apic; + /* + * Debug level, exported for io_apic.c + */ +-int apic_verbosity; ++unsigned int apic_verbosity; ++ ++/* Have we found an MP table */ ++int smp_found_config; + + /* + * The guts of the apic timer interrupt +--- head-2010-01-18.orig/arch/x86/kernel/asm-offsets_64.c 2009-12-04 10:44:49.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/asm-offsets_64.c 2009-11-06 10:51:42.000000000 +0100 +@@ -132,7 +132,7 @@ int main(void) + + BLANK(); + DEFINE(PAGE_SIZE_asm, PAGE_SIZE); +-#ifdef CONFIG_XEN ++#ifdef CONFIG_PARAVIRT_XEN + BLANK(); + OFFSET(XEN_vcpu_info_mask, vcpu_info, evtchn_upcall_mask); + OFFSET(XEN_vcpu_info_pending, vcpu_info, evtchn_upcall_pending); +--- head-2010-01-18.orig/arch/x86/kernel/cpu/amd.c 2010-01-18 16:51:20.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/amd.c 2010-01-18 16:31:12.000000000 +0100 +@@ -569,6 +569,7 @@ static void __cpuinit init_amd(struct cp + fam10h_check_enable_mmcfg(); + } + ++#ifndef CONFIG_XEN + if (c == &boot_cpu_data && c->x86 >= 0xf && c->x86 <= 0x11) { + unsigned long long tseg; + +@@ -588,6 +589,7 @@ static void __cpuinit init_amd(struct cp + } + } + #endif ++#endif + } + + #ifdef CONFIG_X86_32 +--- head-2010-01-18.orig/arch/x86/kernel/cpu/bugs_64.c 2010-01-18 16:51:20.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/bugs_64.c 2009-11-06 10:51:42.000000000 +0100 +@@ -20,6 +20,7 @@ void __init check_bugs(void) + #endif + alternative_instructions(); + ++#ifndef CONFIG_XEN + /* + * Make sure the first 2MB area is not mapped by huge pages + * There are typically fixed size MTRRs in there and overlapping +@@ -30,4 +31,5 @@ void __init check_bugs(void) + */ + if (!direct_gbpages) + set_memory_4k((unsigned long)__va(0), 1); ++#endif + } +--- head-2010-01-18.orig/arch/x86/kernel/cpu/common-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/cpu/common-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #ifdef CONFIG_X86_LOCAL_APIC + #include + #include +@@ -341,11 +342,24 @@ static void __init early_cpu_detect(void + + get_cpu_vendor(c, 1); + ++ early_get_cap(c); ++ + if (c->x86_vendor != X86_VENDOR_UNKNOWN && + cpu_devs[c->x86_vendor]->c_early_init) + cpu_devs[c->x86_vendor]->c_early_init(c); ++} + +- early_get_cap(c); ++/* ++ * The NOPL instruction is supposed to exist on all CPUs with ++ * family >= 6; unfortunately, that's not true in practice because ++ * of early VIA chips and (more importantly) broken virtualizers that ++ * are not easy to detect. In the latter case it doesn't even *fail* ++ * reliably, so probing for it doesn't even work. Disable it completely ++ * unless we can find a reliable way to detect all the broken cases. ++ */ ++static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) ++{ ++ clear_cpu_cap(c, X86_FEATURE_NOPL); + } + + static void __cpuinit generic_identify(struct cpuinfo_x86 *c) +@@ -404,8 +418,8 @@ static void __cpuinit generic_identify(s + } + + init_scattered_cpuid_features(c); ++ detect_nopl(c); + } +- + } + + static void __cpuinit squash_the_stupid_serial_number(struct cpuinfo_x86 *c) +@@ -436,7 +450,7 @@ __setup("serialnumber", x86_serial_nr_se + /* + * This does the hard work of actually picking apart the CPU stuff... + */ +-void __cpuinit identify_cpu(struct cpuinfo_x86 *c) ++static void __cpuinit identify_cpu(struct cpuinfo_x86 *c) + { + int i; + +@@ -450,6 +464,8 @@ void __cpuinit identify_cpu(struct cpuin + c->x86_max_cores = 1; + c->x86_clflush_size = 32; + memset(&c->x86_capability, 0, sizeof c->x86_capability); ++ if (boot_cpu_has(X86_FEATURE_SYSCALL32)) ++ set_cpu_cap(c, X86_FEATURE_SYSCALL32); + + if (!have_cpuid_p()) { + /* +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2010-01-18/arch/x86/kernel/cpu/common_64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -0,0 +1,773 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#ifdef CONFIG_X86_LOCAL_APIC ++#include ++#include ++#include ++#elif defined(CONFIG_XEN) ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "cpu.h" ++ ++/* We need valid kernel segments for data and code in long mode too ++ * IRET will check the segment types kkeil 2000/10/28 ++ * Also sysret mandates a special GDT layout ++ */ ++/* The TLS descriptors are currently at a different place compared to i386. ++ Hopefully nobody expects them at a fixed place (Wine?) */ ++DEFINE_PER_CPU(struct gdt_page, gdt_page) = { .gdt = { ++ [GDT_ENTRY_KERNEL32_CS] = { { { 0x0000ffff, 0x00cf9b00 } } }, ++ [GDT_ENTRY_KERNEL_CS] = { { { 0x0000ffff, 0x00af9b00 } } }, ++ [GDT_ENTRY_KERNEL_DS] = { { { 0x0000ffff, 0x00cf9300 } } }, ++ [GDT_ENTRY_DEFAULT_USER32_CS] = { { { 0x0000ffff, 0x00cffb00 } } }, ++ [GDT_ENTRY_DEFAULT_USER_DS] = { { { 0x0000ffff, 0x00cff300 } } }, ++ [GDT_ENTRY_DEFAULT_USER_CS] = { { { 0x0000ffff, 0x00affb00 } } }, ++} }; ++EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); ++ ++__u32 cleared_cpu_caps[NCAPINTS] __cpuinitdata; ++ ++/* Current gdt points %fs at the "master" per-cpu area: after this, ++ * it's on the real one. */ ++void switch_to_new_gdt(void) ++{ ++#ifndef CONFIG_XEN ++ struct desc_ptr gdt_descr; ++ ++ gdt_descr.address = (long)get_cpu_gdt_table(smp_processor_id()); ++ gdt_descr.size = GDT_SIZE - 1; ++ load_gdt(&gdt_descr); ++#else ++ void *va, *gdt_addr = get_cpu_gdt_table(smp_processor_id()); ++ unsigned long frames[16]; ++ unsigned int f = 0; ++ ++ for (va = gdt_addr; va < gdt_addr + GDT_SIZE; va += PAGE_SIZE) { ++ frames[f++] = virt_to_mfn(va); ++ make_page_readonly(va, XENFEAT_writable_descriptor_tables); ++ } ++ if (HYPERVISOR_set_gdt(frames, GDT_SIZE / sizeof(struct desc_struct))) ++ BUG(); ++#endif ++} ++ ++struct cpu_dev *cpu_devs[X86_VENDOR_NUM] = {}; ++ ++static void __cpuinit default_init(struct cpuinfo_x86 *c) ++{ ++ display_cacheinfo(c); ++} ++ ++static struct cpu_dev __cpuinitdata default_cpu = { ++ .c_init = default_init, ++ .c_vendor = "Unknown", ++}; ++static struct cpu_dev *this_cpu __cpuinitdata = &default_cpu; ++ ++int __cpuinit get_model_name(struct cpuinfo_x86 *c) ++{ ++ unsigned int *v; ++ ++ if (c->extended_cpuid_level < 0x80000004) ++ return 0; ++ ++ v = (unsigned int *) c->x86_model_id; ++ cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]); ++ cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]); ++ cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]); ++ c->x86_model_id[48] = 0; ++ return 1; ++} ++ ++ ++void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c) ++{ ++ unsigned int n, dummy, ebx, ecx, edx; ++ ++ n = c->extended_cpuid_level; ++ ++ if (n >= 0x80000005) { ++ cpuid(0x80000005, &dummy, &ebx, &ecx, &edx); ++ printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), " ++ "D cache %dK (%d bytes/line)\n", ++ edx>>24, edx&0xFF, ecx>>24, ecx&0xFF); ++ c->x86_cache_size = (ecx>>24) + (edx>>24); ++ /* On K8 L1 TLB is inclusive, so don't count it */ ++ c->x86_tlbsize = 0; ++ } ++ ++ if (n >= 0x80000006) { ++ cpuid(0x80000006, &dummy, &ebx, &ecx, &edx); ++ ecx = cpuid_ecx(0x80000006); ++ c->x86_cache_size = ecx >> 16; ++ c->x86_tlbsize += ((ebx >> 16) & 0xfff) + (ebx & 0xfff); ++ ++ printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n", ++ c->x86_cache_size, ecx & 0xFF); ++ } ++} ++ ++void __cpuinit detect_ht(struct cpuinfo_x86 *c) ++{ ++#ifdef CONFIG_SMP ++ u32 eax, ebx, ecx, edx; ++ int index_msb, core_bits; ++ ++ cpuid(1, &eax, &ebx, &ecx, &edx); ++ ++ ++ if (!cpu_has(c, X86_FEATURE_HT)) ++ return; ++ if (cpu_has(c, X86_FEATURE_CMP_LEGACY)) ++ goto out; ++ ++ smp_num_siblings = (ebx & 0xff0000) >> 16; ++ ++ if (smp_num_siblings == 1) { ++ printk(KERN_INFO "CPU: Hyper-Threading is disabled\n"); ++ } else if (smp_num_siblings > 1) { ++ ++ if (smp_num_siblings > NR_CPUS) { ++ printk(KERN_WARNING "CPU: Unsupported number of " ++ "siblings %d", smp_num_siblings); ++ smp_num_siblings = 1; ++ return; ++ } ++ ++ index_msb = get_count_order(smp_num_siblings); ++ c->phys_proc_id = phys_pkg_id(index_msb); ++ ++ smp_num_siblings = smp_num_siblings / c->x86_max_cores; ++ ++ index_msb = get_count_order(smp_num_siblings); ++ ++ core_bits = get_count_order(c->x86_max_cores); ++ ++ c->cpu_core_id = phys_pkg_id(index_msb) & ++ ((1 << core_bits) - 1); ++ } ++out: ++ if ((c->x86_max_cores * smp_num_siblings) > 1) { ++ printk(KERN_INFO "CPU: Physical Processor ID: %d\n", ++ c->phys_proc_id); ++ printk(KERN_INFO "CPU: Processor Core ID: %d\n", ++ c->cpu_core_id); ++ } ++ ++#endif ++} ++ ++static void __cpuinit get_cpu_vendor(struct cpuinfo_x86 *c) ++{ ++ char *v = c->x86_vendor_id; ++ int i; ++ static int printed; ++ ++ for (i = 0; i < X86_VENDOR_NUM; i++) { ++ if (cpu_devs[i]) { ++ if (!strcmp(v, cpu_devs[i]->c_ident[0]) || ++ (cpu_devs[i]->c_ident[1] && ++ !strcmp(v, cpu_devs[i]->c_ident[1]))) { ++ c->x86_vendor = i; ++ this_cpu = cpu_devs[i]; ++ return; ++ } ++ } ++ } ++ if (!printed) { ++ printed++; ++ printk(KERN_ERR "CPU: Vendor unknown, using generic init.\n"); ++ printk(KERN_ERR "CPU: Your system may be unstable.\n"); ++ } ++ c->x86_vendor = X86_VENDOR_UNKNOWN; ++} ++ ++static void __init early_cpu_support_print(void) ++{ ++ int i,j; ++ struct cpu_dev *cpu_devx; ++ ++ printk("KERNEL supported cpus:\n"); ++ for (i = 0; i < X86_VENDOR_NUM; i++) { ++ cpu_devx = cpu_devs[i]; ++ if (!cpu_devx) ++ continue; ++ for (j = 0; j < 2; j++) { ++ if (!cpu_devx->c_ident[j]) ++ continue; ++ printk(" %s %s\n", cpu_devx->c_vendor, ++ cpu_devx->c_ident[j]); ++ } ++ } ++} ++ ++/* ++ * The NOPL instruction is supposed to exist on all CPUs with ++ * family >= 6, unfortunately, that's not true in practice because ++ * of early VIA chips and (more importantly) broken virtualizers that ++ * are not easy to detect. Hence, probe for it based on first ++ * principles. ++ * ++ * Note: no 64-bit chip is known to lack these, but put the code here ++ * for consistency with 32 bits, and to make it utterly trivial to ++ * diagnose the problem should it ever surface. ++ */ ++static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) ++{ ++ const u32 nopl_signature = 0x888c53b1; /* Random number */ ++ u32 has_nopl = nopl_signature; ++ ++ clear_cpu_cap(c, X86_FEATURE_NOPL); ++ if (c->x86 >= 6) { ++ asm volatile("\n" ++ "1: .byte 0x0f,0x1f,0xc0\n" /* nopl %eax */ ++ "2:\n" ++ " .section .fixup,\"ax\"\n" ++ "3: xor %0,%0\n" ++ " jmp 2b\n" ++ " .previous\n" ++ _ASM_EXTABLE(1b,3b) ++ : "+a" (has_nopl)); ++ ++ if (has_nopl == nopl_signature) ++ set_cpu_cap(c, X86_FEATURE_NOPL); ++ } ++} ++ ++static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c); ++ ++void __init early_cpu_init(void) ++{ ++ struct cpu_vendor_dev *cvdev; ++ ++ for (cvdev = __x86cpuvendor_start ; ++ cvdev < __x86cpuvendor_end ; ++ cvdev++) ++ cpu_devs[cvdev->vendor] = cvdev->cpu_dev; ++ early_cpu_support_print(); ++ early_identify_cpu(&boot_cpu_data); ++} ++ ++/* Do some early cpuid on the boot CPU to get some parameter that are ++ needed before check_bugs. Everything advanced is in identify_cpu ++ below. */ ++static void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c) ++{ ++ u32 tfms, xlvl; ++ ++ c->loops_per_jiffy = loops_per_jiffy; ++ c->x86_cache_size = -1; ++ c->x86_vendor = X86_VENDOR_UNKNOWN; ++ c->x86_model = c->x86_mask = 0; /* So far unknown... */ ++ c->x86_vendor_id[0] = '\0'; /* Unset */ ++ c->x86_model_id[0] = '\0'; /* Unset */ ++ c->x86_clflush_size = 64; ++ c->x86_cache_alignment = c->x86_clflush_size; ++ c->x86_max_cores = 1; ++ c->x86_coreid_bits = 0; ++ c->extended_cpuid_level = 0; ++ memset(&c->x86_capability, 0, sizeof c->x86_capability); ++ ++ /* Get vendor name */ ++ cpuid(0x00000000, (unsigned int *)&c->cpuid_level, ++ (unsigned int *)&c->x86_vendor_id[0], ++ (unsigned int *)&c->x86_vendor_id[8], ++ (unsigned int *)&c->x86_vendor_id[4]); ++ ++ get_cpu_vendor(c); ++ ++ /* Initialize the standard set of capabilities */ ++ /* Note that the vendor-specific code below might override */ ++ ++ /* Intel-defined flags: level 0x00000001 */ ++ if (c->cpuid_level >= 0x00000001) { ++ __u32 misc; ++ cpuid(0x00000001, &tfms, &misc, &c->x86_capability[4], ++ &c->x86_capability[0]); ++ c->x86 = (tfms >> 8) & 0xf; ++ c->x86_model = (tfms >> 4) & 0xf; ++ c->x86_mask = tfms & 0xf; ++ if (c->x86 == 0xf) ++ c->x86 += (tfms >> 20) & 0xff; ++ if (c->x86 >= 0x6) ++ c->x86_model += ((tfms >> 16) & 0xF) << 4; ++ if (test_cpu_cap(c, X86_FEATURE_CLFLSH)) ++ c->x86_clflush_size = ((misc >> 8) & 0xff) * 8; ++ } else { ++ /* Have CPUID level 0 only - unheard of */ ++ c->x86 = 4; ++ } ++ ++ c->initial_apicid = (cpuid_ebx(1) >> 24) & 0xff; ++#ifdef CONFIG_SMP ++ c->phys_proc_id = c->initial_apicid; ++#endif ++ /* AMD-defined flags: level 0x80000001 */ ++ xlvl = cpuid_eax(0x80000000); ++ c->extended_cpuid_level = xlvl; ++ if ((xlvl & 0xffff0000) == 0x80000000) { ++ if (xlvl >= 0x80000001) { ++ c->x86_capability[1] = cpuid_edx(0x80000001); ++ c->x86_capability[6] = cpuid_ecx(0x80000001); ++ } ++ if (xlvl >= 0x80000004) ++ get_model_name(c); /* Default name */ ++ } ++ ++ /* Transmeta-defined flags: level 0x80860001 */ ++ xlvl = cpuid_eax(0x80860000); ++ if ((xlvl & 0xffff0000) == 0x80860000) { ++ /* Don't set x86_cpuid_level here for now to not confuse. */ ++ if (xlvl >= 0x80860001) ++ c->x86_capability[2] = cpuid_edx(0x80860001); ++ } ++ ++ if (c->extended_cpuid_level >= 0x80000007) ++ c->x86_power = cpuid_edx(0x80000007); ++ ++ if (c->extended_cpuid_level >= 0x80000008) { ++ u32 eax = cpuid_eax(0x80000008); ++ ++ c->x86_virt_bits = (eax >> 8) & 0xff; ++ c->x86_phys_bits = eax & 0xff; ++ } ++ ++ detect_nopl(c); ++ ++ if (c->x86_vendor != X86_VENDOR_UNKNOWN && ++ cpu_devs[c->x86_vendor]->c_early_init) ++ cpu_devs[c->x86_vendor]->c_early_init(c); ++ ++ validate_pat_support(c); ++} ++ ++/* ++ * This does the hard work of actually picking apart the CPU stuff... ++ */ ++static void __cpuinit identify_cpu(struct cpuinfo_x86 *c) ++{ ++ int i; ++ ++ early_identify_cpu(c); ++ ++ init_scattered_cpuid_features(c); ++ ++#ifndef CONFIG_XEN ++ c->apicid = phys_pkg_id(0); ++#endif ++ ++ /* ++ * Vendor-specific initialization. In this section we ++ * canonicalize the feature flags, meaning if there are ++ * features a certain CPU supports which CPUID doesn't ++ * tell us, CPUID claiming incorrect flags, or other bugs, ++ * we handle them here. ++ * ++ * At the end of this section, c->x86_capability better ++ * indicate the features this CPU genuinely supports! ++ */ ++ if (this_cpu->c_init) ++ this_cpu->c_init(c); ++ ++ detect_ht(c); ++ ++ /* ++ * On SMP, boot_cpu_data holds the common feature set between ++ * all CPUs; so make sure that we indicate which features are ++ * common between the CPUs. The first time this routine gets ++ * executed, c == &boot_cpu_data. ++ */ ++ if (c != &boot_cpu_data) { ++ /* AND the already accumulated flags with these */ ++ for (i = 0; i < NCAPINTS; i++) ++ boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; ++ } ++ ++ /* Clear all flags overriden by options */ ++ for (i = 0; i < NCAPINTS; i++) ++ c->x86_capability[i] &= ~cleared_cpu_caps[i]; ++ ++#ifdef CONFIG_X86_MCE ++ mcheck_init(c); ++#endif ++ select_idle_routine(c); ++ ++#ifdef CONFIG_NUMA ++ numa_add_cpu(smp_processor_id()); ++#endif ++ ++} ++ ++void __cpuinit identify_boot_cpu(void) ++{ ++ identify_cpu(&boot_cpu_data); ++} ++ ++void __cpuinit identify_secondary_cpu(struct cpuinfo_x86 *c) ++{ ++ BUG_ON(c == &boot_cpu_data); ++ identify_cpu(c); ++ mtrr_ap_init(); ++} ++ ++static __init int setup_noclflush(char *arg) ++{ ++ setup_clear_cpu_cap(X86_FEATURE_CLFLSH); ++ return 1; ++} ++__setup("noclflush", setup_noclflush); ++ ++void __cpuinit print_cpu_info(struct cpuinfo_x86 *c) ++{ ++ if (c->x86_model_id[0]) ++ printk(KERN_CONT "%s", c->x86_model_id); ++ ++ if (c->x86_mask || c->cpuid_level >= 0) ++ printk(KERN_CONT " stepping %02x\n", c->x86_mask); ++ else ++ printk(KERN_CONT "\n"); ++} ++ ++static __init int setup_disablecpuid(char *arg) ++{ ++ int bit; ++ if (get_option(&arg, &bit) && bit < NCAPINTS*32) ++ setup_clear_cpu_cap(bit); ++ else ++ return 0; ++ return 1; ++} ++__setup("clearcpuid=", setup_disablecpuid); ++ ++cpumask_t cpu_initialized __cpuinitdata = CPU_MASK_NONE; ++ ++struct x8664_pda **_cpu_pda __read_mostly; ++EXPORT_SYMBOL(_cpu_pda); ++ ++#ifndef CONFIG_X86_NO_IDT ++struct desc_ptr idt_descr = { 256 * 16 - 1, (unsigned long) idt_table }; ++#endif ++ ++char boot_cpu_stack[IRQSTACKSIZE] __page_aligned_bss; ++ ++unsigned long __supported_pte_mask __read_mostly = ~0UL; ++EXPORT_SYMBOL_GPL(__supported_pte_mask); ++ ++static int do_not_nx __cpuinitdata; ++ ++/* noexec=on|off ++Control non executable mappings for 64bit processes. ++ ++on Enable(default) ++off Disable ++*/ ++static int __init nonx_setup(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ if (!strncmp(str, "on", 2)) { ++ __supported_pte_mask |= _PAGE_NX; ++ do_not_nx = 0; ++ } else if (!strncmp(str, "off", 3)) { ++ do_not_nx = 1; ++ __supported_pte_mask &= ~_PAGE_NX; ++ } ++ return 0; ++} ++early_param("noexec", nonx_setup); ++ ++int force_personality32; ++ ++/* noexec32=on|off ++Control non executable heap for 32bit processes. ++To control the stack too use noexec=off ++ ++on PROT_READ does not imply PROT_EXEC for 32bit processes (default) ++off PROT_READ implies PROT_EXEC ++*/ ++static int __init nonx32_setup(char *str) ++{ ++ if (!strcmp(str, "on")) ++ force_personality32 &= ~READ_IMPLIES_EXEC; ++ else if (!strcmp(str, "off")) ++ force_personality32 |= READ_IMPLIES_EXEC; ++ return 1; ++} ++__setup("noexec32=", nonx32_setup); ++ ++static void __init_refok switch_pt(int cpu) ++{ ++#ifdef CONFIG_XEN ++ if (cpu == 0) ++ xen_init_pt(); ++ xen_pt_switch(__pa_symbol(init_level4_pgt)); ++ xen_new_user_pt(__pa_symbol(__user_pgd(init_level4_pgt))); ++#endif ++} ++ ++void pda_init(int cpu) ++{ ++ struct x8664_pda *pda = cpu_pda(cpu); ++ ++ /* Setup up data that may be needed in __get_free_pages early */ ++ loadsegment(fs, 0); ++ loadsegment(gs, 0); ++#ifndef CONFIG_XEN ++ /* Memory clobbers used to order PDA accessed */ ++ mb(); ++ wrmsrl(MSR_GS_BASE, pda); ++ mb(); ++#else ++ if (HYPERVISOR_set_segment_base(SEGBASE_GS_KERNEL, ++ (unsigned long)pda)) ++ BUG(); ++#endif ++ ++ pda->cpunumber = cpu; ++ pda->irqcount = -1; ++ pda->kernelstack = (unsigned long)stack_thread_info() - ++ PDA_STACKOFFSET + THREAD_SIZE; ++ pda->active_mm = &init_mm; ++ pda->mmu_state = 0; ++ ++ if (cpu == 0) { ++ /* others are initialized in smpboot.c */ ++ pda->pcurrent = &init_task; ++ pda->irqstackptr = boot_cpu_stack; ++ pda->irqstackptr += IRQSTACKSIZE - 64; ++ } else { ++ if (!pda->irqstackptr) { ++ pda->irqstackptr = (char *) ++ __get_free_pages(GFP_ATOMIC, IRQSTACK_ORDER); ++ if (!pda->irqstackptr) ++ panic("cannot allocate irqstack for cpu %d", ++ cpu); ++ pda->irqstackptr += IRQSTACKSIZE - 64; ++ } ++ ++ if (pda->nodenumber == 0 && cpu_to_node(cpu) != NUMA_NO_NODE) ++ pda->nodenumber = cpu_to_node(cpu); ++ } ++ ++ switch_pt(cpu); ++} ++ ++#ifndef CONFIG_X86_NO_TSS ++char boot_exception_stacks[(N_EXCEPTION_STACKS - 1) * EXCEPTION_STKSZ + ++ DEBUG_STKSZ] __page_aligned_bss; ++#endif ++ ++extern asmlinkage void ignore_sysret(void); ++ ++void __cpuinit syscall_init(void) ++{ ++#ifndef CONFIG_XEN ++ /* ++ * LSTAR and STAR live in a bit strange symbiosis. ++ * They both write to the same internal register. STAR allows to ++ * set CS/DS but only a 32bit target. LSTAR sets the 64bit rip. ++ */ ++ wrmsrl(MSR_STAR, ((u64)__USER32_CS)<<48 | ((u64)__KERNEL_CS)<<32); ++ wrmsrl(MSR_LSTAR, system_call); ++ wrmsrl(MSR_CSTAR, ignore_sysret); ++ ++ /* Flags to clear on syscall */ ++ wrmsrl(MSR_SYSCALL_MASK, ++ X86_EFLAGS_TF|X86_EFLAGS_DF|X86_EFLAGS_IF|X86_EFLAGS_IOPL); ++#endif ++#ifdef CONFIG_IA32_EMULATION ++ syscall32_cpu_init(); ++#else ++ static const struct callback_register __cpuinitconst cstar = { ++ .type = CALLBACKTYPE_syscall32, ++ .address = (unsigned long)ignore_sysret ++ }; ++ ++ if (HYPERVISOR_callback_op(CALLBACKOP_register, &cstar)) ++ printk(KERN_WARNING "Unable to register CSTAR callback\n"); ++#endif ++} ++ ++void __cpuinit check_efer(void) ++{ ++ unsigned long efer; ++ ++ rdmsrl(MSR_EFER, efer); ++ if (!(efer & EFER_NX) || do_not_nx) ++ __supported_pte_mask &= ~_PAGE_NX; ++} ++ ++unsigned long kernel_eflags; ++ ++#ifndef CONFIG_X86_NO_TSS ++/* ++ * Copies of the original ist values from the tss are only accessed during ++ * debugging, no special alignment required. ++ */ ++DEFINE_PER_CPU(struct orig_ist, orig_ist); ++#endif ++ ++/* ++ * cpu_init() initializes state that is per-CPU. Some data is already ++ * initialized (naturally) in the bootstrap process, such as the GDT ++ * and IDT. We reload them nevertheless, this function acts as a ++ * 'CPU state barrier', nothing should get across. ++ * A lot of state is already set up in PDA init. ++ */ ++void __cpuinit cpu_init(void) ++{ ++ int cpu = stack_smp_processor_id(); ++#ifndef CONFIG_X86_NO_TSS ++ struct tss_struct *t = &per_cpu(init_tss, cpu); ++ struct orig_ist *orig_ist = &per_cpu(orig_ist, cpu); ++ unsigned long v; ++ char *estacks = NULL; ++ int i; ++#endif ++ struct task_struct *me; ++ ++ /* CPU 0 is initialised in head64.c */ ++ if (cpu != 0) ++ pda_init(cpu); ++#ifndef CONFIG_X86_NO_TSS ++ else ++ estacks = boot_exception_stacks; ++#endif ++ ++ me = current; ++ ++ if (cpu_test_and_set(cpu, cpu_initialized)) ++ panic("CPU#%d already initialized!\n", cpu); ++ ++ printk(KERN_INFO "Initializing CPU#%d\n", cpu); ++ ++ clear_in_cr4(X86_CR4_VME|X86_CR4_PVI|X86_CR4_TSD|X86_CR4_DE); ++ ++ /* ++ * Initialize the per-CPU GDT with the boot GDT, ++ * and set up the GDT descriptor: ++ */ ++ ++ switch_to_new_gdt(); ++#ifndef CONFIG_X86_NO_IDT ++ load_idt((const struct desc_ptr *)&idt_descr); ++#endif ++ ++ memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8); ++ syscall_init(); ++ ++ wrmsrl(MSR_FS_BASE, 0); ++ wrmsrl(MSR_KERNEL_GS_BASE, 0); ++ barrier(); ++ ++ check_efer(); ++ ++#ifndef CONFIG_X86_NO_TSS ++ /* ++ * set up and load the per-CPU TSS ++ */ ++ if (!orig_ist->ist[0]) { ++ static const unsigned int order[N_EXCEPTION_STACKS] = { ++ [0 ... N_EXCEPTION_STACKS - 1] = EXCEPTION_STACK_ORDER, ++ [DEBUG_STACK - 1] = DEBUG_STACK_ORDER ++ }; ++ for (v = 0; v < N_EXCEPTION_STACKS; v++) { ++ if (cpu) { ++ estacks = (char *)__get_free_pages(GFP_ATOMIC, order[v]); ++ if (!estacks) ++ panic("Cannot allocate exception " ++ "stack %ld %d\n", v, cpu); ++ } ++ estacks += PAGE_SIZE << order[v]; ++ orig_ist->ist[v] = t->x86_tss.ist[v] = ++ (unsigned long)estacks; ++ } ++ } ++ ++ t->x86_tss.io_bitmap_base = offsetof(struct tss_struct, io_bitmap); ++ /* ++ * <= is required because the CPU will access up to ++ * 8 bits beyond the end of the IO permission bitmap. ++ */ ++ for (i = 0; i <= IO_BITMAP_LONGS; i++) ++ t->io_bitmap[i] = ~0UL; ++#endif ++ ++ atomic_inc(&init_mm.mm_count); ++ me->active_mm = &init_mm; ++ if (me->mm) ++ BUG(); ++ enter_lazy_tlb(&init_mm, me); ++ ++ load_sp0(t, ¤t->thread); ++#ifndef CONFIG_X86_NO_TSS ++ set_tss_desc(cpu, t); ++ load_TR_desc(); ++#endif ++ load_LDT(&init_mm.context); ++ ++#ifdef CONFIG_KGDB ++ /* ++ * If the kgdb is connected no debug regs should be altered. This ++ * is only applicable when KGDB and a KGDB I/O module are built ++ * into the kernel and you are using early debugging with ++ * kgdbwait. KGDB will control the kernel HW breakpoint registers. ++ */ ++ if (kgdb_connected && arch_kgdb_ops.correct_hw_break) ++ arch_kgdb_ops.correct_hw_break(); ++ else { ++#endif ++ /* ++ * Clear all 6 debug registers: ++ */ ++ ++ set_debugreg(0UL, 0); ++ set_debugreg(0UL, 1); ++ set_debugreg(0UL, 2); ++ set_debugreg(0UL, 3); ++ set_debugreg(0UL, 6); ++ set_debugreg(0UL, 7); ++#ifdef CONFIG_KGDB ++ /* If the kgdb is connected no debug regs should be altered. */ ++ } ++#endif ++ ++ fpu_init(); ++ ++ asm ("pushfq; popq %0" : "=rm" (kernel_eflags)); ++ if (raw_irqs_disabled()) ++ kernel_eflags &= ~X86_EFLAGS_IF; ++ ++ if (is_uv_system()) ++ uv_cpu_init(); ++} +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2010-01-18/arch/x86/kernel/e820-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -0,0 +1,1553 @@ ++/* ++ * Handle the memory map. ++ * The functions here do the job until bootmem takes over. ++ * ++ * Getting sanitize_e820_map() in sync with i386 version by applying change: ++ * - Provisions for empty E820 memory regions (reported by certain BIOSes). ++ * Alex Achenbach , December 2002. ++ * Venkatesh Pallipadi ++ * ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * The e820 map is the map that gets modified e.g. with command line parameters ++ * and that is also registered with modifications in the kernel resource tree ++ * with the iomem_resource as parent. ++ * ++ * The e820_saved is directly saved after the BIOS-provided memory map is ++ * copied. It doesn't get modified afterwards. It's registered for the ++ * /sys/firmware/memmap interface. ++ * ++ * That memory map is not modified and is used as base for kexec. The kexec'd ++ * kernel should get the same memory map as the firmware provides. Then the ++ * user can e.g. boot the original kernel with mem=1G while still booting the ++ * next kernel with full memory. ++ */ ++struct e820map e820; ++#ifndef CONFIG_XEN ++struct e820map e820_saved; ++#else ++static struct e820map machine_e820; ++#define e820_saved machine_e820 ++#endif ++ ++/* For PCI or other memory-mapped resources */ ++unsigned long pci_mem_start = 0xaeedbabe; ++#ifdef CONFIG_PCI ++EXPORT_SYMBOL(pci_mem_start); ++#endif ++ ++/* ++ * This function checks if any part of the range is mapped ++ * with type. ++ */ ++int ++e820_any_mapped(u64 start, u64 end, unsigned type) ++{ ++ int i; ++ ++#ifndef CONFIG_XEN ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++#else ++ if (!is_initial_xendomain()) ++ return 0; ++ for (i = 0; i < machine_e820.nr_map; ++i) { ++ const struct e820entry *ei = &machine_e820.map[i]; ++#endif ++ ++ if (type && ei->type != type) ++ continue; ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ return 1; ++ } ++ return 0; ++} ++EXPORT_SYMBOL_GPL(e820_any_mapped); ++ ++/* ++ * This function checks if the entire range is mapped with type. ++ * ++ * Note: this function only works correct if the e820 table is sorted and ++ * not-overlapping, which is the case ++ */ ++int __init e820_all_mapped(u64 start, u64 end, unsigned type) ++{ ++ int i; ++ ++#ifndef CONFIG_XEN ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++#else ++ if (!is_initial_xendomain()) ++ return 0; ++ for (i = 0; i < machine_e820.nr_map; ++i) { ++ const struct e820entry *ei = &machine_e820.map[i]; ++#endif ++ ++ if (type && ei->type != type) ++ continue; ++ /* is the region (part) in overlap with the current region ?*/ ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ ++ /* if the region is at the beginning of we move ++ * start to the end of the region since it's ok until there ++ */ ++ if (ei->addr <= start) ++ start = ei->addr + ei->size; ++ /* ++ * if start is now at or beyond end, we're done, full ++ * coverage ++ */ ++ if (start >= end) ++ return 1; ++ } ++ return 0; ++} ++ ++/* ++ * Add a memory region to the kernel e820 map. ++ */ ++void __init e820_add_region(u64 start, u64 size, int type) ++{ ++ int x = e820.nr_map; ++ ++ if (x == ARRAY_SIZE(e820.map)) { ++ printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); ++ return; ++ } ++ ++ e820.map[x].addr = start; ++ e820.map[x].size = size; ++ e820.map[x].type = type; ++ e820.nr_map++; ++} ++ ++static void __init _e820_print_map(const struct e820map *e820, const char *who) ++{ ++ int i; ++ ++ for (i = 0; i < e820->nr_map; i++) { ++ printk(KERN_INFO " %s: %016Lx - %016Lx ", who, ++ (unsigned long long) e820->map[i].addr, ++ (unsigned long long) ++ (e820->map[i].addr + e820->map[i].size)); ++ switch (e820->map[i].type) { ++ case E820_RAM: ++ case E820_RESERVED_KERN: ++ printk(KERN_CONT "(usable)\n"); ++ break; ++ case E820_RESERVED: ++ printk(KERN_CONT "(reserved)\n"); ++ break; ++ case E820_ACPI: ++ printk(KERN_CONT "(ACPI data)\n"); ++ break; ++ case E820_NVS: ++ printk(KERN_CONT "(ACPI NVS)\n"); ++ break; ++ default: ++ printk(KERN_CONT "type %u\n", e820->map[i].type); ++ break; ++ } ++ } ++} ++ ++/* ++ * Sanitize the BIOS e820 map. ++ * ++ * Some e820 responses include overlapping entries. The following ++ * replaces the original e820 map with a new one, removing overlaps, ++ * and resolving conflicting memory types in favor of highest ++ * numbered type. ++ * ++ * The input parameter biosmap points to an array of 'struct ++ * e820entry' which on entry has elements in the range [0, *pnr_map) ++ * valid, and which has space for up to max_nr_map entries. ++ * On return, the resulting sanitized e820 map entries will be in ++ * overwritten in the same location, starting at biosmap. ++ * ++ * The integer pointed to by pnr_map must be valid on entry (the ++ * current number of valid entries located at biosmap) and will ++ * be updated on return, with the new number of valid entries ++ * (something no more than max_nr_map.) ++ * ++ * The return value from sanitize_e820_map() is zero if it ++ * successfully 'sanitized' the map entries passed in, and is -1 ++ * if it did nothing, which can happen if either of (1) it was ++ * only passed one map entry, or (2) any of the input map entries ++ * were invalid (start + size < start, meaning that the size was ++ * so big the described memory range wrapped around through zero.) ++ * ++ * Visually we're performing the following ++ * (1,2,3,4 = memory types)... ++ * ++ * Sample memory map (w/overlaps): ++ * ____22__________________ ++ * ______________________4_ ++ * ____1111________________ ++ * _44_____________________ ++ * 11111111________________ ++ * ____________________33__ ++ * ___________44___________ ++ * __________33333_________ ++ * ______________22________ ++ * ___________________2222_ ++ * _________111111111______ ++ * _____________________11_ ++ * _________________4______ ++ * ++ * Sanitized equivalent (no overlap): ++ * 1_______________________ ++ * _44_____________________ ++ * ___1____________________ ++ * ____22__________________ ++ * ______11________________ ++ * _________1______________ ++ * __________3_____________ ++ * ___________44___________ ++ * _____________33_________ ++ * _______________2________ ++ * ________________1_______ ++ * _________________4______ ++ * ___________________2____ ++ * ____________________33__ ++ * ______________________4_ ++ */ ++ ++int __init sanitize_e820_map(struct e820entry *biosmap, int max_nr_map, ++ int *pnr_map) ++{ ++ struct change_member { ++ struct e820entry *pbios; /* pointer to original bios entry */ ++ unsigned long long addr; /* address for this change point */ ++ }; ++ static struct change_member change_point_list[2*E820_X_MAX] __initdata; ++ static struct change_member *change_point[2*E820_X_MAX] __initdata; ++ static struct e820entry *overlap_list[E820_X_MAX] __initdata; ++ static struct e820entry new_bios[E820_X_MAX] __initdata; ++ struct change_member *change_tmp; ++ unsigned long current_type, last_type; ++ unsigned long long last_addr; ++ int chgidx, still_changing; ++ int overlap_entries; ++ int new_bios_entry; ++ int old_nr, new_nr, chg_nr; ++ int i; ++ ++ /* if there's only one memory region, don't bother */ ++#ifdef CONFIG_XEN ++ if (*pnr_map == 1) ++ return 0; ++#endif ++ if (*pnr_map < 2) ++ return -1; ++ ++ old_nr = *pnr_map; ++ BUG_ON(old_nr > max_nr_map); ++ ++ /* bail out if we find any unreasonable addresses in bios map */ ++ for (i = 0; i < old_nr; i++) ++ if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr) ++ return -1; ++ ++ /* create pointers for initial change-point information (for sorting) */ ++ for (i = 0; i < 2 * old_nr; i++) ++ change_point[i] = &change_point_list[i]; ++ ++ /* record all known change-points (starting and ending addresses), ++ omitting those that are for empty memory regions */ ++ chgidx = 0; ++ for (i = 0; i < old_nr; i++) { ++ if (biosmap[i].size != 0) { ++ change_point[chgidx]->addr = biosmap[i].addr; ++ change_point[chgidx++]->pbios = &biosmap[i]; ++ change_point[chgidx]->addr = biosmap[i].addr + ++ biosmap[i].size; ++ change_point[chgidx++]->pbios = &biosmap[i]; ++ } ++ } ++ chg_nr = chgidx; ++ ++ /* sort change-point list by memory addresses (low -> high) */ ++ still_changing = 1; ++ while (still_changing) { ++ still_changing = 0; ++ for (i = 1; i < chg_nr; i++) { ++ unsigned long long curaddr, lastaddr; ++ unsigned long long curpbaddr, lastpbaddr; ++ ++ curaddr = change_point[i]->addr; ++ lastaddr = change_point[i - 1]->addr; ++ curpbaddr = change_point[i]->pbios->addr; ++ lastpbaddr = change_point[i - 1]->pbios->addr; ++ ++ /* ++ * swap entries, when: ++ * ++ * curaddr > lastaddr or ++ * curaddr == lastaddr and curaddr == curpbaddr and ++ * lastaddr != lastpbaddr ++ */ ++ if (curaddr < lastaddr || ++ (curaddr == lastaddr && curaddr == curpbaddr && ++ lastaddr != lastpbaddr)) { ++ change_tmp = change_point[i]; ++ change_point[i] = change_point[i-1]; ++ change_point[i-1] = change_tmp; ++ still_changing = 1; ++ } ++ } ++ } ++ ++ /* create a new bios memory map, removing overlaps */ ++ overlap_entries = 0; /* number of entries in the overlap table */ ++ new_bios_entry = 0; /* index for creating new bios map entries */ ++ last_type = 0; /* start with undefined memory type */ ++ last_addr = 0; /* start with 0 as last starting address */ ++ ++ /* loop through change-points, determining affect on the new bios map */ ++ for (chgidx = 0; chgidx < chg_nr; chgidx++) { ++ /* keep track of all overlapping bios entries */ ++ if (change_point[chgidx]->addr == ++ change_point[chgidx]->pbios->addr) { ++ /* ++ * add map entry to overlap list (> 1 entry ++ * implies an overlap) ++ */ ++ overlap_list[overlap_entries++] = ++ change_point[chgidx]->pbios; ++ } else { ++ /* ++ * remove entry from list (order independent, ++ * so swap with last) ++ */ ++ for (i = 0; i < overlap_entries; i++) { ++ if (overlap_list[i] == ++ change_point[chgidx]->pbios) ++ overlap_list[i] = ++ overlap_list[overlap_entries-1]; ++ } ++ overlap_entries--; ++ } ++ /* ++ * if there are overlapping entries, decide which ++ * "type" to use (larger value takes precedence -- ++ * 1=usable, 2,3,4,4+=unusable) ++ */ ++ current_type = 0; ++ for (i = 0; i < overlap_entries; i++) ++ if (overlap_list[i]->type > current_type) ++ current_type = overlap_list[i]->type; ++ /* ++ * continue building up new bios map based on this ++ * information ++ */ ++ if (current_type != last_type) { ++ if (last_type != 0) { ++ new_bios[new_bios_entry].size = ++ change_point[chgidx]->addr - last_addr; ++ /* ++ * move forward only if the new size ++ * was non-zero ++ */ ++ if (new_bios[new_bios_entry].size != 0) ++ /* ++ * no more space left for new ++ * bios entries ? ++ */ ++ if (++new_bios_entry >= max_nr_map) ++ break; ++ } ++ if (current_type != 0) { ++ new_bios[new_bios_entry].addr = ++ change_point[chgidx]->addr; ++ new_bios[new_bios_entry].type = current_type; ++ last_addr = change_point[chgidx]->addr; ++ } ++ last_type = current_type; ++ } ++ } ++ /* retain count for new bios entries */ ++ new_nr = new_bios_entry; ++ ++ /* copy new bios mapping into original location */ ++ memcpy(biosmap, new_bios, new_nr * sizeof(struct e820entry)); ++ *pnr_map = new_nr; ++ ++ return 0; ++} ++ ++static int __init __append_e820_map(struct e820entry *biosmap, int nr_map) ++{ ++ while (nr_map) { ++ u64 start = biosmap->addr; ++ u64 size = biosmap->size; ++ u64 end = start + size; ++ u32 type = biosmap->type; ++ ++ /* Overflow in 64 bits? Ignore the memory map. */ ++ if (start > end) ++ return -1; ++ ++ e820_add_region(start, size, type); ++ ++ biosmap++; ++ nr_map--; ++ } ++ return 0; ++} ++ ++/* ++ * Copy the BIOS e820 map into a safe place. ++ * ++ * Sanity-check it while we're at it.. ++ * ++ * If we're lucky and live on a modern system, the setup code ++ * will have given us a memory map that we can use to properly ++ * set up memory. If we aren't, we'll fake a memory map. ++ */ ++static int __init append_e820_map(struct e820entry *biosmap, int nr_map) ++{ ++#ifndef CONFIG_XEN ++ /* Only one memory region (or negative)? Ignore it */ ++ if (nr_map < 2) ++ return -1; ++#else ++ BUG_ON(nr_map < 1); ++#endif ++ ++ return __append_e820_map(biosmap, nr_map); ++} ++ ++static u64 __init e820_update_range_map(struct e820map *e820x, u64 start, ++ u64 size, unsigned old_type, ++ unsigned new_type) ++{ ++ unsigned int i, x; ++ u64 real_updated_size = 0; ++ ++ BUG_ON(old_type == new_type); ++ ++ if (size > (ULLONG_MAX - start)) ++ size = ULLONG_MAX - start; ++ ++ for (i = 0; i < e820x->nr_map; i++) { ++ struct e820entry *ei = &e820x->map[i]; ++ u64 final_start, final_end; ++ if (ei->type != old_type) ++ continue; ++ /* totally covered? */ ++ if (ei->addr >= start && ++ (ei->addr + ei->size) <= (start + size)) { ++ ei->type = new_type; ++ real_updated_size += ei->size; ++ continue; ++ } ++ /* partially covered */ ++ final_start = max(start, ei->addr); ++ final_end = min(start + size, ei->addr + ei->size); ++ if (final_start >= final_end) ++ continue; ++ ++ x = e820x->nr_map; ++ if (x == ARRAY_SIZE(e820x->map)) { ++ printk(KERN_ERR "Too many memory map entries!\n"); ++ break; ++ } ++ e820x->map[x].addr = final_start; ++ e820x->map[x].size = final_end - final_start; ++ e820x->map[x].type = new_type; ++ e820x->nr_map++; ++ ++ real_updated_size += final_end - final_start; ++ ++ if (ei->addr < final_start) ++ continue; ++ ei->addr = final_end; ++ ei->size -= final_end - final_start; ++ } ++ return real_updated_size; ++} ++ ++u64 __init e820_update_range(u64 start, u64 size, unsigned old_type, ++ unsigned new_type) ++{ ++ return e820_update_range_map(&e820, start, size, old_type, new_type); ++} ++ ++static u64 __init e820_update_range_saved(u64 start, u64 size, ++ unsigned old_type, unsigned new_type) ++{ ++#ifdef CONFIG_XEN ++ if (is_initial_xendomain()) ++ return e820_update_range_map(&machine_e820, ++ phys_to_machine(start), size, ++ old_type, new_type); ++#endif ++ return e820_update_range_map(&e820_saved, start, size, old_type, ++ new_type); ++} ++ ++/* make e820 not cover the range */ ++u64 __init e820_remove_range(u64 start, u64 size, unsigned old_type, ++ int checktype) ++{ ++ int i; ++ u64 real_removed_size = 0; ++ ++ if (size > (ULLONG_MAX - start)) ++ size = ULLONG_MAX - start; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ u64 final_start, final_end; ++ ++ if (checktype && ei->type != old_type) ++ continue; ++ /* totally covered? */ ++ if (ei->addr >= start && ++ (ei->addr + ei->size) <= (start + size)) { ++ real_removed_size += ei->size; ++ memset(ei, 0, sizeof(struct e820entry)); ++ continue; ++ } ++ /* partially covered */ ++ final_start = max(start, ei->addr); ++ final_end = min(start + size, ei->addr + ei->size); ++ if (final_start >= final_end) ++ continue; ++ real_removed_size += final_end - final_start; ++ ++ ei->size -= final_end - final_start; ++ if (ei->addr < final_start) ++ continue; ++ ei->addr = final_end; ++ } ++ return real_removed_size; ++} ++ ++void __init update_e820(void) ++{ ++ int nr_map; ++ ++ nr_map = e820.nr_map; ++ if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr_map)) ++ return; ++ e820.nr_map = nr_map; ++ printk(KERN_INFO "modified physical RAM map:\n"); ++ _e820_print_map(&e820, "modified"); ++} ++static void __init update_e820_saved(void) ++{ ++ int nr_map; ++ ++ nr_map = e820_saved.nr_map; ++ if (sanitize_e820_map(e820_saved.map, ARRAY_SIZE(e820_saved.map), &nr_map)) ++ return; ++ e820_saved.nr_map = nr_map; ++} ++ ++#ifdef CONFIG_XEN ++#define e820 machine_e820 ++#endif ++ ++#define MAX_GAP_END 0x100000000ull ++/* ++ * Search for a gap in the e820 memory space from start_addr to end_addr. ++ */ ++__init int e820_search_gap(unsigned long *gapstart, unsigned long *gapsize, ++ unsigned long start_addr, unsigned long long end_addr) ++{ ++ unsigned long long last; ++ int i = e820.nr_map; ++ int found = 0; ++ ++ last = (end_addr && end_addr < MAX_GAP_END) ? end_addr : MAX_GAP_END; ++#ifdef CONFIG_X86_64 ++ if (start_addr >= MAX_GAP_END) ++ last = end_addr ?: (1UL << boot_cpu_data.x86_phys_bits); ++#endif ++ ++ while (--i >= 0) { ++ unsigned long long start = e820.map[i].addr; ++ unsigned long long end = start + e820.map[i].size; ++ ++ if (end < start_addr) ++ continue; ++ ++ /* ++ * Since "last" is at most 4GB, we know we'll ++ * fit in 32 bits if this condition is true ++ */ ++ if (last > end) { ++ unsigned long gap = last - end; ++ ++ if (gap >= *gapsize) { ++ *gapsize = gap; ++ *gapstart = end; ++ found = 1; ++ } ++ } ++ if (start < last) ++ last = start; ++ } ++ return found; ++} ++ ++/* ++ * Search for the biggest gap in the low 32 bits of the e820 ++ * memory space. We pass this space to PCI to assign MMIO resources ++ * for hotplug or unconfigured devices in. ++ * Hopefully the BIOS let enough space left. ++ */ ++__init void e820_setup_gap(void) ++{ ++ unsigned long gapstart, gapsize, round; ++ int found; ++ ++ gapstart = 0x10000000; ++ gapsize = 0x400000; ++ found = e820_search_gap(&gapstart, &gapsize, 0, MAX_GAP_END); ++ ++#ifdef CONFIG_X86_64 ++ if (!found) { ++ printk(KERN_ERR "PCI: Warning: Cannot find a gap in the 32bit " ++ "address range\n" ++ KERN_ERR "PCI: Unassigned devices with 32bit resource " ++ "registers may break!\n"); ++ found = e820_search_gap(&gapstart, &gapsize, MAX_GAP_END, 0); ++ WARN_ON(!found); ++ } ++#endif ++ ++ /* ++ * See how much we want to round up: start off with ++ * rounding to the next 1MB area. ++ */ ++ round = 0x100000; ++ while ((gapsize >> 4) > round) ++ round += round; ++ /* Fun with two's complement */ ++ pci_mem_start = (gapstart + round) & -round; ++ ++ printk(KERN_INFO ++ "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", ++ pci_mem_start, gapstart, gapsize); ++} ++ ++#undef e820 ++ ++#ifndef CONFIG_XEN ++/** ++ * Because of the size limitation of struct boot_params, only first ++ * 128 E820 memory entries are passed to kernel via ++ * boot_params.e820_map, others are passed via SETUP_E820_EXT node of ++ * linked list of struct setup_data, which is parsed here. ++ */ ++void __init parse_e820_ext(struct setup_data *sdata, unsigned long pa_data) ++{ ++ u32 map_len; ++ int entries; ++ struct e820entry *extmap; ++ ++ entries = sdata->len / sizeof(struct e820entry); ++ map_len = sdata->len + sizeof(struct setup_data); ++ if (map_len > PAGE_SIZE) ++ sdata = early_ioremap(pa_data, map_len); ++ extmap = (struct e820entry *)(sdata->data); ++ __append_e820_map(extmap, entries); ++ sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); ++ if (map_len > PAGE_SIZE) ++ early_iounmap(sdata, map_len); ++ printk(KERN_INFO "extended physical RAM map:\n"); ++ _e820_print_map(&e820, "extended"); ++} ++ ++#if defined(CONFIG_X86_64) || \ ++ (defined(CONFIG_X86_32) && defined(CONFIG_HIBERNATION)) ++/** ++ * Find the ranges of physical addresses that do not correspond to ++ * e820 RAM areas and mark the corresponding pages as nosave for ++ * hibernation (32 bit) or software suspend and suspend to RAM (64 bit). ++ * ++ * This function requires the e820 map to be sorted and without any ++ * overlapping entries and assumes the first e820 area to be RAM. ++ */ ++void __init e820_mark_nosave_regions(unsigned long limit_pfn) ++{ ++ int i; ++ unsigned long pfn; ++ ++ pfn = PFN_DOWN(e820.map[0].addr + e820.map[0].size); ++ for (i = 1; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ ++ if (pfn < PFN_UP(ei->addr)) ++ register_nosave_region(pfn, PFN_UP(ei->addr)); ++ ++ pfn = PFN_DOWN(ei->addr + ei->size); ++ if (ei->type != E820_RAM && ei->type != E820_RESERVED_KERN) ++ register_nosave_region(PFN_UP(ei->addr), pfn); ++ ++ if (pfn >= limit_pfn) ++ break; ++ } ++} ++#endif ++#endif ++ ++/* ++ * Early reserved memory areas. ++ */ ++#define MAX_EARLY_RES 20 ++ ++struct early_res { ++ u64 start, end; ++ char name[16]; ++ char overlap_ok; ++}; ++static struct early_res early_res[MAX_EARLY_RES] __initdata = { ++#ifndef CONFIG_XEN ++ { 0, PAGE_SIZE, "BIOS data page" }, /* BIOS data page */ ++#if defined(CONFIG_X86_64) && defined(CONFIG_X86_TRAMPOLINE) ++ { TRAMPOLINE_BASE, TRAMPOLINE_BASE + 2 * PAGE_SIZE, "TRAMPOLINE" }, ++#endif ++#if defined(CONFIG_X86_32) && defined(CONFIG_SMP) ++ /* ++ * But first pinch a few for the stack/trampoline stuff ++ * FIXME: Don't need the extra page at 4K, but need to fix ++ * trampoline before removing it. (see the GDT stuff) ++ */ ++ { PAGE_SIZE, PAGE_SIZE + PAGE_SIZE, "EX TRAMPOLINE" }, ++ /* ++ * Has to be in very low memory so we can execute ++ * real-mode AP code. ++ */ ++ { TRAMPOLINE_BASE, TRAMPOLINE_BASE + PAGE_SIZE, "TRAMPOLINE" }, ++#endif ++#endif ++ {} ++}; ++ ++static int __init find_overlapped_early(u64 start, u64 end) ++{ ++ int i; ++ struct early_res *r; ++ ++ for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { ++ r = &early_res[i]; ++ if (end > r->start && start < r->end) ++ break; ++ } ++ ++ return i; ++} ++ ++/* ++ * Drop the i-th range from the early reservation map, ++ * by copying any higher ranges down one over it, and ++ * clearing what had been the last slot. ++ */ ++static void __init drop_range(int i) ++{ ++ int j; ++ ++ for (j = i + 1; j < MAX_EARLY_RES && early_res[j].end; j++) ++ ; ++ ++ memmove(&early_res[i], &early_res[i + 1], ++ (j - 1 - i) * sizeof(struct early_res)); ++ ++ early_res[j - 1].end = 0; ++} ++ ++/* ++ * Split any existing ranges that: ++ * 1) are marked 'overlap_ok', and ++ * 2) overlap with the stated range [start, end) ++ * into whatever portion (if any) of the existing range is entirely ++ * below or entirely above the stated range. Drop the portion ++ * of the existing range that overlaps with the stated range, ++ * which will allow the caller of this routine to then add that ++ * stated range without conflicting with any existing range. ++ */ ++static void __init drop_overlaps_that_are_ok(u64 start, u64 end) ++{ ++ int i; ++ struct early_res *r; ++ u64 lower_start, lower_end; ++ u64 upper_start, upper_end; ++ char name[16]; ++ ++ for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { ++ r = &early_res[i]; ++ ++ /* Continue past non-overlapping ranges */ ++ if (end <= r->start || start >= r->end) ++ continue; ++ ++ /* ++ * Leave non-ok overlaps as is; let caller ++ * panic "Overlapping early reservations" ++ * when it hits this overlap. ++ */ ++ if (!r->overlap_ok) ++ return; ++ ++ /* ++ * We have an ok overlap. We will drop it from the early ++ * reservation map, and add back in any non-overlapping ++ * portions (lower or upper) as separate, overlap_ok, ++ * non-overlapping ranges. ++ */ ++ ++ /* 1. Note any non-overlapping (lower or upper) ranges. */ ++ strncpy(name, r->name, sizeof(name) - 1); ++ ++ lower_start = lower_end = 0; ++ upper_start = upper_end = 0; ++ if (r->start < start) { ++ lower_start = r->start; ++ lower_end = start; ++ } ++ if (r->end > end) { ++ upper_start = end; ++ upper_end = r->end; ++ } ++ ++ /* 2. Drop the original ok overlapping range */ ++ drop_range(i); ++ ++ i--; /* resume for-loop on copied down entry */ ++ ++ /* 3. Add back in any non-overlapping ranges. */ ++ if (lower_end) ++ reserve_early_overlap_ok(lower_start, lower_end, name); ++ if (upper_end) ++ reserve_early_overlap_ok(upper_start, upper_end, name); ++ } ++} ++ ++static void __init __reserve_early(u64 start, u64 end, char *name, ++ int overlap_ok) ++{ ++ int i; ++ struct early_res *r; ++ ++ i = find_overlapped_early(start, end); ++ if (i >= MAX_EARLY_RES) ++ panic("Too many early reservations"); ++ r = &early_res[i]; ++ if (r->end) ++ panic("Overlapping early reservations " ++ "%llx-%llx %s to %llx-%llx %s\n", ++ start, end - 1, name?name:"", r->start, ++ r->end - 1, r->name); ++ r->start = start; ++ r->end = end; ++ r->overlap_ok = overlap_ok; ++ if (name) ++ strncpy(r->name, name, sizeof(r->name) - 1); ++} ++ ++/* ++ * A few early reservtations come here. ++ * ++ * The 'overlap_ok' in the name of this routine does -not- mean it ++ * is ok for these reservations to overlap an earlier reservation. ++ * Rather it means that it is ok for subsequent reservations to ++ * overlap this one. ++ * ++ * Use this entry point to reserve early ranges when you are doing ++ * so out of "Paranoia", reserving perhaps more memory than you need, ++ * just in case, and don't mind a subsequent overlapping reservation ++ * that is known to be needed. ++ * ++ * The drop_overlaps_that_are_ok() call here isn't really needed. ++ * It would be needed if we had two colliding 'overlap_ok' ++ * reservations, so that the second such would not panic on the ++ * overlap with the first. We don't have any such as of this ++ * writing, but might as well tolerate such if it happens in ++ * the future. ++ */ ++void __init reserve_early_overlap_ok(u64 start, u64 end, char *name) ++{ ++ drop_overlaps_that_are_ok(start, end); ++ __reserve_early(start, end, name, 1); ++} ++ ++/* ++ * Most early reservations come here. ++ * ++ * We first have drop_overlaps_that_are_ok() drop any pre-existing ++ * 'overlap_ok' ranges, so that we can then reserve this memory ++ * range without risk of panic'ing on an overlapping overlap_ok ++ * early reservation. ++ */ ++void __init reserve_early(u64 start, u64 end, char *name) ++{ ++ drop_overlaps_that_are_ok(start, end); ++ __reserve_early(start, end, name, 0); ++} ++ ++void __init free_early(u64 start, u64 end) ++{ ++ struct early_res *r; ++ int i; ++ ++ i = find_overlapped_early(start, end); ++ r = &early_res[i]; ++ if (i >= MAX_EARLY_RES || r->end != end || r->start != start) ++ panic("free_early on not reserved area: %llx-%llx!", ++ start, end - 1); ++ ++ drop_range(i); ++} ++ ++void __init early_res_to_bootmem(u64 start, u64 end) ++{ ++ int i, count; ++ u64 final_start, final_end; ++ ++ count = 0; ++ for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) ++ count++; ++ ++ printk(KERN_INFO "(%d early reservations) ==> bootmem [%010llx - %010llx]\n", ++ count, start, end); ++ for (i = 0; i < count; i++) { ++ struct early_res *r = &early_res[i]; ++ printk(KERN_INFO " #%d [%010llx - %010llx] %16s", i, ++ r->start, r->end, r->name); ++ final_start = max(start, r->start); ++ final_end = min(end, r->end); ++ if (final_start >= final_end) { ++ printk(KERN_CONT "\n"); ++ continue; ++ } ++ printk(KERN_CONT " ==> [%010llx - %010llx]\n", ++ final_start, final_end); ++ reserve_bootmem_generic(final_start, final_end - final_start, ++ BOOTMEM_DEFAULT); ++ } ++} ++ ++/* Check for already reserved areas */ ++static inline int __init bad_addr(u64 *addrp, u64 size, u64 align) ++{ ++ int i; ++ u64 addr = *addrp; ++ int changed = 0; ++ struct early_res *r; ++again: ++ i = find_overlapped_early(addr, addr + size); ++ r = &early_res[i]; ++ if (i < MAX_EARLY_RES && r->end) { ++ *addrp = addr = round_up(r->end, align); ++ changed = 1; ++ goto again; ++ } ++ return changed; ++} ++ ++/* Check for already reserved areas */ ++static inline int __init bad_addr_size(u64 *addrp, u64 *sizep, u64 align) ++{ ++ int i; ++ u64 addr = *addrp, last; ++ u64 size = *sizep; ++ int changed = 0; ++again: ++ last = addr + size; ++ for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { ++ struct early_res *r = &early_res[i]; ++ if (last > r->start && addr < r->start) { ++ size = r->start - addr; ++ changed = 1; ++ goto again; ++ } ++ if (last > r->end && addr < r->end) { ++ addr = round_up(r->end, align); ++ size = last - addr; ++ changed = 1; ++ goto again; ++ } ++ if (last <= r->end && addr >= r->start) { ++ (*sizep)++; ++ return 0; ++ } ++ } ++ if (changed) { ++ *addrp = addr; ++ *sizep = size; ++ } ++ return changed; ++} ++ ++/* ++ * Find a free area with specified alignment in a specific range. ++ */ ++u64 __init find_e820_area(u64 start, u64 end, u64 size, u64 align) ++{ ++ int i; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ u64 addr, last; ++ u64 ei_last; ++ ++ if (ei->type != E820_RAM) ++ continue; ++ addr = round_up(ei->addr, align); ++ ei_last = ei->addr + ei->size; ++ if (addr < start) ++ addr = round_up(start, align); ++ if (addr >= ei_last) ++ continue; ++ while (bad_addr(&addr, size, align) && addr+size <= ei_last) ++ ; ++ last = addr + size; ++ if (last > ei_last) ++ continue; ++ if (last > end) ++ continue; ++ return addr; ++ } ++ return -1ULL; ++} ++ ++/* ++ * Find next free range after *start ++ */ ++u64 __init find_e820_area_size(u64 start, u64 *sizep, u64 align) ++{ ++ int i; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ u64 addr, last; ++ u64 ei_last; ++ ++ if (ei->type != E820_RAM) ++ continue; ++ addr = round_up(ei->addr, align); ++ ei_last = ei->addr + ei->size; ++ if (addr < start) ++ addr = round_up(start, align); ++ if (addr >= ei_last) ++ continue; ++ *sizep = ei_last - addr; ++ while (bad_addr_size(&addr, sizep, align) && ++ addr + *sizep <= ei_last) ++ ; ++ last = addr + *sizep; ++ if (last > ei_last) ++ continue; ++ return addr; ++ } ++ ++ return -1ULL; ++} ++ ++/* ++ * pre allocated 4k and reserved it in e820 ++ */ ++u64 __init early_reserve_e820(u64 startt, u64 sizet, u64 align) ++{ ++ u64 size = 0; ++ u64 addr; ++ u64 start; ++#ifdef CONFIG_XEN ++ unsigned int order = get_order(sizet); ++ ++ if (is_initial_xendomain()) { ++ sizet = PAGE_SIZE << order; ++ if (align < PAGE_SIZE) ++ align = PAGE_SIZE; ++ } ++#endif ++ for (start = startt; ; start += size) { ++ start = find_e820_area_size(start, &size, align); ++ if (!(start + 1)) ++ return 0; ++ if (size >= sizet) ++ break; ++ } ++ ++#ifdef CONFIG_X86_32 ++ if (start >= MAXMEM) ++ return 0; ++ if (start + size > MAXMEM) ++ size = MAXMEM - start; ++#endif ++#ifdef CONFIG_XEN ++ if ((start >> PAGE_SHIFT) >= xen_start_info->nr_pages) ++ return 0; ++ if (PFN_UP(start + size) > xen_start_info->nr_pages) ++ size = ((u64)xen_start_info->nr_pages << PAGE_SHIFT) - start; ++#endif ++ ++ addr = round_down(start + size - sizet, align); ++ if (addr < start) ++ return 0; ++#ifdef CONFIG_XEN ++ if (is_initial_xendomain()) { ++ int rc; ++ unsigned long max_initmap_pfn; ++ ++ max_initmap_pfn = ALIGN(PFN_UP(__pa(xen_start_info->pt_base)) ++ + xen_start_info->nr_pt_frames ++ + 1 + (1 << (19 - PAGE_SHIFT)), ++ 1UL << (22 - PAGE_SHIFT)); ++#ifdef CONFIG_X86_32 ++ if ((addr >> PAGE_SHIFT) ++ < max(max_initmap_pfn, max_pfn_mapped)) ++ rc = xen_create_contiguous_region((unsigned long) ++ __va(addr), ++ order, 32); ++#else ++ if ((addr >> PAGE_SHIFT) < max_pfn_mapped) ++ rc = xen_create_contiguous_region((unsigned long) ++ __va(addr), ++ order, 32); ++ else if ((addr >> PAGE_SHIFT) < max_initmap_pfn) ++ rc = xen_create_contiguous_region(__START_KERNEL_map ++ + addr, ++ order, 32); ++#endif ++ else ++ rc = early_create_contiguous_region(addr >> PAGE_SHIFT, ++ order, 32); ++ if (rc) ++ return 0; ++ } ++#endif ++ e820_update_range(addr, sizet, E820_RAM, E820_RESERVED); ++ e820_update_range_saved(addr, sizet, E820_RAM, E820_RESERVED); ++ printk(KERN_INFO "update e820 for early_reserve_e820\n"); ++ update_e820(); ++ update_e820_saved(); ++ ++ return addr; ++} ++ ++#ifdef CONFIG_X86_32 ++# ifdef CONFIG_X86_PAE ++# define MAX_ARCH_PFN (1ULL<<(40-PAGE_SHIFT)) ++# else ++# define MAX_ARCH_PFN (1ULL<<(32-PAGE_SHIFT)) ++# endif ++#else /* CONFIG_X86_32 */ ++# define MAX_ARCH_PFN MAXMEM>>PAGE_SHIFT ++#endif ++ ++/* ++ * Find the highest page frame number we have available ++ */ ++static unsigned long __init e820_end_pfn(unsigned long limit_pfn, unsigned type) ++{ ++ int i; ++ unsigned long last_pfn = 0; ++ unsigned long max_arch_pfn = MAX_ARCH_PFN; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ unsigned long start_pfn; ++ unsigned long end_pfn; ++ ++ if (ei->type != type) ++ continue; ++ ++ start_pfn = ei->addr >> PAGE_SHIFT; ++ end_pfn = (ei->addr + ei->size) >> PAGE_SHIFT; ++ ++ if (start_pfn >= limit_pfn) ++ continue; ++ if (end_pfn > limit_pfn) { ++ last_pfn = limit_pfn; ++ break; ++ } ++ if (end_pfn > last_pfn) ++ last_pfn = end_pfn; ++ } ++ ++ if (last_pfn > max_arch_pfn) ++ last_pfn = max_arch_pfn; ++ ++ printk(KERN_INFO "last_pfn = %#lx max_arch_pfn = %#lx\n", ++ last_pfn, max_arch_pfn); ++ return last_pfn; ++} ++unsigned long __init e820_end_of_ram_pfn(void) ++{ ++ return e820_end_pfn(MAX_ARCH_PFN, E820_RAM); ++} ++ ++unsigned long __init e820_end_of_low_ram_pfn(void) ++{ ++ return e820_end_pfn(1UL<<(32 - PAGE_SHIFT), E820_RAM); ++} ++/* ++ * Finds an active region in the address range from start_pfn to last_pfn and ++ * returns its range in ei_startpfn and ei_endpfn for the e820 entry. ++ */ ++int __init e820_find_active_region(const struct e820entry *ei, ++ unsigned long start_pfn, ++ unsigned long last_pfn, ++ unsigned long *ei_startpfn, ++ unsigned long *ei_endpfn) ++{ ++ u64 align = PAGE_SIZE; ++ ++#ifdef CONFIG_XEN ++ if (last_pfn > xen_start_info->nr_pages) ++ last_pfn = xen_start_info->nr_pages; ++#endif ++ ++ *ei_startpfn = round_up(ei->addr, align) >> PAGE_SHIFT; ++ *ei_endpfn = round_down(ei->addr + ei->size, align) >> PAGE_SHIFT; ++ ++ /* Skip map entries smaller than a page */ ++ if (*ei_startpfn >= *ei_endpfn) ++ return 0; ++ ++ /* Skip if map is outside the node */ ++ if (ei->type != E820_RAM || *ei_endpfn <= start_pfn || ++ *ei_startpfn >= last_pfn) ++ return 0; ++ ++ /* Check for overlaps */ ++ if (*ei_startpfn < start_pfn) ++ *ei_startpfn = start_pfn; ++ if (*ei_endpfn > last_pfn) ++ *ei_endpfn = last_pfn; ++ ++ return 1; ++} ++ ++/* Walk the e820 map and register active regions within a node */ ++void __init e820_register_active_regions(int nid, unsigned long start_pfn, ++ unsigned long last_pfn) ++{ ++ unsigned long ei_startpfn; ++ unsigned long ei_endpfn; ++ int i; ++ ++ for (i = 0; i < e820.nr_map; i++) ++ if (e820_find_active_region(&e820.map[i], ++ start_pfn, last_pfn, ++ &ei_startpfn, &ei_endpfn)) ++ add_active_range(nid, ei_startpfn, ei_endpfn); ++#ifdef CONFIG_XEN ++ BUG_ON(nid); ++ add_active_range(nid, last_pfn, last_pfn); ++#endif ++} ++ ++/* ++ * Find the hole size (in bytes) in the memory range. ++ * @start: starting address of the memory range to scan ++ * @end: ending address of the memory range to scan ++ */ ++u64 __init e820_hole_size(u64 start, u64 end) ++{ ++ unsigned long start_pfn = start >> PAGE_SHIFT; ++ unsigned long last_pfn = end >> PAGE_SHIFT; ++ unsigned long ei_startpfn, ei_endpfn, ram = 0; ++ int i; ++ ++ for (i = 0; i < e820.nr_map; i++) { ++ if (e820_find_active_region(&e820.map[i], ++ start_pfn, last_pfn, ++ &ei_startpfn, &ei_endpfn)) ++ ram += ei_endpfn - ei_startpfn; ++ } ++ return end - start - ((u64)ram << PAGE_SHIFT); ++} ++ ++static void early_panic(char *msg) ++{ ++ early_printk(msg); ++ panic(msg); ++} ++ ++static int userdef __initdata; ++ ++/* "mem=nopentium" disables the 4MB page tables. */ ++static int __init parse_memopt(char *p) ++{ ++ u64 mem_size, current_end; ++ unsigned int i; ++ ++ if (!p) ++ return -EINVAL; ++ ++#ifdef CONFIG_X86_32 ++ if (!strcmp(p, "nopentium")) { ++ setup_clear_cpu_cap(X86_FEATURE_PSE); ++ return 0; ++ } ++#endif ++ ++ userdef = 1; ++ mem_size = memparse(p, &p); ++ e820_remove_range(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); ++ ++ i = e820.nr_map - 1; ++ current_end = e820.map[i].addr + e820.map[i].size; ++ if (current_end < mem_size) { ++ /* ++ * The e820 map ends before our requested size so ++ * extend the final entry to the requested address. ++ */ ++ if (e820.map[i].type == E820_RAM) ++ e820.map[i].size = mem_size - e820.map[i].addr; ++ else ++ e820_add_region(current_end, mem_size - current_end, E820_RAM); ++ } ++ ++ return 0; ++} ++early_param("mem", parse_memopt); ++ ++#ifndef CONFIG_XEN ++static int __init parse_memmap_opt(char *p) ++{ ++ char *oldp; ++ u64 start_at, mem_size; ++ ++ if (!p) ++ return -EINVAL; ++ ++ if (!strncmp(p, "exactmap", 8)) { ++#ifdef CONFIG_CRASH_DUMP ++ /* ++ * If we are doing a crash dump, we still need to know ++ * the real mem size before original memory map is ++ * reset. ++ */ ++ saved_max_pfn = e820_end_of_ram_pfn(); ++#endif ++ e820.nr_map = 0; ++ userdef = 1; ++ return 0; ++ } ++ ++ oldp = p; ++ mem_size = memparse(p, &p); ++ if (p == oldp) ++ return -EINVAL; ++ ++ userdef = 1; ++ if (*p == '@') { ++ start_at = memparse(p+1, &p); ++ e820_add_region(start_at, mem_size, E820_RAM); ++ } else if (*p == '#') { ++ start_at = memparse(p+1, &p); ++ e820_add_region(start_at, mem_size, E820_ACPI); ++ } else if (*p == '$') { ++ start_at = memparse(p+1, &p); ++ e820_add_region(start_at, mem_size, E820_RESERVED); ++ } else ++ e820_remove_range(mem_size, ULLONG_MAX - mem_size, E820_RAM, 1); ++ ++ return *p == '\0' ? 0 : -EINVAL; ++} ++early_param("memmap", parse_memmap_opt); ++#endif ++ ++void __init finish_e820_parsing(void) ++{ ++ if (userdef) { ++ int nr = e820.nr_map; ++ ++ if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr) < 0) ++ early_panic("Invalid user supplied memory map"); ++ e820.nr_map = nr; ++ ++ printk(KERN_INFO "user-defined physical RAM map:\n"); ++ _e820_print_map(&e820, "user"); ++ } ++} ++ ++static inline const char *e820_type_to_string(int e820_type) ++{ ++ switch (e820_type) { ++ case E820_RESERVED_KERN: ++ case E820_RAM: return "System RAM"; ++ case E820_ACPI: return "ACPI Tables"; ++ case E820_NVS: return "ACPI Non-volatile Storage"; ++ default: return "reserved"; ++ } ++} ++ ++#ifdef CONFIG_XEN ++#define e820 machine_e820 ++#endif ++ ++/* ++ * Mark e820 reserved areas as busy for the resource manager. ++ */ ++void __init e820_reserve_resources(void) ++{ ++ int i; ++ struct resource *res; ++ u64 end; ++ ++ res = alloc_bootmem_low(sizeof(struct resource) * e820.nr_map); ++ for (i = 0; i < e820.nr_map; i++) { ++ end = e820.map[i].addr + e820.map[i].size - 1; ++#ifndef CONFIG_RESOURCES_64BIT ++ if (end > 0x100000000ULL) { ++ res++; ++ continue; ++ } ++#endif ++ res->name = e820_type_to_string(e820.map[i].type); ++ res->start = e820.map[i].addr; ++ res->end = end; ++ ++ res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; ++ insert_resource(&iomem_resource, res); ++ res++; ++ } ++ ++ for (i = 0; i < e820_saved.nr_map; i++) { ++ struct e820entry *entry = &e820_saved.map[i]; ++ firmware_map_add_early(entry->addr, ++ entry->addr + entry->size - 1, ++ e820_type_to_string(entry->type)); ++ } ++} ++ ++#undef e820 ++ ++#ifndef CONFIG_XEN ++char *__init default_machine_specific_memory_setup(void) ++{ ++ char *who = "BIOS-e820"; ++ int new_nr; ++ /* ++ * Try to copy the BIOS-supplied E820-map. ++ * ++ * Otherwise fake a memory map; one section from 0k->640k, ++ * the next section from 1mb->appropriate_mem_k ++ */ ++ new_nr = boot_params.e820_entries; ++ sanitize_e820_map(boot_params.e820_map, ++ ARRAY_SIZE(boot_params.e820_map), ++ &new_nr); ++ boot_params.e820_entries = new_nr; ++ if (append_e820_map(boot_params.e820_map, boot_params.e820_entries) ++ < 0) { ++ u64 mem_size; ++ ++ /* compare results from other methods and take the greater */ ++ if (boot_params.alt_mem_k ++ < boot_params.screen_info.ext_mem_k) { ++ mem_size = boot_params.screen_info.ext_mem_k; ++ who = "BIOS-88"; ++ } else { ++ mem_size = boot_params.alt_mem_k; ++ who = "BIOS-e801"; ++ } ++ ++ e820.nr_map = 0; ++ e820_add_region(0, LOWMEMSIZE(), E820_RAM); ++ e820_add_region(HIGH_MEMORY, mem_size << 10, E820_RAM); ++ } ++ ++ /* In case someone cares... */ ++ return who; ++} ++ ++char *__init __attribute__((weak)) machine_specific_memory_setup(void) ++{ ++ if (x86_quirks->arch_memory_setup) { ++ char *who = x86_quirks->arch_memory_setup(); ++ ++ if (who) ++ return who; ++ } ++ return default_machine_specific_memory_setup(); ++} ++#endif ++ ++static char * __init _memory_setup(void) ++{ ++ int rc, nr_map; ++ struct xen_memory_map memmap; ++ static struct e820entry __initdata map[E820MAX]; ++ ++ memmap.nr_entries = E820MAX; ++ set_xen_guest_handle(memmap.buffer, map); ++ ++ rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap); ++ if (rc == -ENOSYS) { ++ memmap.nr_entries = 1; ++ map[0].addr = 0ULL; ++ map[0].size = PFN_PHYS((unsigned long long)xen_start_info->nr_pages); ++ /* 8MB slack (to balance backend allocations). */ ++ map[0].size += 8ULL << 20; ++ map[0].type = E820_RAM; ++ rc = 0; ++ } ++ BUG_ON(rc); ++ ++ nr_map = memmap.nr_entries; ++ sanitize_e820_map(map, ARRAY_SIZE(map), &nr_map); ++ ++ if (append_e820_map(map, nr_map) < 0) ++ BUG(); ++ ++#ifdef CONFIG_XEN ++ if (is_initial_xendomain()) { ++ memmap.nr_entries = E820MAX; ++ set_xen_guest_handle(memmap.buffer, machine_e820.map); ++ ++ if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)) ++ BUG(); ++ machine_e820.nr_map = memmap.nr_entries; ++ } ++#endif ++ ++ return "Xen"; ++} ++ ++void __init setup_memory_map(void) ++{ ++ char *who; ++ ++ who = _memory_setup(); ++#ifdef CONFIG_XEN ++ if (is_initial_xendomain()) { ++ printk(KERN_INFO "Xen-provided machine memory map:\n"); ++ _e820_print_map(&machine_e820, "BIOS"); ++ } else ++#endif ++ memcpy(&e820_saved, &e820, sizeof(struct e820map)); ++ printk(KERN_INFO "Xen-provided physical RAM map:\n"); ++ _e820_print_map(&e820, who); ++} +--- head-2010-01-18.orig/arch/x86/kernel/e820_32-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,860 +0,0 @@ +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +- +-struct e820map e820; +-struct change_member { +- struct e820entry *pbios; /* pointer to original bios entry */ +- unsigned long long addr; /* address for this change point */ +-}; +-static struct change_member change_point_list[2*E820MAX] __initdata; +-static struct change_member *change_point[2*E820MAX] __initdata; +-static struct e820entry *overlap_list[E820MAX] __initdata; +-static struct e820entry new_bios[E820MAX] __initdata; +-/* For PCI or other memory-mapped resources */ +-unsigned long pci_mem_start = 0x10000000; +-#ifdef CONFIG_PCI +-EXPORT_SYMBOL(pci_mem_start); +-#endif +-extern int user_defined_memmap; +- +-static struct resource system_rom_resource = { +- .name = "System ROM", +- .start = 0xf0000, +- .end = 0xfffff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-static struct resource extension_rom_resource = { +- .name = "Extension ROM", +- .start = 0xe0000, +- .end = 0xeffff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-static struct resource adapter_rom_resources[] = { { +- .name = "Adapter ROM", +- .start = 0xc8000, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}, { +- .name = "Adapter ROM", +- .start = 0, +- .end = 0, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-} }; +- +-static struct resource video_rom_resource = { +- .name = "Video ROM", +- .start = 0xc0000, +- .end = 0xc7fff, +- .flags = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM +-}; +- +-#define ROMSIGNATURE 0xaa55 +- +-static int __init romsignature(const unsigned char *rom) +-{ +- const unsigned short * const ptr = (const unsigned short *)rom; +- unsigned short sig; +- +- return probe_kernel_address(ptr, sig) == 0 && sig == ROMSIGNATURE; +-} +- +-static int __init romchecksum(const unsigned char *rom, unsigned long length) +-{ +- unsigned char sum, c; +- +- for (sum = 0; length && probe_kernel_address(rom++, c) == 0; length--) +- sum += c; +- return !length && !sum; +-} +- +-static void __init probe_roms(void) +-{ +- const unsigned char *rom; +- unsigned long start, length, upper; +- unsigned char c; +- int i; +- +-#ifdef CONFIG_XEN +- /* Nothing to do if not running in dom0. */ +- if (!is_initial_xendomain()) +- return; +-#endif +- +- /* video rom */ +- upper = adapter_rom_resources[0].start; +- for (start = video_rom_resource.start; start < upper; start += 2048) { +- rom = isa_bus_to_virt(start); +- if (!romsignature(rom)) +- continue; +- +- video_rom_resource.start = start; +- +- if (probe_kernel_address(rom + 2, c) != 0) +- continue; +- +- /* 0 < length <= 0x7f * 512, historically */ +- length = c * 512; +- +- /* if checksum okay, trust length byte */ +- if (length && romchecksum(rom, length)) +- video_rom_resource.end = start + length - 1; +- +- request_resource(&iomem_resource, &video_rom_resource); +- break; +- } +- +- start = (video_rom_resource.end + 1 + 2047) & ~2047UL; +- if (start < upper) +- start = upper; +- +- /* system rom */ +- request_resource(&iomem_resource, &system_rom_resource); +- upper = system_rom_resource.start; +- +- /* check for extension rom (ignore length byte!) */ +- rom = isa_bus_to_virt((unsigned long)extension_rom_resource.start); +- if (romsignature(rom)) { +- length = extension_rom_resource.end - extension_rom_resource.start + 1; +- if (romchecksum(rom, length)) { +- request_resource(&iomem_resource, &extension_rom_resource); +- upper = extension_rom_resource.start; +- } +- } +- +- /* check for adapter roms on 2k boundaries */ +- for (i = 0; i < ARRAY_SIZE(adapter_rom_resources) && start < upper; start += 2048) { +- rom = isa_bus_to_virt(start); +- if (!romsignature(rom)) +- continue; +- +- if (probe_kernel_address(rom + 2, c) != 0) +- continue; +- +- /* 0 < length <= 0x7f * 512, historically */ +- length = c * 512; +- +- /* but accept any length that fits if checksum okay */ +- if (!length || start + length > upper || !romchecksum(rom, length)) +- continue; +- +- adapter_rom_resources[i].start = start; +- adapter_rom_resources[i].end = start + length - 1; +- request_resource(&iomem_resource, &adapter_rom_resources[i]); +- +- start = adapter_rom_resources[i++].end & ~2047UL; +- } +-} +- +-#ifdef CONFIG_XEN +-static struct e820map machine_e820; +-#define e820 machine_e820 +-#endif +- +-/* +- * Request address space for all standard RAM and ROM resources +- * and also for regions reported as reserved by the e820. +- */ +-void __init init_iomem_resources(struct resource *code_resource, +- struct resource *data_resource, +- struct resource *bss_resource) +-{ +- int i; +- +- probe_roms(); +- for (i = 0; i < e820.nr_map; i++) { +- struct resource *res; +-#ifndef CONFIG_RESOURCES_64BIT +- if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL) +- continue; +-#endif +- res = kzalloc(sizeof(struct resource), GFP_ATOMIC); +- switch (e820.map[i].type) { +- case E820_RAM: res->name = "System RAM"; break; +- case E820_ACPI: res->name = "ACPI Tables"; break; +- case E820_NVS: res->name = "ACPI Non-volatile Storage"; break; +- default: res->name = "reserved"; +- } +- res->start = e820.map[i].addr; +- res->end = res->start + e820.map[i].size - 1; +- res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; +- if (request_resource(&iomem_resource, res)) { +- kfree(res); +- continue; +- } +- if (e820.map[i].type == E820_RAM) { +- /* +- * We don't know which RAM region contains kernel data, +- * so we try it repeatedly and let the resource manager +- * test it. +- */ +-#ifndef CONFIG_XEN +- request_resource(res, code_resource); +- request_resource(res, data_resource); +- request_resource(res, bss_resource); +-#endif +-#ifdef CONFIG_KEXEC +- if (crashk_res.start != crashk_res.end) +- request_resource(res, &crashk_res); +-#ifdef CONFIG_XEN +- xen_machine_kexec_register_resources(res); +-#endif +-#endif +- } +- } +-} +- +-#undef e820 +- +-#if defined(CONFIG_PM) && defined(CONFIG_HIBERNATION) +-/** +- * e820_mark_nosave_regions - Find the ranges of physical addresses that do not +- * correspond to e820 RAM areas and mark the corresponding pages as nosave for +- * hibernation. +- * +- * This function requires the e820 map to be sorted and without any +- * overlapping entries and assumes the first e820 area to be RAM. +- */ +-void __init e820_mark_nosave_regions(void) +-{ +- int i; +- unsigned long pfn; +- +- pfn = PFN_DOWN(e820.map[0].addr + e820.map[0].size); +- for (i = 1; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- +- if (pfn < PFN_UP(ei->addr)) +- register_nosave_region(pfn, PFN_UP(ei->addr)); +- +- pfn = PFN_DOWN(ei->addr + ei->size); +- if (ei->type != E820_RAM) +- register_nosave_region(PFN_UP(ei->addr), pfn); +- +- if (pfn >= max_low_pfn) +- break; +- } +-} +-#endif +- +-void __init add_memory_region(unsigned long long start, +- unsigned long long size, int type) +-{ +- int x; +- +- x = e820.nr_map; +- +- if (x == E820MAX) { +- printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); +- return; +- } +- +- e820.map[x].addr = start; +- e820.map[x].size = size; +- e820.map[x].type = type; +- e820.nr_map++; +-} /* add_memory_region */ +- +-/* +- * Sanitize the BIOS e820 map. +- * +- * Some e820 responses include overlapping entries. The following +- * replaces the original e820 map with a new one, removing overlaps. +- * +- */ +-int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map) +-{ +- struct change_member *change_tmp; +- unsigned long current_type, last_type; +- unsigned long long last_addr; +- int chgidx, still_changing; +- int overlap_entries; +- int new_bios_entry; +- int old_nr, new_nr, chg_nr; +- int i; +- +- /* +- Visually we're performing the following (1,2,3,4 = memory types)... +- +- Sample memory map (w/overlaps): +- ____22__________________ +- ______________________4_ +- ____1111________________ +- _44_____________________ +- 11111111________________ +- ____________________33__ +- ___________44___________ +- __________33333_________ +- ______________22________ +- ___________________2222_ +- _________111111111______ +- _____________________11_ +- _________________4______ +- +- Sanitized equivalent (no overlap): +- 1_______________________ +- _44_____________________ +- ___1____________________ +- ____22__________________ +- ______11________________ +- _________1______________ +- __________3_____________ +- ___________44___________ +- _____________33_________ +- _______________2________ +- ________________1_______ +- _________________4______ +- ___________________2____ +- ____________________33__ +- ______________________4_ +- */ +- /* if there's only one memory region, don't bother */ +- if (*pnr_map < 2) { +- return -1; +- } +- +- old_nr = *pnr_map; +- +- /* bail out if we find any unreasonable addresses in bios map */ +- for (i=0; iaddr = biosmap[i].addr; +- change_point[chgidx++]->pbios = &biosmap[i]; +- change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size; +- change_point[chgidx++]->pbios = &biosmap[i]; +- } +- } +- chg_nr = chgidx; /* true number of change-points */ +- +- /* sort change-point list by memory addresses (low -> high) */ +- still_changing = 1; +- while (still_changing) { +- still_changing = 0; +- for (i=1; i < chg_nr; i++) { +- /* if > , swap */ +- /* or, if current= & last=, swap */ +- if ((change_point[i]->addr < change_point[i-1]->addr) || +- ((change_point[i]->addr == change_point[i-1]->addr) && +- (change_point[i]->addr == change_point[i]->pbios->addr) && +- (change_point[i-1]->addr != change_point[i-1]->pbios->addr)) +- ) +- { +- change_tmp = change_point[i]; +- change_point[i] = change_point[i-1]; +- change_point[i-1] = change_tmp; +- still_changing=1; +- } +- } +- } +- +- /* create a new bios memory map, removing overlaps */ +- overlap_entries=0; /* number of entries in the overlap table */ +- new_bios_entry=0; /* index for creating new bios map entries */ +- last_type = 0; /* start with undefined memory type */ +- last_addr = 0; /* start with 0 as last starting address */ +- /* loop through change-points, determining affect on the new bios map */ +- for (chgidx=0; chgidx < chg_nr; chgidx++) +- { +- /* keep track of all overlapping bios entries */ +- if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr) +- { +- /* add map entry to overlap list (> 1 entry implies an overlap) */ +- overlap_list[overlap_entries++]=change_point[chgidx]->pbios; +- } +- else +- { +- /* remove entry from list (order independent, so swap with last) */ +- for (i=0; ipbios) +- overlap_list[i] = overlap_list[overlap_entries-1]; +- } +- overlap_entries--; +- } +- /* if there are overlapping entries, decide which "type" to use */ +- /* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */ +- current_type = 0; +- for (i=0; itype > current_type) +- current_type = overlap_list[i]->type; +- /* continue building up new bios map based on this information */ +- if (current_type != last_type) { +- if (last_type != 0) { +- new_bios[new_bios_entry].size = +- change_point[chgidx]->addr - last_addr; +- /* move forward only if the new size was non-zero */ +- if (new_bios[new_bios_entry].size != 0) +- if (++new_bios_entry >= E820MAX) +- break; /* no more space left for new bios entries */ +- } +- if (current_type != 0) { +- new_bios[new_bios_entry].addr = change_point[chgidx]->addr; +- new_bios[new_bios_entry].type = current_type; +- last_addr=change_point[chgidx]->addr; +- } +- last_type = current_type; +- } +- } +- new_nr = new_bios_entry; /* retain count for new bios entries */ +- +- /* copy new bios mapping into original location */ +- memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry)); +- *pnr_map = new_nr; +- +- return 0; +-} +- +-/* +- * Copy the BIOS e820 map into a safe place. +- * +- * Sanity-check it while we're at it.. +- * +- * If we're lucky and live on a modern system, the setup code +- * will have given us a memory map that we can use to properly +- * set up memory. If we aren't, we'll fake a memory map. +- * +- * We check to see that the memory map contains at least 2 elements +- * before we'll use it, because the detection code in setup.S may +- * not be perfect and most every PC known to man has two memory +- * regions: one from 0 to 640k, and one from 1mb up. (The IBM +- * thinkpad 560x, for example, does not cooperate with the memory +- * detection code.) +- */ +-int __init copy_e820_map(struct e820entry *biosmap, int nr_map) +-{ +-#ifndef CONFIG_XEN +- /* Only one memory region (or negative)? Ignore it */ +- if (nr_map < 2) +- return -1; +-#else +- BUG_ON(nr_map < 1); +-#endif +- +- do { +- u64 start = biosmap->addr; +- u64 size = biosmap->size; +- u64 end = start + size; +- u32 type = biosmap->type; +- +- /* Overflow in 64 bits? Ignore the memory map. */ +- if (start > end) +- return -1; +- +- add_memory_region(start, size, type); +- } while (biosmap++, --nr_map); +- +-#ifdef CONFIG_XEN +- if (is_initial_xendomain()) { +- struct xen_memory_map memmap; +- +- memmap.nr_entries = E820MAX; +- set_xen_guest_handle(memmap.buffer, machine_e820.map); +- +- if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)) +- BUG(); +- machine_e820.nr_map = memmap.nr_entries; +- } else +- machine_e820 = e820; +-#endif +- +- return 0; +-} +- +-/* +- * Find the highest page frame number we have available +- */ +-void __init propagate_e820_map(void) +-{ +- int i; +- +- max_pfn = 0; +- +- for (i = 0; i < e820.nr_map; i++) { +- unsigned long start, end; +- /* RAM? */ +- if (e820.map[i].type != E820_RAM) +- continue; +- start = PFN_UP(e820.map[i].addr); +- end = PFN_DOWN(e820.map[i].addr + e820.map[i].size); +- if (start >= end) +- continue; +- if (end > max_pfn) +- max_pfn = end; +- memory_present(0, start, end); +- } +-} +- +-/* +- * Register fully available low RAM pages with the bootmem allocator. +- */ +-void __init register_bootmem_low_pages(unsigned long max_low_pfn) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- unsigned long curr_pfn, last_pfn, size; +- /* +- * Reserve usable low memory +- */ +- if (e820.map[i].type != E820_RAM) +- continue; +- /* +- * We are rounding up the start address of usable memory: +- */ +- curr_pfn = PFN_UP(e820.map[i].addr); +- if (curr_pfn >= max_low_pfn) +- continue; +- /* +- * ... and at the end of the usable range downwards: +- */ +- last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size); +- +-#ifdef CONFIG_XEN +- /* +- * Truncate to the number of actual pages currently +- * present. +- */ +- if (last_pfn > xen_start_info->nr_pages) +- last_pfn = xen_start_info->nr_pages; +-#endif +- +- if (last_pfn > max_low_pfn) +- last_pfn = max_low_pfn; +- +- /* +- * .. finally, did all the rounding and playing +- * around just make the area go away? +- */ +- if (last_pfn <= curr_pfn) +- continue; +- +- size = last_pfn - curr_pfn; +- free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size)); +- } +-} +- +-void __init e820_register_memory(void) +-{ +- unsigned long gapstart, gapsize, round; +- unsigned long long last; +- int i; +- +-#ifdef CONFIG_XEN +-#define e820 machine_e820 +-#endif +- /* +- * Search for the biggest gap in the low 32 bits of the e820 +- * memory space. +- */ +- last = 0x100000000ull; +- gapstart = 0x10000000; +- gapsize = 0x400000; +- i = e820.nr_map; +- while (--i >= 0) { +- unsigned long long start = e820.map[i].addr; +- unsigned long long end = start + e820.map[i].size; +- +- /* +- * Since "last" is at most 4GB, we know we'll +- * fit in 32 bits if this condition is true +- */ +- if (last > end) { +- unsigned long gap = last - end; +- +- if (gap > gapsize) { +- gapsize = gap; +- gapstart = end; +- } +- } +- if (start < last) +- last = start; +- } +-#undef e820 +- +- /* +- * See how much we want to round up: start off with +- * rounding to the next 1MB area. +- */ +- round = 0x100000; +- while ((gapsize >> 4) > round) +- round += round; +- /* Fun with two's complement */ +- pci_mem_start = (gapstart + round) & -round; +- +- printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n", +- pci_mem_start, gapstart, gapsize); +-} +- +-void __init print_memory_map(char *who) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- printk(" %s: %016Lx - %016Lx ", who, +- e820.map[i].addr, +- e820.map[i].addr + e820.map[i].size); +- switch (e820.map[i].type) { +- case E820_RAM: printk("(usable)\n"); +- break; +- case E820_RESERVED: +- printk("(reserved)\n"); +- break; +- case E820_ACPI: +- printk("(ACPI data)\n"); +- break; +- case E820_NVS: +- printk("(ACPI NVS)\n"); +- break; +- default: printk("type %u\n", e820.map[i].type); +- break; +- } +- } +-} +- +-void __init limit_regions(unsigned long long size) +-{ +- unsigned long long current_addr = 0; +- int i; +- +- print_memory_map("limit_regions start"); +- for (i = 0; i < e820.nr_map; i++) { +- current_addr = e820.map[i].addr + e820.map[i].size; +- if (current_addr < size) +- continue; +- +- if (e820.map[i].type != E820_RAM) +- continue; +- +- if (e820.map[i].addr >= size) { +- /* +- * This region starts past the end of the +- * requested size, skip it completely. +- */ +- e820.nr_map = i; +- } else { +- e820.nr_map = i + 1; +- e820.map[i].size -= current_addr - size; +- } +- print_memory_map("limit_regions endfor"); +- return; +- } +-#ifdef CONFIG_XEN +- if (current_addr < size) { +- /* +- * The e820 map finished before our requested size so +- * extend the final entry to the requested address. +- */ +- --i; +- if (e820.map[i].type == E820_RAM) +- e820.map[i].size -= current_addr - size; +- else +- add_memory_region(current_addr, size - current_addr, E820_RAM); +- } +-#endif +- print_memory_map("limit_regions endfunc"); +-} +- +-/* +- * This function checks if any part of the range is mapped +- * with type. +- */ +-int +-e820_any_mapped(u64 start, u64 end, unsigned type) +-{ +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- const struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; ++i) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- +- if (type && ei->type != type) +- continue; +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- return 1; +- } +- return 0; +-} +-EXPORT_SYMBOL_GPL(e820_any_mapped); +- +- /* +- * This function checks if the entire range is mapped with type. +- * +- * Note: this function only works correct if the e820 table is sorted and +- * not-overlapping, which is the case +- */ +-int __init +-e820_all_mapped(unsigned long s, unsigned long e, unsigned type) +-{ +- u64 start = s; +- u64 end = e; +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; ++i) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- +- if (type && ei->type != type) +- continue; +- /* is the region (part) in overlap with the current region ?*/ +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- /* if the region is at the beginning of we move +- * start to the end of the region since it's ok until there +- */ +- if (ei->addr <= start) +- start = ei->addr + ei->size; +- /* if start is now at or beyond end, we're done, full +- * coverage */ +- if (start >= end) +- return 1; /* we're done */ +- } +- return 0; +-} +- +-static int __init parse_memmap(char *arg) +-{ +- if (!arg) +- return -EINVAL; +- +- if (strcmp(arg, "exactmap") == 0) { +-#ifdef CONFIG_CRASH_DUMP +- /* If we are doing a crash dump, we +- * still need to know the real mem +- * size before original memory map is +- * reset. +- */ +- propagate_e820_map(); +- saved_max_pfn = max_pfn; +-#endif +- e820.nr_map = 0; +- user_defined_memmap = 1; +- } else { +- /* If the user specifies memory size, we +- * limit the BIOS-provided memory map to +- * that size. exactmap can be used to specify +- * the exact map. mem=number can be used to +- * trim the existing memory map. +- */ +- unsigned long long start_at, mem_size; +- +- mem_size = memparse(arg, &arg); +- if (*arg == '@') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_RAM); +- } else if (*arg == '#') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_ACPI); +- } else if (*arg == '$') { +- start_at = memparse(arg+1, &arg); +- add_memory_region(start_at, mem_size, E820_RESERVED); +- } else { +- limit_regions(mem_size); +- user_defined_memmap = 1; +- } +- } +- return 0; +-} +-early_param("memmap", parse_memmap); +- +-#ifndef CONFIG_XEN +-void __init update_memory_range(u64 start, u64 size, unsigned old_type, +- unsigned new_type) +-{ +- int i; +- +- BUG_ON(old_type == new_type); +- +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- u64 final_start, final_end; +- if (ei->type != old_type) +- continue; +- /* totally covered? */ +- if (ei->addr >= start && ei->size <= size) { +- ei->type = new_type; +- continue; +- } +- /* partially covered */ +- final_start = max(start, ei->addr); +- final_end = min(start + size, ei->addr + ei->size); +- if (final_start >= final_end) +- continue; +- add_memory_region(final_start, final_end - final_start, +- new_type); +- } +-} +- +-void __init update_e820(void) +-{ +- u8 nr_map; +- +- nr_map = e820.nr_map; +- if (sanitize_e820_map(e820.map, &nr_map)) +- return; +- e820.nr_map = nr_map; +- printk(KERN_INFO "modified physical RAM map:\n"); +- print_memory_map("modified"); +-} +-#endif +--- head-2010-01-18.orig/arch/x86/kernel/e820_64-xen.c 2009-12-04 11:09:25.000000000 +0100 ++++ /dev/null 1970-01-01 00:00:00.000000000 +0000 +@@ -1,1052 +0,0 @@ +-/* +- * Handle the memory map. +- * The functions here do the job until bootmem takes over. +- * +- * Getting sanitize_e820_map() in sync with i386 version by applying change: +- * - Provisions for empty E820 memory regions (reported by certain BIOSes). +- * Alex Achenbach , December 2002. +- * Venkatesh Pallipadi +- * +- */ +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-struct e820map e820 __initdata; +-#ifdef CONFIG_XEN +-struct e820map machine_e820; +-#endif +- +-/* +- * PFN of last memory page. +- */ +-unsigned long end_pfn; +- +-#ifndef CONFIG_XEN +-/* +- * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. +- * The direct mapping extends to max_pfn_mapped, so that we can directly access +- * apertures, ACPI and other tables without having to play with fixmaps. +- */ +-unsigned long max_pfn_mapped; +-#endif +- +-/* +- * Last pfn which the user wants to use. +- */ +-static unsigned long __initdata end_user_pfn = MAXMEM>>PAGE_SHIFT; +- +-/* +- * Early reserved memory areas. +- */ +-#define MAX_EARLY_RES 20 +- +-struct early_res { +- unsigned long start, end; +- char name[16]; +-}; +-static struct early_res early_res[MAX_EARLY_RES] __initdata = { +-#ifndef CONFIG_XEN +- { 0, PAGE_SIZE, "BIOS data page" }, /* BIOS data page */ +-#ifdef CONFIG_X86_TRAMPOLINE +- { TRAMPOLINE_BASE, TRAMPOLINE_BASE + 2 * PAGE_SIZE, "TRAMPOLINE" }, +-#endif +-#endif +- {} +-}; +- +-void __init reserve_early(unsigned long start, unsigned long end, char *name) +-{ +- int i; +- struct early_res *r; +- for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { +- r = &early_res[i]; +- if (end > r->start && start < r->end) +- panic("Overlapping early reservations %lx-%lx %s to %lx-%lx %s\n", +- start, end - 1, name?name:"", r->start, r->end - 1, r->name); +- } +- if (i >= MAX_EARLY_RES) +- panic("Too many early reservations"); +- r = &early_res[i]; +- r->start = start; +- r->end = end; +- if (name) +- strncpy(r->name, name, sizeof(r->name) - 1); +-} +- +-void __init free_early(unsigned long start, unsigned long end) +-{ +- struct early_res *r; +- int i, j; +- +- for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { +- r = &early_res[i]; +- if (start == r->start && end == r->end) +- break; +- } +- if (i >= MAX_EARLY_RES || !early_res[i].end) +- panic("free_early on not reserved area: %lx-%lx!", start, end); +- +- for (j = i + 1; j < MAX_EARLY_RES && early_res[j].end; j++) +- ; +- +- memmove(&early_res[i], &early_res[i + 1], +- (j - 1 - i) * sizeof(struct early_res)); +- +- early_res[j - 1].end = 0; +-} +- +-void __init early_res_to_bootmem(unsigned long start, unsigned long end) +-{ +- int i; +- unsigned long final_start, final_end; +- for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { +- struct early_res *r = &early_res[i]; +- final_start = max(start, r->start); +- final_end = min(end, r->end); +- if (final_start >= final_end) +- continue; +- printk(KERN_INFO " early res: %d [%lx-%lx] %s\n", i, +- final_start, final_end - 1, r->name); +- reserve_bootmem_generic(final_start, final_end - final_start); +- } +-} +- +-/* Check for already reserved areas */ +-static inline int __init +-bad_addr(unsigned long *addrp, unsigned long size, unsigned long align) +-{ +- int i; +- unsigned long addr = *addrp, last; +- int changed = 0; +-again: +- last = addr + size; +- for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { +- struct early_res *r = &early_res[i]; +- if (last >= r->start && addr < r->end) { +- *addrp = addr = round_up(r->end, align); +- changed = 1; +- goto again; +- } +- } +- return changed; +-} +- +-/* Check for already reserved areas */ +-static inline int __init +-bad_addr_size(unsigned long *addrp, unsigned long *sizep, unsigned long align) +-{ +- int i; +- unsigned long addr = *addrp, last; +- unsigned long size = *sizep; +- int changed = 0; +-again: +- last = addr + size; +- for (i = 0; i < MAX_EARLY_RES && early_res[i].end; i++) { +- struct early_res *r = &early_res[i]; +- if (last > r->start && addr < r->start) { +- size = r->start - addr; +- changed = 1; +- goto again; +- } +- if (last > r->end && addr < r->end) { +- addr = round_up(r->end, align); +- size = last - addr; +- changed = 1; +- goto again; +- } +- if (last <= r->end && addr >= r->start) { +- (*sizep)++; +- return 0; +- } +- } +- if (changed) { +- *addrp = addr; +- *sizep = size; +- } +- return changed; +-} +-/* +- * This function checks if any part of the range is mapped +- * with type. +- */ +-int +-e820_any_mapped(unsigned long start, unsigned long end, unsigned type) +-{ +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; i++) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- +- if (type && ei->type != type) +- continue; +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- return 1; +- } +- return 0; +-} +-EXPORT_SYMBOL_GPL(e820_any_mapped); +- +-/* +- * This function checks if the entire range is mapped with type. +- * +- * Note: this function only works correct if the e820 table is sorted and +- * not-overlapping, which is the case +- */ +-int __init e820_all_mapped(unsigned long start, unsigned long end, +- unsigned type) +-{ +- int i; +- +-#ifndef CONFIG_XEN +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +-#else +- if (!is_initial_xendomain()) +- return 0; +- for (i = 0; i < machine_e820.nr_map; i++) { +- const struct e820entry *ei = &machine_e820.map[i]; +-#endif +- +- if (type && ei->type != type) +- continue; +- /* is the region (part) in overlap with the current region ?*/ +- if (ei->addr >= end || ei->addr + ei->size <= start) +- continue; +- +- /* if the region is at the beginning of we move +- * start to the end of the region since it's ok until there +- */ +- if (ei->addr <= start) +- start = ei->addr + ei->size; +- /* +- * if start is now at or beyond end, we're done, full +- * coverage +- */ +- if (start >= end) +- return 1; +- } +- return 0; +-} +- +-/* +- * Find a free area with specified alignment in a specific range. +- */ +-unsigned long __init find_e820_area(unsigned long start, unsigned long end, +- unsigned long size, unsigned long align) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- unsigned long addr, last; +- unsigned long ei_last; +- +- if (ei->type != E820_RAM) +- continue; +- addr = round_up(ei->addr, align); +- ei_last = ei->addr + ei->size; +- if (addr < start) +- addr = round_up(start, align); +- if (addr >= ei_last) +- continue; +- while (bad_addr(&addr, size, align) && addr+size <= ei_last) +- ; +- last = addr + size; +- if (last > ei_last) +- continue; +- if (last > end) +- continue; +- return addr; +- } +- return -1UL; +-} +- +-/* +- * Find next free range after *start +- */ +-unsigned long __init find_e820_area_size(unsigned long start, +- unsigned long *sizep, +- unsigned long align) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- unsigned long addr, last; +- unsigned long ei_last; +- +- if (ei->type != E820_RAM) +- continue; +- addr = round_up(ei->addr, align); +- ei_last = ei->addr + ei->size; +- if (addr < start) +- addr = round_up(start, align); +- if (addr >= ei_last) +- continue; +- *sizep = ei_last - addr; +- while (bad_addr_size(&addr, sizep, align) && +- addr + *sizep <= ei_last) +- ; +- last = addr + *sizep; +- if (last > ei_last) +- continue; +- return addr; +- } +- return -1UL; +- +-} +-/* +- * Find the highest page frame number we have available +- */ +-unsigned long __init e820_end_of_ram(void) +-{ +- unsigned long end_pfn; +- +- end_pfn = find_max_pfn_with_active_regions(); +- +- if (end_pfn > max_pfn_mapped) +- max_pfn_mapped = end_pfn; +- if (max_pfn_mapped > MAXMEM>>PAGE_SHIFT) +- max_pfn_mapped = MAXMEM>>PAGE_SHIFT; +- if (end_pfn > end_user_pfn) +- end_pfn = end_user_pfn; +- if (end_pfn > max_pfn_mapped) +- end_pfn = max_pfn_mapped; +- +- printk(KERN_INFO "max_pfn_mapped = %lu\n", max_pfn_mapped); +- return end_pfn; +-} +- +-/* +- * Mark e820 reserved areas as busy for the resource manager. +- */ +-void __init e820_reserve_resources(struct e820entry *e820, int nr_map) +-{ +- int i; +- struct resource *res; +- +- res = alloc_bootmem_low(sizeof(struct resource) * nr_map); +- for (i = 0; i < nr_map; i++) { +- switch (e820[i].type) { +- case E820_RAM: res->name = "System RAM"; break; +- case E820_ACPI: res->name = "ACPI Tables"; break; +- case E820_NVS: res->name = "ACPI Non-volatile Storage"; break; +- default: res->name = "reserved"; +- } +- res->start = e820[i].addr; +- res->end = res->start + e820[i].size - 1; +- res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; +- insert_resource(&iomem_resource, res); +- res++; +- } +-} +- +-#ifndef CONFIG_XEN +-/* +- * Find the ranges of physical addresses that do not correspond to +- * e820 RAM areas and mark the corresponding pages as nosave for software +- * suspend and suspend to RAM. +- * +- * This function requires the e820 map to be sorted and without any +- * overlapping entries and assumes the first e820 area to be RAM. +- */ +-void __init e820_mark_nosave_regions(void) +-{ +- int i; +- unsigned long paddr; +- +- paddr = round_down(e820.map[0].addr + e820.map[0].size, PAGE_SIZE); +- for (i = 1; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- +- if (paddr < ei->addr) +- register_nosave_region(PFN_DOWN(paddr), +- PFN_UP(ei->addr)); +- +- paddr = round_down(ei->addr + ei->size, PAGE_SIZE); +- if (ei->type != E820_RAM) +- register_nosave_region(PFN_UP(ei->addr), +- PFN_DOWN(paddr)); +- +- if (paddr >= (end_pfn << PAGE_SHIFT)) +- break; +- } +-} +-#endif +- +-/* +- * Finds an active region in the address range from start_pfn to end_pfn and +- * returns its range in ei_startpfn and ei_endpfn for the e820 entry. +- */ +-static int __init e820_find_active_region(const struct e820entry *ei, +- unsigned long start_pfn, +- unsigned long end_pfn, +- unsigned long *ei_startpfn, +- unsigned long *ei_endpfn) +-{ +-#ifdef CONFIG_XEN +- if (end_pfn > xen_start_info->nr_pages) +- end_pfn = xen_start_info->nr_pages; +-#endif +- +- *ei_startpfn = round_up(ei->addr, PAGE_SIZE) >> PAGE_SHIFT; +- *ei_endpfn = round_down(ei->addr + ei->size, PAGE_SIZE) >> PAGE_SHIFT; +- +- /* Skip map entries smaller than a page */ +- if (*ei_startpfn >= *ei_endpfn) +- return 0; +- +- /* Check if max_pfn_mapped should be updated */ +- if (ei->type != E820_RAM && *ei_endpfn > max_pfn_mapped) +- max_pfn_mapped = *ei_endpfn; +- +- /* Skip if map is outside the node */ +- if (ei->type != E820_RAM || *ei_endpfn <= start_pfn || +- *ei_startpfn >= end_pfn) +- return 0; +- +- /* Check for overlaps */ +- if (*ei_startpfn < start_pfn) +- *ei_startpfn = start_pfn; +- if (*ei_endpfn > end_pfn) +- *ei_endpfn = end_pfn; +- +- /* Obey end_user_pfn to save on memmap */ +- if (*ei_startpfn >= end_user_pfn) +- return 0; +- if (*ei_endpfn > end_user_pfn) +- *ei_endpfn = end_user_pfn; +- +- return 1; +-} +- +-/* Walk the e820 map and register active regions within a node */ +-void __init +-e820_register_active_regions(int nid, unsigned long start_pfn, +- unsigned long end_pfn) +-{ +- unsigned long ei_startpfn; +- unsigned long ei_endpfn; +- int i; +- +- for (i = 0; i < e820.nr_map; i++) +- if (e820_find_active_region(&e820.map[i], +- start_pfn, end_pfn, +- &ei_startpfn, &ei_endpfn)) +- add_active_range(nid, ei_startpfn, ei_endpfn); +-#ifdef CONFIG_XEN +- BUG_ON(nid); +- add_active_range(nid, end_pfn, end_pfn); +-#endif +-} +- +-/* +- * Add a memory region to the kernel e820 map. +- */ +-void __init add_memory_region(unsigned long start, unsigned long size, int type) +-{ +- int x = e820.nr_map; +- +- if (x == E820MAX) { +- printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); +- return; +- } +- +- e820.map[x].addr = start; +- e820.map[x].size = size; +- e820.map[x].type = type; +- e820.nr_map++; +-} +- +-/* +- * Find the hole size (in bytes) in the memory range. +- * @start: starting address of the memory range to scan +- * @end: ending address of the memory range to scan +- */ +-unsigned long __init e820_hole_size(unsigned long start, unsigned long end) +-{ +- unsigned long start_pfn = start >> PAGE_SHIFT; +- unsigned long end_pfn = end >> PAGE_SHIFT; +- unsigned long ei_startpfn, ei_endpfn, ram = 0; +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- if (e820_find_active_region(&e820.map[i], +- start_pfn, end_pfn, +- &ei_startpfn, &ei_endpfn)) +- ram += ei_endpfn - ei_startpfn; +- } +- return end - start - (ram << PAGE_SHIFT); +-} +- +-static void __init e820_print_map(char *who) +-{ +- int i; +- +- for (i = 0; i < e820.nr_map; i++) { +- printk(KERN_INFO " %s: %016Lx - %016Lx ", who, +- (unsigned long long) e820.map[i].addr, +- (unsigned long long) +- (e820.map[i].addr + e820.map[i].size)); +- switch (e820.map[i].type) { +- case E820_RAM: +- printk(KERN_CONT "(usable)\n"); +- break; +- case E820_RESERVED: +- printk(KERN_CONT "(reserved)\n"); +- break; +- case E820_ACPI: +- printk(KERN_CONT "(ACPI data)\n"); +- break; +- case E820_NVS: +- printk(KERN_CONT "(ACPI NVS)\n"); +- break; +- default: +- printk(KERN_CONT "type %u\n", e820.map[i].type); +- break; +- } +- } +-} +- +-/* +- * Sanitize the BIOS e820 map. +- * +- * Some e820 responses include overlapping entries. The following +- * replaces the original e820 map with a new one, removing overlaps. +- * +- */ +-static int __init sanitize_e820_map(struct e820entry *biosmap, char *pnr_map) +-{ +- struct change_member { +- struct e820entry *pbios; /* pointer to original bios entry */ +- unsigned long long addr; /* address for this change point */ +- }; +- static struct change_member change_point_list[2*E820MAX] __initdata; +- static struct change_member *change_point[2*E820MAX] __initdata; +- static struct e820entry *overlap_list[E820MAX] __initdata; +- static struct e820entry new_bios[E820MAX] __initdata; +- struct change_member *change_tmp; +- unsigned long current_type, last_type; +- unsigned long long last_addr; +- int chgidx, still_changing; +- int overlap_entries; +- int new_bios_entry; +- int old_nr, new_nr, chg_nr; +- int i; +- +- /* +- Visually we're performing the following +- (1,2,3,4 = memory types)... +- +- Sample memory map (w/overlaps): +- ____22__________________ +- ______________________4_ +- ____1111________________ +- _44_____________________ +- 11111111________________ +- ____________________33__ +- ___________44___________ +- __________33333_________ +- ______________22________ +- ___________________2222_ +- _________111111111______ +- _____________________11_ +- _________________4______ +- +- Sanitized equivalent (no overlap): +- 1_______________________ +- _44_____________________ +- ___1____________________ +- ____22__________________ +- ______11________________ +- _________1______________ +- __________3_____________ +- ___________44___________ +- _____________33_________ +- _______________2________ +- ________________1_______ +- _________________4______ +- ___________________2____ +- ____________________33__ +- ______________________4_ +- */ +- +- /* if there's only one memory region, don't bother */ +- if (*pnr_map < 2) +- return -1; +- +- old_nr = *pnr_map; +- +- /* bail out if we find any unreasonable addresses in bios map */ +- for (i = 0; i < old_nr; i++) +- if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr) +- return -1; +- +- /* create pointers for initial change-point information (for sorting) */ +- for (i = 0; i < 2 * old_nr; i++) +- change_point[i] = &change_point_list[i]; +- +- /* record all known change-points (starting and ending addresses), +- omitting those that are for empty memory regions */ +- chgidx = 0; +- for (i = 0; i < old_nr; i++) { +- if (biosmap[i].size != 0) { +- change_point[chgidx]->addr = biosmap[i].addr; +- change_point[chgidx++]->pbios = &biosmap[i]; +- change_point[chgidx]->addr = biosmap[i].addr + +- biosmap[i].size; +- change_point[chgidx++]->pbios = &biosmap[i]; +- } +- } +- chg_nr = chgidx; +- +- /* sort change-point list by memory addresses (low -> high) */ +- still_changing = 1; +- while (still_changing) { +- still_changing = 0; +- for (i = 1; i < chg_nr; i++) { +- unsigned long long curaddr, lastaddr; +- unsigned long long curpbaddr, lastpbaddr; +- +- curaddr = change_point[i]->addr; +- lastaddr = change_point[i - 1]->addr; +- curpbaddr = change_point[i]->pbios->addr; +- lastpbaddr = change_point[i - 1]->pbios->addr; +- +- /* +- * swap entries, when: +- * +- * curaddr > lastaddr or +- * curaddr == lastaddr and curaddr == curpbaddr and +- * lastaddr != lastpbaddr +- */ +- if (curaddr < lastaddr || +- (curaddr == lastaddr && curaddr == curpbaddr && +- lastaddr != lastpbaddr)) { +- change_tmp = change_point[i]; +- change_point[i] = change_point[i-1]; +- change_point[i-1] = change_tmp; +- still_changing = 1; +- } +- } +- } +- +- /* create a new bios memory map, removing overlaps */ +- overlap_entries = 0; /* number of entries in the overlap table */ +- new_bios_entry = 0; /* index for creating new bios map entries */ +- last_type = 0; /* start with undefined memory type */ +- last_addr = 0; /* start with 0 as last starting address */ +- +- /* loop through change-points, determining affect on the new bios map */ +- for (chgidx = 0; chgidx < chg_nr; chgidx++) { +- /* keep track of all overlapping bios entries */ +- if (change_point[chgidx]->addr == +- change_point[chgidx]->pbios->addr) { +- /* +- * add map entry to overlap list (> 1 entry +- * implies an overlap) +- */ +- overlap_list[overlap_entries++] = +- change_point[chgidx]->pbios; +- } else { +- /* +- * remove entry from list (order independent, +- * so swap with last) +- */ +- for (i = 0; i < overlap_entries; i++) { +- if (overlap_list[i] == +- change_point[chgidx]->pbios) +- overlap_list[i] = +- overlap_list[overlap_entries-1]; +- } +- overlap_entries--; +- } +- /* +- * if there are overlapping entries, decide which +- * "type" to use (larger value takes precedence -- +- * 1=usable, 2,3,4,4+=unusable) +- */ +- current_type = 0; +- for (i = 0; i < overlap_entries; i++) +- if (overlap_list[i]->type > current_type) +- current_type = overlap_list[i]->type; +- /* +- * continue building up new bios map based on this +- * information +- */ +- if (current_type != last_type) { +- if (last_type != 0) { +- new_bios[new_bios_entry].size = +- change_point[chgidx]->addr - last_addr; +- /* +- * move forward only if the new size +- * was non-zero +- */ +- if (new_bios[new_bios_entry].size != 0) +- /* +- * no more space left for new +- * bios entries ? +- */ +- if (++new_bios_entry >= E820MAX) +- break; +- } +- if (current_type != 0) { +- new_bios[new_bios_entry].addr = +- change_point[chgidx]->addr; +- new_bios[new_bios_entry].type = current_type; +- last_addr = change_point[chgidx]->addr; +- } +- last_type = current_type; +- } +- } +- /* retain count for new bios entries */ +- new_nr = new_bios_entry; +- +- /* copy new bios mapping into original location */ +- memcpy(biosmap, new_bios, new_nr * sizeof(struct e820entry)); +- *pnr_map = new_nr; +- +- return 0; +-} +- +-/* +- * Copy the BIOS e820 map into a safe place. +- * +- * Sanity-check it while we're at it.. +- * +- * If we're lucky and live on a modern system, the setup code +- * will have given us a memory map that we can use to properly +- * set up memory. If we aren't, we'll fake a memory map. +- */ +-static int __init copy_e820_map(struct e820entry *biosmap, int nr_map) +-{ +-#ifndef CONFIG_XEN +- /* Only one memory region (or negative)? Ignore it */ +- if (nr_map < 2) +- return -1; +-#else +- BUG_ON(nr_map < 1); +-#endif +- +- do { +- u64 start = biosmap->addr; +- u64 size = biosmap->size; +- u64 end = start + size; +- u32 type = biosmap->type; +- +- /* Overflow in 64 bits? Ignore the memory map. */ +- if (start > end) +- return -1; +- +- add_memory_region(start, size, type); +- } while (biosmap++, --nr_map); +- +-#ifdef CONFIG_XEN +- if (is_initial_xendomain()) { +- struct xen_memory_map memmap; +- +- memmap.nr_entries = E820MAX; +- set_xen_guest_handle(memmap.buffer, machine_e820.map); +- +- if (HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap)) +- BUG(); +- machine_e820.nr_map = memmap.nr_entries; +- } else +- machine_e820 = e820; +-#endif +- +- return 0; +-} +- +-static void early_panic(char *msg) +-{ +- early_printk(msg); +- panic(msg); +-} +- +-/* We're not void only for x86 32-bit compat */ +-char * __init machine_specific_memory_setup(void) +-{ +-#ifndef CONFIG_XEN +- char *who = "BIOS-e820"; +- /* +- * Try to copy the BIOS-supplied E820-map. +- * +- * Otherwise fake a memory map; one section from 0k->640k, +- * the next section from 1mb->appropriate_mem_k +- */ +- sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); +- if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) +- early_panic("Cannot find a valid memory map"); +-#else /* CONFIG_XEN */ +- char *who = "Xen"; +- int rc; +- struct xen_memory_map memmap; +- static struct e820entry __initdata map[E820MAX]; +- +- memmap.nr_entries = E820MAX; +- set_xen_guest_handle(memmap.buffer, map); +- +- rc = HYPERVISOR_memory_op(XENMEM_memory_map, &memmap); +- if ( rc == -ENOSYS ) { +- memmap.nr_entries = 1; +- map[0].addr = 0ULL; +- map[0].size = xen_start_info->nr_pages << PAGE_SHIFT; +- /* 8MB slack (to balance backend allocations). */ +- map[0].size += 8 << 20; +- map[0].type = E820_RAM; +- rc = 0; +- } +- BUG_ON(rc); +- +- sanitize_e820_map(map, (char *)&memmap.nr_entries); +- +- if (copy_e820_map(map, (char)memmap.nr_entries) < 0) +- early_panic("Cannot find a valid memory map"); +-#endif +- printk(KERN_INFO "BIOS-provided physical RAM map:\n"); +- e820_print_map(who); +- +- /* In case someone cares... */ +- return who; +-} +- +-static int __init parse_memopt(char *p) +-{ +- int i; +- unsigned long current_end; +- unsigned long end; +- +- if (!p) +- return -EINVAL; +- end_user_pfn = memparse(p, &p); +- end_user_pfn >>= PAGE_SHIFT; +- +- end = end_user_pfn<> PAGE_SHIFT); +- } +- return *p == '\0' ? 0 : -EINVAL; +-} +-early_param("memmap", parse_memmap_opt); +- +-void __init finish_e820_parsing(void) +-{ +- if (userdef) { +- char nr = e820.nr_map; +- +- if (sanitize_e820_map(e820.map, &nr) < 0) +- early_panic("Invalid user supplied memory map"); +- e820.nr_map = nr; +- +- printk(KERN_INFO "user-defined physical RAM map:\n"); +- e820_print_map("user"); +- } +-} +- +-#ifndef CONFIG_XEN +-void __init update_memory_range(u64 start, u64 size, unsigned old_type, +- unsigned new_type) +-{ +- int i; +- +- BUG_ON(old_type == new_type); +- +- for (i = 0; i < e820.nr_map; i++) { +- struct e820entry *ei = &e820.map[i]; +- u64 final_start, final_end; +- if (ei->type != old_type) +- continue; +- /* totally covered? */ +- if (ei->addr >= start && ei->size <= size) { +- ei->type = new_type; +- continue; +- } +- /* partially covered */ +- final_start = max(start, ei->addr); +- final_end = min(start + size, ei->addr + ei->size); +- if (final_start >= final_end) +- continue; +- add_memory_region(final_start, final_end - final_start, +- new_type); +- } +-} +- +-void __init update_e820(void) +-{ +- u8 nr_map; +- +- nr_map = e820.nr_map; +- if (sanitize_e820_map(e820.map, &nr_map)) +- return; +- e820.nr_map = nr_map; +- printk(KERN_INFO "modified physical RAM map:\n"); +- e820_print_map("modified"); +-} +-#endif +- +-unsigned long pci_mem_start = 0xaeedbabe; +-EXPORT_SYMBOL(pci_mem_start); +- +-/* +- * Search for the biggest gap in the low 32 bits of the e820 +- * memory space. We pass this space to PCI to assign MMIO resources +- * for hotplug or unconfigured devices in. +- * Hopefully the BIOS let enough space left. +- */ +-__init void e820_setup_gap(struct e820entry *e820, int nr_map) +-{ +- unsigned long gapstart, gapsize, round; +- unsigned long last; +- int i; +- int found = 0; +- +- last = 0x100000000ull; +- gapstart = 0x10000000; +- gapsize = 0x400000; +- i = nr_map; +- while (--i >= 0) { +- unsigned long long start = e820[i].addr; +- unsigned long long end = start + e820[i].size; +- +- /* +- * Since "last" is at most 4GB, we know we'll +- * fit in 32 bits if this condition is true +- */ +- if (last > end) { +- unsigned long gap = last - end; +- +- if (gap > gapsize) { +- gapsize = gap; +- gapstart = end; +- found = 1; +- } +- } +- if (start < last) +- last = start; +- } +- +- if (!found) { +- gapstart = (end_pfn << PAGE_SHIFT) + 1024*1024; +- printk(KERN_ERR "PCI: Warning: Cannot find a gap in the 32bit " +- "address range\n" +- KERN_ERR "PCI: Unassigned devices with 32bit resource " +- "registers may break!\n"); +- } +- +- /* +- * See how much we want to round up: start off with +- * rounding to the next 1MB area. +- */ +- round = 0x100000; +- while ((gapsize >> 4) > round) +- round += round; +- /* Fun with two's complement */ +- pci_mem_start = (gapstart + round) & -round; +- +- printk(KERN_INFO +- "Allocating PCI resources starting at %lx (gap: %lx:%lx)\n", +- pci_mem_start, gapstart, gapsize); +-} +- +-int __init arch_get_ram_range(int slot, u64 *addr, u64 *size) +-{ +- int i; +- +- if (slot < 0 || slot >= e820.nr_map) +- return -1; +- for (i = slot; i < e820.nr_map; i++) { +- if (e820.map[i].type != E820_RAM) +- continue; +- break; +- } +- if (i == e820.nr_map || e820.map[i].addr > (max_pfn << PAGE_SHIFT)) +- return -1; +- *addr = e820.map[i].addr; +- *size = min_t(u64, e820.map[i].size + e820.map[i].addr, +- max_pfn << PAGE_SHIFT) - *addr; +- return i + 1; +-} +--- head-2010-01-18.orig/arch/x86/kernel/early_printk-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/early_printk-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -225,7 +225,7 @@ static struct console simnow_console = { + static struct console *early_console = &early_vga_console; + static int early_console_initialized; + +-void early_printk(const char *fmt, ...) ++asmlinkage void early_printk(const char *fmt, ...) + { + char buf[512]; + int n; +--- head-2010-01-18.orig/arch/x86/kernel/entry_32-xen.S 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/entry_32-xen.S 2009-11-06 10:51:42.000000000 +0100 +@@ -51,15 +51,26 @@ + #include + #include + #include +-#include "irq_vectors.h" ++#include ++#include + #include + ++/* Avoid __ASSEMBLER__'ifying just for this. */ ++#include ++#define AUDIT_ARCH_I386 (EM_386|__AUDIT_ARCH_LE) ++#define __AUDIT_ARCH_LE 0x40000000 ++ ++#ifndef CONFIG_AUDITSYSCALL ++#define sysenter_audit syscall_trace_entry ++#define sysexit_audit syscall_exit_work ++#endif ++ + /* + * We use macros for low-level operations which need to be overridden + * for paravirtualization. The following will never clobber any registers: + * INTERRUPT_RETURN (aka. "iret") + * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax") +- * ENABLE_INTERRUPTS_SYSCALL_RET (aka "sti; sysexit"). ++ * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit"). + * + * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must + * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY). +@@ -277,11 +288,6 @@ END(resume_kernel) + #endif + CFI_ENDPROC + +- .macro test_tif ti_reg # system call tracing in operation / emulation +- /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */ +- testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(\ti_reg) +- .endm +- + /* SYSENTER_RETURN points to after the "sysenter" instruction in + the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */ + +@@ -338,8 +344,9 @@ sysenter_past_esp: + .previous + + GET_THREAD_INFO(%ebp) +- test_tif %ebp +- jnz syscall_trace_entry ++ testw $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) ++ jnz sysenter_audit ++sysenter_do_call: + cmpl $(nr_syscalls), %eax + jae syscall_badsys + call *sys_call_table(,%eax,4) +@@ -349,14 +356,54 @@ sysenter_past_esp: + TRACE_IRQS_OFF + movl TI_flags(%ebp), %ecx + testw $_TIF_ALLWORK_MASK, %cx +- jne syscall_exit_work ++ jne sysexit_audit ++sysenter_exit: + /* if something modifies registers it must also disable sysexit */ + movl PT_EIP(%esp), %edx + movl PT_OLDESP(%esp), %ecx + xorl %ebp,%ebp + TRACE_IRQS_ON + 1: mov PT_FS(%esp), %fs +- ENABLE_INTERRUPTS_SYSCALL_RET ++ ENABLE_INTERRUPTS_SYSEXIT ++ ++#ifdef CONFIG_AUDITSYSCALL ++sysenter_audit: ++ testw $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%ebp) ++ jnz syscall_trace_entry ++ addl $4,%esp ++ CFI_ADJUST_CFA_OFFSET -4 ++ /* %esi already in 8(%esp) 6th arg: 4th syscall arg */ ++ /* %edx already in 4(%esp) 5th arg: 3rd syscall arg */ ++ /* %ecx already in 0(%esp) 4th arg: 2nd syscall arg */ ++ movl %ebx,%ecx /* 3rd arg: 1st syscall arg */ ++ movl %eax,%edx /* 2nd arg: syscall number */ ++ movl $AUDIT_ARCH_I386,%eax /* 1st arg: audit arch */ ++ call audit_syscall_entry ++ pushl %ebx ++ CFI_ADJUST_CFA_OFFSET 4 ++ movl PT_EAX(%esp),%eax /* reload syscall number */ ++ jmp sysenter_do_call ++ ++sysexit_audit: ++ testw $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), %cx ++ jne syscall_exit_work ++ TRACE_IRQS_ON ++ ENABLE_INTERRUPTS(CLBR_ANY) ++ movl %eax,%edx /* second arg, syscall return value */ ++ cmpl $0,%eax /* is it < 0? */ ++ setl %al /* 1 if so, 0 if not */ ++ movzbl %al,%eax /* zero-extend that */ ++ inc %eax /* first arg, 0->1(AUDITSC_SUCCESS), 1->2(AUDITSC_FAILURE) */ ++ call audit_syscall_exit ++ DISABLE_INTERRUPTS(CLBR_ANY) ++ TRACE_IRQS_OFF ++ movl TI_flags(%ebp), %ecx ++ testw $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT), %cx ++ jne syscall_exit_work ++ movl PT_EAX(%esp),%eax /* reload syscall return value */ ++ jmp sysenter_exit ++#endif ++ + CFI_ENDPROC + .pushsection .fixup,"ax" + 2: movl $0,PT_FS(%esp) +@@ -400,7 +447,7 @@ ENTRY(system_call) + CFI_ADJUST_CFA_OFFSET 4 + SAVE_ALL + GET_THREAD_INFO(%ebp) +- test_tif %ebp ++ testw $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) + jnz syscall_trace_entry + cmpl $(nr_syscalls), %eax + jae syscall_badsys +@@ -413,10 +460,6 @@ syscall_exit: + # setting need_resched or sigpending + # between sampling and the iret + TRACE_IRQS_OFF +- testl $X86_EFLAGS_TF,PT_EFLAGS(%esp) # If tracing set singlestep flag on exit +- jz no_singlestep +- orl $_TIF_SINGLESTEP,TI_flags(%ebp) +-no_singlestep: + movl TI_flags(%ebp), %ecx + testw $_TIF_ALLWORK_MASK, %cx # current->work + jne syscall_exit_work +@@ -588,12 +631,8 @@ END(work_pending) + syscall_trace_entry: + movl $-ENOSYS,PT_EAX(%esp) + movl %esp, %eax +- xorl %edx,%edx +- call do_syscall_trace +- cmpl $0, %eax +- jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU, +- # so must skip actual syscall +- movl PT_ORIG_EAX(%esp), %eax ++ call syscall_trace_enter ++ /* What it returned is what we'll actually use. */ + cmpl $(nr_syscalls), %eax + jnae syscall_call + jmp syscall_exit +@@ -602,14 +641,13 @@ END(syscall_trace_entry) + # perform syscall exit tracing + ALIGN + syscall_exit_work: +- testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl ++ testb $_TIF_WORK_SYSCALL_EXIT, %cl + jz work_pending + TRACE_IRQS_ON +- ENABLE_INTERRUPTS(CLBR_ANY) # could let do_syscall_trace() call ++ ENABLE_INTERRUPTS(CLBR_ANY) # could let syscall_trace_leave() call + # schedule() instead + movl %esp, %eax +- movl $1, %edx +- call do_syscall_trace ++ call syscall_trace_leave + jmp resume_userspace + END(syscall_exit_work) + CFI_ENDPROC +@@ -1113,10 +1151,10 @@ ENTRY(native_iret) + .previous + END(native_iret) + +-ENTRY(native_irq_enable_syscall_ret) ++ENTRY(native_irq_enable_sysexit) + sti + sysexit +-END(native_irq_enable_syscall_ret) ++END(native_irq_enable_sysexit) + #endif + + KPROBE_ENTRY(int3) +@@ -1265,6 +1303,77 @@ ENTRY(kernel_thread_helper) + CFI_ENDPROC + ENDPROC(kernel_thread_helper) + ++#ifdef CONFIG_FTRACE ++#ifdef CONFIG_DYNAMIC_FTRACE ++ ++ENTRY(mcount) ++ pushl %eax ++ pushl %ecx ++ pushl %edx ++ movl 0xc(%esp), %eax ++ subl $MCOUNT_INSN_SIZE, %eax ++ ++.globl mcount_call ++mcount_call: ++ call ftrace_stub ++ ++ popl %edx ++ popl %ecx ++ popl %eax ++ ++ ret ++END(mcount) ++ ++ENTRY(ftrace_caller) ++ pushl %eax ++ pushl %ecx ++ pushl %edx ++ movl 0xc(%esp), %eax ++ movl 0x4(%ebp), %edx ++ subl $MCOUNT_INSN_SIZE, %eax ++ ++.globl ftrace_call ++ftrace_call: ++ call ftrace_stub ++ ++ popl %edx ++ popl %ecx ++ popl %eax ++ ++.globl ftrace_stub ++ftrace_stub: ++ ret ++END(ftrace_caller) ++ ++#else /* ! CONFIG_DYNAMIC_FTRACE */ ++ ++ENTRY(mcount) ++ cmpl $ftrace_stub, ftrace_trace_function ++ jnz trace ++.globl ftrace_stub ++ftrace_stub: ++ ret ++ ++ /* taken from glibc */ ++trace: ++ pushl %eax ++ pushl %ecx ++ pushl %edx ++ movl 0xc(%esp), %eax ++ movl 0x4(%ebp), %edx ++ subl $MCOUNT_INSN_SIZE, %eax ++ ++ call *ftrace_trace_function ++ ++ popl %edx ++ popl %ecx ++ popl %eax ++ ++ jmp ftrace_stub ++END(mcount) ++#endif /* CONFIG_DYNAMIC_FTRACE */ ++#endif /* CONFIG_FTRACE */ ++ + #include + + # pv syscall call handler stub +@@ -1290,7 +1399,7 @@ ENTRY(ia32pv_cstar_target) + .previous + SAVE_ALL + GET_THREAD_INFO(%ebp) +- test_tif %ebp ++ testw $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) + jnz cstar_trace_entry + cmpl $nr_syscalls,%eax + jae cstar_badsys +@@ -1324,29 +1433,21 @@ cstar_trace_entry: + btl %eax,cstar_special + jc .Lcstar_trace_special + 1: movl %esp,%eax +- xorl %edx,%edx + LOCK_PREFIX + orl $_TIF_CSTAR,TI_flags(%ebp) +- call do_syscall_trace ++ call syscall_trace_enter + LOCK_PREFIX + andl $~_TIF_CSTAR,TI_flags(%ebp) +- testl %eax,%eax +- jne .Lcstar_resume # ret != 0 -> running under PTRACE_SYSEMU, +- # so must skip actual syscall +- movl PT_ORIG_EAX(%esp),%eax ++ /* What it returned is what we'll actually use. */ + cmpl $nr_syscalls,%eax + jb .Lcstar_call + jmp .Lcstar_exit + .Lcstar_trace_special: + movl PT_ECX(%esp),%ecx + movl %esp,%eax +- xorl %edx,%edx + movl %ecx,PT_EBP(%esp) # put user EBP back in place +- call do_syscall_trace +- testl %eax,%eax +- jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU, +- # so must skip actual syscall +- movl PT_ORIG_EAX(%esp),%eax ++ call syscall_trace_enter ++ /* What it returned is what we'll actually use. */ + cmpl $nr_syscalls,%eax + jb syscall_call + jmp syscall_exit +--- head-2010-01-18.orig/arch/x86/kernel/entry_64.S 2010-01-18 16:51:20.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/entry_64.S 2009-11-06 10:51:42.000000000 +0100 +@@ -1312,7 +1312,7 @@ ENTRY(arch_unwind_init_running) + END(arch_unwind_init_running) + #endif + +-#ifdef CONFIG_XEN ++#ifdef CONFIG_PARAVIRT_XEN + zeroentry xen_hypervisor_callback xen_do_hypervisor_callback + + /* +@@ -1409,7 +1409,7 @@ ENTRY(xen_failsafe_callback) + CFI_ENDPROC + END(xen_failsafe_callback) + +-#endif /* CONFIG_XEN */ ++#endif /* CONFIG_PARAVIRT_XEN */ + + #ifdef CONFIG_KDB + +--- head-2010-01-18.orig/arch/x86/kernel/entry_64-xen.S 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/entry_64-xen.S 2009-11-06 10:51:42.000000000 +0100 +@@ -53,19 +53,130 @@ + #include + #include + #include ++#include + #include + #include + #include + ++/* Avoid __ASSEMBLER__'ifying just for this. */ ++#include ++#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) ++#define __AUDIT_ARCH_64BIT 0x80000000 ++#define __AUDIT_ARCH_LE 0x40000000 ++ + .code64 + ++#ifdef CONFIG_FTRACE ++#ifdef CONFIG_DYNAMIC_FTRACE ++ENTRY(mcount) ++ ++ subq $0x38, %rsp ++ movq %rax, (%rsp) ++ movq %rcx, 8(%rsp) ++ movq %rdx, 16(%rsp) ++ movq %rsi, 24(%rsp) ++ movq %rdi, 32(%rsp) ++ movq %r8, 40(%rsp) ++ movq %r9, 48(%rsp) ++ ++ movq 0x38(%rsp), %rdi ++ subq $MCOUNT_INSN_SIZE, %rdi ++ ++.globl mcount_call ++mcount_call: ++ call ftrace_stub ++ ++ movq 48(%rsp), %r9 ++ movq 40(%rsp), %r8 ++ movq 32(%rsp), %rdi ++ movq 24(%rsp), %rsi ++ movq 16(%rsp), %rdx ++ movq 8(%rsp), %rcx ++ movq (%rsp), %rax ++ addq $0x38, %rsp ++ ++ retq ++END(mcount) ++ ++ENTRY(ftrace_caller) ++ ++ /* taken from glibc */ ++ subq $0x38, %rsp ++ movq %rax, (%rsp) ++ movq %rcx, 8(%rsp) ++ movq %rdx, 16(%rsp) ++ movq %rsi, 24(%rsp) ++ movq %rdi, 32(%rsp) ++ movq %r8, 40(%rsp) ++ movq %r9, 48(%rsp) ++ ++ movq 0x38(%rsp), %rdi ++ movq 8(%rbp), %rsi ++ subq $MCOUNT_INSN_SIZE, %rdi ++ ++.globl ftrace_call ++ftrace_call: ++ call ftrace_stub ++ ++ movq 48(%rsp), %r9 ++ movq 40(%rsp), %r8 ++ movq 32(%rsp), %rdi ++ movq 24(%rsp), %rsi ++ movq 16(%rsp), %rdx ++ movq 8(%rsp), %rcx ++ movq (%rsp), %rax ++ addq $0x38, %rsp ++ ++.globl ftrace_stub ++ftrace_stub: ++ retq ++END(ftrace_caller) ++ ++#else /* ! CONFIG_DYNAMIC_FTRACE */ ++ENTRY(mcount) ++ cmpq $ftrace_stub, ftrace_trace_function ++ jnz trace ++.globl ftrace_stub ++ftrace_stub: ++ retq ++ ++trace: ++ /* taken from glibc */ ++ subq $0x38, %rsp ++ movq %rax, (%rsp) ++ movq %rcx, 8(%rsp) ++ movq %rdx, 16(%rsp) ++ movq %rsi, 24(%rsp) ++ movq %rdi, 32(%rsp) ++ movq %r8, 40(%rsp) ++ movq %r9, 48(%rsp) ++ ++ movq 0x38(%rsp), %rdi ++ movq 8(%rbp), %rsi ++ subq $MCOUNT_INSN_SIZE, %rdi ++ ++ call *ftrace_trace_function ++ ++ movq 48(%rsp), %r9 ++ movq 40(%rsp), %r8 ++ movq 32(%rsp), %rdi ++ movq 24(%rsp), %rsi ++ movq 16(%rsp), %rdx ++ movq 8(%rsp), %rcx ++ movq (%rsp), %rax ++ addq $0x38, %rsp ++ ++ jmp ftrace_stub ++END(mcount) ++#endif /* CONFIG_DYNAMIC_FTRACE */ ++#endif /* CONFIG_FTRACE */ ++ + #ifndef CONFIG_PREEMPT + #define retint_kernel retint_restore_args + #endif + + #ifdef CONFIG_PARAVIRT +-ENTRY(native_irq_enable_syscall_ret) +- movq %gs:pda_oldrsp,%rsp ++ENTRY(native_usergs_sysret64) + swapgs + sysretq + #endif /* CONFIG_PARAVIRT */ +@@ -102,7 +213,7 @@ NMI_MASK = 0x80000000 + .macro FAKE_STACK_FRAME child_rip + /* push in order ss, rsp, eflags, cs, rip */ + xorl %eax, %eax +- pushq %rax /* ss */ ++ pushq $__KERNEL_DS /* ss */ + CFI_ADJUST_CFA_OFFSET 8 + /*CFI_REL_OFFSET ss,0*/ + pushq %rax /* rsp */ +@@ -197,13 +308,13 @@ ENTRY(ret_from_fork) + CFI_ADJUST_CFA_OFFSET -4 + call schedule_tail + GET_THREAD_INFO(%rcx) +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),threadinfo_flags(%rcx) ++ testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%rcx) + jnz rff_trace + rff_action: + RESTORE_REST + testl $3,CS-ARGOFFSET(%rsp) # from kernel_thread? + je int_ret_from_sys_call +- testl $_TIF_IA32,threadinfo_flags(%rcx) ++ testl $_TIF_IA32,TI_flags(%rcx) + jnz int_ret_from_sys_call + RESTORE_TOP_OF_STACK %rdi,ARGOFFSET + jmp ret_from_sys_call +@@ -265,8 +376,9 @@ ENTRY(system_call) + SAVE_ARGS -8,0 + movq %rax,ORIG_RAX-ARGOFFSET(%rsp) + GET_THREAD_INFO(%rcx) +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SECCOMP),threadinfo_flags(%rcx) ++ testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%rcx) + jnz tracesys ++system_call_fastpath: + cmpq $__NR_syscall_max,%rax + ja badsys + movq %r10,%rcx +@@ -284,7 +396,7 @@ sysret_check: + GET_THREAD_INFO(%rcx) + DISABLE_INTERRUPTS(CLBR_NONE) + TRACE_IRQS_OFF +- movl threadinfo_flags(%rcx),%edx ++ movl TI_flags(%rcx),%edx + andl %edi,%edx + jnz sysret_careful + CFI_REMEMBER_STATE +@@ -315,16 +427,16 @@ sysret_careful: + sysret_signal: + TRACE_IRQS_ON + ENABLE_INTERRUPTS(CLBR_NONE) +- testl $_TIF_DO_NOTIFY_MASK,%edx +- jz 1f +- +- /* Really a signal */ ++#ifdef CONFIG_AUDITSYSCALL ++ bt $TIF_SYSCALL_AUDIT,%edx ++ jc sysret_audit ++#endif + /* edx: work flags (arg3) */ + leaq do_notify_resume(%rip),%rax + leaq -ARGOFFSET(%rsp),%rdi # &pt_regs -> arg1 + xorl %esi,%esi # oldset -> arg2 + call ptregscall_common +-1: movl $_TIF_NEED_RESCHED,%edi ++ movl $_TIF_WORK_MASK,%edi + /* Use IRET because user could have changed frame. This + works because ptregscall_common has called FIXUP_TOP_OF_STACK. */ + DISABLE_INTERRUPTS(CLBR_NONE) +@@ -335,14 +447,56 @@ badsys: + movq $-ENOSYS,RAX-ARGOFFSET(%rsp) + jmp ret_from_sys_call + ++#ifdef CONFIG_AUDITSYSCALL ++ /* ++ * Fast path for syscall audit without full syscall trace. ++ * We just call audit_syscall_entry() directly, and then ++ * jump back to the normal fast path. ++ */ ++auditsys: ++ movq %r10,%r9 /* 6th arg: 4th syscall arg */ ++ movq %rdx,%r8 /* 5th arg: 3rd syscall arg */ ++ movq %rsi,%rcx /* 4th arg: 2nd syscall arg */ ++ movq %rdi,%rdx /* 3rd arg: 1st syscall arg */ ++ movq %rax,%rsi /* 2nd arg: syscall number */ ++ movl $AUDIT_ARCH_X86_64,%edi /* 1st arg: audit arch */ ++ call audit_syscall_entry ++ LOAD_ARGS 0 /* reload call-clobbered registers */ ++ jmp system_call_fastpath ++ ++ /* ++ * Return fast path for syscall audit. Call audit_syscall_exit() ++ * directly and then jump back to the fast path with TIF_SYSCALL_AUDIT ++ * masked off. ++ */ ++sysret_audit: ++ movq %rax,%rsi /* second arg, syscall return value */ ++ cmpq $0,%rax /* is it < 0? */ ++ setl %al /* 1 if so, 0 if not */ ++ movzbl %al,%edi /* zero-extend that into %edi */ ++ inc %edi /* first arg, 0->1(AUDITSC_SUCCESS), 1->2(AUDITSC_FAILURE) */ ++ call audit_syscall_exit ++ movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi ++ jmp sysret_check ++#endif /* CONFIG_AUDITSYSCALL */ ++ + /* Do syscall tracing */ + tracesys: ++#ifdef CONFIG_AUDITSYSCALL ++ testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%rcx) ++ jz auditsys ++#endif + SAVE_REST + movq $-ENOSYS,RAX(%rsp) /* ptrace can change this for a bad syscall */ + FIXUP_TOP_OF_STACK %rdi + movq %rsp,%rdi + call syscall_trace_enter +- LOAD_ARGS ARGOFFSET /* reload args from stack in case ptrace changed it */ ++ /* ++ * Reload arg registers from stack in case ptrace changed them. ++ * We don't reload %rax because syscall_trace_enter() returned ++ * the value it wants us to use in the table lookup. ++ */ ++ LOAD_ARGS ARGOFFSET, 1 + RESTORE_REST + cmpq $__NR_syscall_max,%rax + ja int_ret_from_sys_call /* RAX(%rsp) set to -ENOSYS above */ +@@ -356,6 +510,7 @@ tracesys: + * Has correct top of stack, but partial stack frame. + */ + .globl int_ret_from_sys_call ++ .globl int_with_check + int_ret_from_sys_call: + DISABLE_INTERRUPTS(CLBR_NONE) + TRACE_IRQS_OFF +@@ -370,10 +525,10 @@ int_ret_from_sys_call: + int_with_check: + LOCKDEP_SYS_EXIT_IRQ + GET_THREAD_INFO(%rcx) +- movl threadinfo_flags(%rcx),%edx ++ movl TI_flags(%rcx),%edx + andl %edi,%edx + jnz int_careful +- andl $~TS_COMPAT,threadinfo_status(%rcx) ++ andl $~TS_COMPAT,TI_status(%rcx) + jmp retint_restore_args + + /* Either reschedule or signal or syscall exit tracking needed. */ +@@ -399,7 +554,7 @@ int_very_careful: + ENABLE_INTERRUPTS(CLBR_NONE) + SAVE_REST + /* Check for syscall exit trace */ +- testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edx ++ testl $_TIF_WORK_SYSCALL_EXIT,%edx + jz int_signal + pushq %rdi + CFI_ADJUST_CFA_OFFSET 8 +@@ -407,7 +562,7 @@ int_very_careful: + call syscall_trace_leave + popq %rdi + CFI_ADJUST_CFA_OFFSET -8 +- andl $~(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP),%edi ++ andl $~(_TIF_WORK_SYSCALL_EXIT|_TIF_SYSCALL_EMU),%edi + jmp int_restore_rest + + int_signal: +@@ -416,7 +571,7 @@ int_signal: + movq %rsp,%rdi # &ptregs -> arg1 + xorl %esi,%esi # oldset -> arg2 + call do_notify_resume +-1: movl $_TIF_NEED_RESCHED,%edi ++1: movl $_TIF_WORK_MASK,%edi + int_restore_rest: + RESTORE_REST + DISABLE_INTERRUPTS(CLBR_NONE) +@@ -443,7 +598,6 @@ END(\label) + PTREGSCALL stub_clone, sys_clone, %r8 + PTREGSCALL stub_fork, sys_fork, %rdi + PTREGSCALL stub_vfork, sys_vfork, %rdi +- PTREGSCALL stub_rt_sigsuspend, sys_rt_sigsuspend, %rdx + PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx + PTREGSCALL stub_iopl, sys_iopl, %rsi + +@@ -517,10 +671,12 @@ END(stub_rt_sigreturn) + * + */ + +-retint_check: ++retint_with_reschedule: + CFI_DEFAULT_STACK adj=1 ++ movl $_TIF_WORK_MASK,%edi ++retint_check: + LOCKDEP_SYS_EXIT_IRQ +- movl threadinfo_flags(%rcx),%edx ++ movl TI_flags(%rcx),%edx + andl %edi,%edx + CFI_REMEMBER_STATE + jnz retint_careful +@@ -565,17 +721,16 @@ retint_signal: + RESTORE_REST + DISABLE_INTERRUPTS(CLBR_NONE) + TRACE_IRQS_OFF +- movl $_TIF_NEED_RESCHED,%edi + GET_THREAD_INFO(%rcx) +- jmp retint_check ++ jmp retint_with_reschedule + + #ifdef CONFIG_PREEMPT + /* Returning to kernel space. Check if we need preemption */ + /* rcx: threadinfo. interrupts off. */ + ENTRY(retint_kernel) +- cmpl $0,threadinfo_preempt_count(%rcx) ++ cmpl $0,TI_preempt_count(%rcx) + jnz retint_restore_args +- bt $TIF_NEED_RESCHED,threadinfo_flags(%rcx) ++ bt $TIF_NEED_RESCHED,TI_flags(%rcx) + jnc retint_restore_args + bt $9,EFLAGS-ARGOFFSET(%rsp) /* interrupts off? */ + jnc retint_restore_args +@@ -630,6 +785,9 @@ END(invalidate_interrupt\num) + ENTRY(call_function_interrupt) + apicinterrupt CALL_FUNCTION_VECTOR,smp_call_function_interrupt + END(call_function_interrupt) ++ENTRY(call_function_single_interrupt) ++ apicinterrupt CALL_FUNCTION_SINGLE_VECTOR,smp_call_function_single_interrupt ++END(call_function_single_interrupt) + ENTRY(irq_move_cleanup_interrupt) + apicinterrupt IRQ_MOVE_CLEANUP_VECTOR,smp_irq_move_cleanup_interrupt + END(irq_move_cleanup_interrupt) +@@ -639,6 +797,10 @@ ENTRY(apic_timer_interrupt) + apicinterrupt LOCAL_TIMER_VECTOR,smp_apic_timer_interrupt + END(apic_timer_interrupt) + ++ENTRY(uv_bau_message_intr1) ++ apicinterrupt 220,uv_bau_message_interrupt ++END(uv_bau_message_intr1) ++ + ENTRY(error_interrupt) + apicinterrupt ERROR_APIC_VECTOR,smp_error_interrupt + END(error_interrupt) +@@ -752,7 +914,7 @@ paranoid_restore\trace: + jmp irq_return + paranoid_userspace\trace: + GET_THREAD_INFO(%rcx) +- movl threadinfo_flags(%rcx),%ebx ++ movl TI_flags(%rcx),%ebx + andl $_TIF_WORK_MASK,%ebx + jz paranoid_swapgs\trace + movq %rsp,%rdi /* &pt_regs */ +@@ -849,7 +1011,7 @@ error_exit: + testb $3,CS-ARGOFFSET(%rsp) + jz retint_kernel + LOCKDEP_SYS_EXIT_IRQ +- movl threadinfo_flags(%rcx),%edx ++ movl TI_flags(%rcx),%edx + movl $_TIF_WORK_MASK,%edi + andl %edi,%edx + jnz retint_careful +@@ -871,11 +1033,11 @@ error_kernelspace: + iret run with kernel gs again, so don't set the user space flag. + B stepping K8s sometimes report an truncated RIP for IRET + exceptions returning to compat mode. Check for these here too. */ +- leaq irq_return(%rip),%rbp +- cmpq %rbp,RIP(%rsp) ++ leaq irq_return(%rip),%rcx ++ cmpq %rcx,RIP(%rsp) + je error_swapgs +- movl %ebp,%ebp /* zero extend */ +- cmpq %rbp,RIP(%rsp) ++ movl %ecx,%ecx /* zero extend */ ++ cmpq %rcx,RIP(%rsp) + je error_swapgs + cmpq $gs_change,RIP(%rsp) + je error_swapgs +@@ -1121,6 +1283,7 @@ END(device_not_available) + /* runs on exception stack */ + KPROBE_ENTRY(debug) + /* INTR_FRAME ++ PARAVIRT_ADJUST_EXCEPTION_FRAME + pushq $0 + CFI_ADJUST_CFA_OFFSET 8 */ + zeroentry do_debug +@@ -1148,6 +1311,7 @@ END(do_nmi_callback) + + KPROBE_ENTRY(int3) + /* INTR_FRAME ++ PARAVIRT_ADJUST_EXCEPTION_FRAME + pushq $0 + CFI_ADJUST_CFA_OFFSET 8 */ + zeroentry do_int3 +@@ -1171,14 +1335,11 @@ ENTRY(coprocessor_segment_overrun) + zeroentry do_coprocessor_segment_overrun + END(coprocessor_segment_overrun) + +-ENTRY(reserved) +- zeroentry do_reserved +-END(reserved) +- + #if 0 + /* runs on exception stack */ + ENTRY(double_fault) + XCPT_FRAME ++ PARAVIRT_ADJUST_EXCEPTION_FRAME + paranoidentry do_double_fault + jmp paranoid_exit1 + CFI_ENDPROC +@@ -1196,6 +1357,7 @@ END(segment_not_present) + /* runs on exception stack */ + ENTRY(stack_segment) + /* XCPT_FRAME ++ PARAVIRT_ADJUST_EXCEPTION_FRAME + paranoidentry do_stack_segment */ + errorentry do_stack_segment + /* jmp paranoid_exit1 +--- head-2010-01-18.orig/arch/x86/kernel/fixup.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/fixup.c 2009-11-06 10:51:42.000000000 +0100 +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #define DP(_f, _args...) printk(KERN_ALERT " " _f "\n" , ## _args ) + +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2010-01-18/arch/x86/kernel/head-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -0,0 +1,57 @@ ++#include ++#include ++ ++#include ++#include ++ ++#define BIOS_LOWMEM_KILOBYTES 0x413 ++ ++/* ++ * The BIOS places the EBDA/XBDA at the top of conventional ++ * memory, and usually decreases the reported amount of ++ * conventional memory (int 0x12) too. This also contains a ++ * workaround for Dell systems that neglect to reserve EBDA. ++ * The same workaround also avoids a problem with the AMD768MPX ++ * chipset: reserve a page before VGA to prevent PCI prefetch ++ * into it (errata #56). Usually the page is reserved anyways, ++ * unless you have no PS/2 mouse plugged in. ++ */ ++void __init reserve_ebda_region(void) ++{ ++#ifndef CONFIG_XEN ++ unsigned int lowmem, ebda_addr; ++ ++ /* To determine the position of the EBDA and the */ ++ /* end of conventional memory, we need to look at */ ++ /* the BIOS data area. In a paravirtual environment */ ++ /* that area is absent. We'll just have to assume */ ++ /* that the paravirt case can handle memory setup */ ++ /* correctly, without our help. */ ++ if (paravirt_enabled()) ++ return; ++ ++ /* end of low (conventional) memory */ ++ lowmem = *(unsigned short *)__va(BIOS_LOWMEM_KILOBYTES); ++ lowmem <<= 10; ++ ++ /* start of EBDA area */ ++ ebda_addr = get_bios_ebda(); ++ ++ /* Fixup: bios puts an EBDA in the top 64K segment */ ++ /* of conventional memory, but does not adjust lowmem. */ ++ if ((lowmem - ebda_addr) <= 0x10000) ++ lowmem = ebda_addr; ++ ++ /* Fixup: bios does not report an EBDA at all. */ ++ /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */ ++ if ((ebda_addr == 0) && (lowmem >= 0x9f000)) ++ lowmem = 0x9f000; ++ ++ /* Paranoia: should never happen, but... */ ++ if ((lowmem == 0) || (lowmem >= 0x100000)) ++ lowmem = 0x9f000; ++ ++ /* reserve all memory between lowmem and the 1MB mark */ ++ reserve_early_overlap_ok(lowmem, 0x100000, "BIOS reserved"); ++#endif ++} +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ head-2010-01-18/arch/x86/kernel/head32-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -0,0 +1,57 @@ ++/* ++ * linux/arch/i386/kernel/head32.c -- prepare to run common code ++ * ++ * Copyright (C) 2000 Andrea Arcangeli SuSE ++ * Copyright (C) 2007 Eric Biederman ++ */ ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++void __init i386_start_kernel(void) ++{ ++ reserve_early(__pa_symbol(&_text), __pa_symbol(&_end), "TEXT DATA BSS"); ++ ++#ifndef CONFIG_XEN ++#ifdef CONFIG_BLK_DEV_INITRD ++ /* Reserve INITRD */ ++ if (boot_params.hdr.type_of_loader && boot_params.hdr.ramdisk_image) { ++ u64 ramdisk_image = boot_params.hdr.ramdisk_image; ++ u64 ramdisk_size = boot_params.hdr.ramdisk_size; ++ u64 ramdisk_end = ramdisk_image + ramdisk_size; ++ reserve_early(ramdisk_image, ramdisk_end, "RAMDISK"); ++ } ++#endif ++ reserve_early(init_pg_tables_start, init_pg_tables_end, ++ "INIT_PG_TABLE"); ++#else ++ reserve_early(ALIGN(__pa_symbol(&_end), PAGE_SIZE), ++ __pa(xen_start_info->pt_base) ++ + (xen_start_info->nr_pt_frames << PAGE_SHIFT), ++ "Xen provided"); ++ ++ { ++ int max_cmdline; ++ ++ if ((max_cmdline = MAX_GUEST_CMDLINE) > COMMAND_LINE_SIZE) ++ max_cmdline = COMMAND_LINE_SIZE; ++ memcpy(boot_command_line, xen_start_info->cmd_line, max_cmdline); ++ boot_command_line[max_cmdline-1] = '\0'; ++ } ++#endif ++ ++ reserve_ebda_region(); ++ ++ /* ++ * At this point everything still needed from the boot loader ++ * or BIOS or kernel text should be early reserved or marked not ++ * RAM in e820. All other memory is free game. ++ */ ++ ++ start_kernel(); ++} +--- head-2010-01-18.orig/arch/x86/kernel/head64-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/head64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -32,7 +32,26 @@ + #include + #include + +-unsigned long start_pfn; ++/* boot cpu pda */ ++static struct x8664_pda _boot_cpu_pda __read_mostly; ++ ++#ifdef CONFIG_SMP ++/* ++ * We install an empty cpu_pda pointer table to indicate to early users ++ * (numa_set_node) that the cpu_pda pointer table for cpus other than ++ * the boot cpu is not yet setup. ++ */ ++static struct x8664_pda *__cpu_pda[NR_CPUS] __initdata; ++#else ++static struct x8664_pda *__cpu_pda[NR_CPUS] __read_mostly; ++#endif ++ ++void __init x86_64_init_pda(void) ++{ ++ _cpu_pda = __cpu_pda; ++ cpu_pda(0) = &_boot_cpu_pda; ++ pda_init(0); ++} + + #ifndef CONFIG_XEN + static void __init zap_identity_mappings(void) +@@ -77,83 +96,10 @@ EXPORT_SYMBOL(machine_to_phys_mapping); + unsigned int machine_to_phys_order; + EXPORT_SYMBOL(machine_to_phys_order); + +-#define BIOS_LOWMEM_KILOBYTES 0x413 +- +-/* +- * The BIOS places the EBDA/XBDA at the top of conventional +- * memory, and usually decreases the reported amount of +- * conventional memory (int 0x12) too. This also contains a +- * workaround for Dell systems that neglect to reserve EBDA. +- * The same workaround also avoids a problem with the AMD768MPX +- * chipset: reserve a page before VGA to prevent PCI prefetch +- * into it (errata #56). Usually the page is reserved anyways, +- * unless you have no PS/2 mouse plugged in. +- */ +-static void __init reserve_ebda_region(void) +-{ +-#ifndef CONFIG_XEN +- unsigned int lowmem, ebda_addr; +- +- /* To determine the position of the EBDA and the */ +- /* end of conventional memory, we need to look at */ +- /* the BIOS data area. In a paravirtual environment */ +- /* that area is absent. We'll just have to assume */ +- /* that the paravirt case can handle memory setup */ +- /* correctly, without our help. */ +- if (paravirt_enabled()) +- return; +- +- /* end of low (conventional) memory */ +- lowmem = *(unsigned short *)__va(BIOS_LOWMEM_KILOBYTES); +- lowmem <<= 10; +- +- /* start of EBDA area */ +- ebda_addr = get_bios_ebda(); +- +- /* Fixup: bios puts an EBDA in the top 64K segment */ +- /* of conventional memory, but does not adjust lowmem. */ +- if ((lowmem - ebda_addr) <= 0x10000) +- lowmem = ebda_addr; +- +- /* Fixup: bios does not report an EBDA at all. */ +- /* Some old Dells seem to need 4k anyhow (bugzilla 2990) */ +- if ((ebda_addr == 0) && (lowmem >= 0x9f000)) +- lowmem = 0x9f000; +- +- /* Paranoia: should never happen, but... */ +- if ((lowmem == 0) || (lowmem >= 0x100000)) +- lowmem = 0x9f000; +- +- /* reserve all memory between lowmem and the 1MB mark */ +- reserve_early(lowmem, 0x100000, "BIOS reserved"); +-#endif +-} +- +-static void __init reserve_setup_data(void) +-{ +-#ifndef CONFIG_XEN +- struct setup_data *data; +- unsigned long pa_data; +- char buf[32]; +- +- if (boot_params.hdr.version < 0x0209) +- return; +- pa_data = boot_params.hdr.setup_data; +- while (pa_data) { +- data = early_ioremap(pa_data, sizeof(*data)); +- sprintf(buf, "setup data %x", data->type); +- reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf); +- pa_data = data->next; +- early_iounmap(data, sizeof(*data)); +- } +-#endif +-} +- + void __init x86_64_start_kernel(char * real_mode_data) + { + struct xen_machphys_mapping mapping; + unsigned long machine_to_phys_nr_ents; +- int i; + + /* + * Build-time sanity checks on the kernel image and module +@@ -167,6 +113,7 @@ void __init x86_64_start_kernel(char * r + BUILD_BUG_ON(!(MODULES_VADDR > __START_KERNEL)); + BUILD_BUG_ON(!(((MODULES_END - 1) & PGDIR_MASK) == + (__START_KERNEL & PGDIR_MASK))); ++ BUILD_BUG_ON(__fix_to_virt(__end_of_fixed_addresses) <= MODULES_END); + + xen_setup_features(); + +@@ -174,8 +121,6 @@ void __init x86_64_start_kernel(char * r + if (!xen_feature(XENFEAT_auto_translated_physmap)) + phys_to_machine_mapping = + (unsigned long *)xen_start_info->mfn_list; +- start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) + +- xen_start_info->nr_pt_frames; + + machine_to_phys_mapping = (unsigned long *)MACH2PHYS_VIRT_START; + machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES; +@@ -208,19 +153,23 @@ void __init x86_64_start_kernel(char * r + + early_printk("Kernel alive\n"); + +- for (i = 0; i < NR_CPUS; i++) +- cpu_pda(i) = &boot_cpu_pda[i]; ++ x86_64_init_pda(); + +- pda_init(0); ++ early_printk("Kernel really alive\n"); ++ ++ x86_64_start_reservations(real_mode_data); ++} ++ ++void __init x86_64_start_reservations(char *real_mode_data) ++{ + copy_bootdata(__va(real_mode_data)); + + reserve_early(__pa_symbol(&_text), __pa_symbol(&_end), "TEXT DATA BSS"); + + reserve_early(round_up(__pa_symbol(&_end), PAGE_SIZE), +- start_pfn << PAGE_SHIFT, "Xen provided"); +- +- reserve_ebda_region(); +- reserve_setup_data(); ++ __pa(xen_start_info->pt_base) ++ + (xen_start_info->nr_pt_frames << PAGE_SHIFT), ++ "Xen provided"); + + /* + * At this point everything still needed from the boot loader +--- head-2010-01-18.orig/arch/x86/kernel/head_64-xen.S 2009-11-06 10:51:07.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/head_64-xen.S 2009-11-06 10:51:42.000000000 +0100 +@@ -92,53 +92,6 @@ NEXT_PAGE(hypercall_page) + + #undef NEXT_PAGE + +- .data +- +- .align 16 +- .globl cpu_gdt_descr +-cpu_gdt_descr: +- .word gdt_end-cpu_gdt_table-1 +-gdt: +- .quad cpu_gdt_table +-#ifdef CONFIG_SMP +- .rept NR_CPUS-1 +- .word 0 +- .quad 0 +- .endr +-#endif +- +-/* We need valid kernel segments for data and code in long mode too +- * IRET will check the segment types kkeil 2000/10/28 +- * Also sysret mandates a special GDT layout +- */ +- +- .section .data.page_aligned, "aw" +- .align PAGE_SIZE +- +-/* The TLS descriptors are currently at a different place compared to i386. +- Hopefully nobody expects them at a fixed place (Wine?) */ +- +-ENTRY(cpu_gdt_table) +- .quad 0x0000000000000000 /* NULL descriptor */ +- .quad 0x00cf9b000000ffff /* __KERNEL32_CS */ +- .quad 0x00af9b000000ffff /* __KERNEL_CS */ +- .quad 0x00cf93000000ffff /* __KERNEL_DS */ +- .quad 0x00cffb000000ffff /* __USER32_CS */ +- .quad 0x00cff3000000ffff /* __USER_DS, __USER32_DS */ +- .quad 0x00affb000000ffff /* __USER_CS */ +- .quad 0x0 /* unused */ +- .quad 0,0 /* TSS */ +- .quad 0,0 /* LDT */ +- .quad 0,0,0 /* three TLS descriptors */ +- .quad 0x0000f40000000000 /* node/CPU stored in limit */ +-gdt_end: +- /* asm/segment.h:GDT_ENTRIES must match this */ +- /* This should be a multiple of the cache line size */ +- /* GDTs of other CPUs are now dynamically allocated */ +- +- /* zero the remaining page */ +- .fill PAGE_SIZE / 8 - GDT_ENTRIES,8,0 +- + .section .bss.page_aligned, "aw", @nobits + .align PAGE_SIZE + ENTRY(empty_zero_page) +--- head-2010-01-18.orig/arch/x86/kernel/io_apic_32-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/io_apic_32-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -25,6 +25,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -75,7 +76,7 @@ static struct { int pin, apic; } ioapic_ + static DEFINE_SPINLOCK(ioapic_lock); + static DEFINE_SPINLOCK(vector_lock); + +-int timer_over_8254 __initdata = 1; ++int timer_through_8259 __initdata; + + /* + * Is the SiS APIC rmw bug present ? +@@ -89,15 +90,21 @@ int sis_apic_bug = -1; + int nr_ioapic_registers[MAX_IO_APICS]; + + /* I/O APIC entries */ +-struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS]; ++struct mp_config_ioapic mp_ioapics[MAX_IO_APICS]; + int nr_ioapics; + + /* MP IRQ source entries */ +-struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; ++struct mp_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; + + /* # of MP IRQ source entries */ + int mp_irq_entries; + ++#if defined (CONFIG_MCA) || defined (CONFIG_EISA) ++int mp_bus_id_to_type[MAX_MP_BUSSES]; ++#endif ++ ++DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES); ++ + static int disable_timer_pin_1 __initdata; + + /* +@@ -128,7 +135,7 @@ struct io_apic { + static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) + { + return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) +- + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK); ++ + (mp_ioapics[idx].mp_apicaddr & ~PAGE_MASK); + } + #endif + +@@ -142,7 +149,7 @@ static inline unsigned int io_apic_read( + struct physdev_apic apic_op; + int ret; + +- apic_op.apic_physbase = mp_ioapics[apic].mpc_apicaddr; ++ apic_op.apic_physbase = mp_ioapics[apic].mp_apicaddr; + apic_op.reg = reg; + ret = HYPERVISOR_physdev_op(PHYSDEVOP_apic_read, &apic_op); + if (ret) +@@ -160,7 +167,7 @@ static inline void io_apic_write(unsigne + #else + struct physdev_apic apic_op; + +- apic_op.apic_physbase = mp_ioapics[apic].mpc_apicaddr; ++ apic_op.apic_physbase = mp_ioapics[apic].mp_apicaddr; + apic_op.reg = reg; + apic_op.value = value; + WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op)); +@@ -288,7 +295,7 @@ static void __init replace_pin_at_irq(un + } + } + +-static void __modify_IO_APIC_irq (unsigned int irq, unsigned long enable, unsigned long disable) ++static void __modify_IO_APIC_irq(unsigned int irq, unsigned long enable, unsigned long disable) + { + struct irq_pin_list *entry = irq_2_pin + irq; + unsigned int pin, reg; +@@ -308,30 +315,32 @@ static void __modify_IO_APIC_irq (unsign + } + + /* mask = 1 */ +-static void __mask_IO_APIC_irq (unsigned int irq) ++static void __mask_IO_APIC_irq(unsigned int irq) + { +- __modify_IO_APIC_irq(irq, 0x00010000, 0); ++ __modify_IO_APIC_irq(irq, IO_APIC_REDIR_MASKED, 0); + } + + /* mask = 0 */ +-static void __unmask_IO_APIC_irq (unsigned int irq) ++static void __unmask_IO_APIC_irq(unsigned int irq) + { +- __modify_IO_APIC_irq(irq, 0, 0x00010000); ++ __modify_IO_APIC_irq(irq, 0, IO_APIC_REDIR_MASKED); + } + + /* mask = 1, trigger = 0 */ +-static void __mask_and_edge_IO_APIC_irq (unsigned int irq) ++static void __mask_and_edge_IO_APIC_irq(unsigned int irq) + { +- __modify_IO_APIC_irq(irq, 0x00010000, 0x00008000); ++ __modify_IO_APIC_irq(irq, IO_APIC_REDIR_MASKED, ++ IO_APIC_REDIR_LEVEL_TRIGGER); + } + + /* mask = 0, trigger = 1 */ +-static void __unmask_and_level_IO_APIC_irq (unsigned int irq) ++static void __unmask_and_level_IO_APIC_irq(unsigned int irq) + { +- __modify_IO_APIC_irq(irq, 0x00008000, 0x00010000); ++ __modify_IO_APIC_irq(irq, IO_APIC_REDIR_LEVEL_TRIGGER, ++ IO_APIC_REDIR_MASKED); + } + +-static void mask_IO_APIC_irq (unsigned int irq) ++static void mask_IO_APIC_irq(unsigned int irq) + { + unsigned long flags; + +@@ -340,7 +349,7 @@ static void mask_IO_APIC_irq (unsigned i + spin_unlock_irqrestore(&ioapic_lock, flags); + } + +-static void unmask_IO_APIC_irq (unsigned int irq) ++static void unmask_IO_APIC_irq(unsigned int irq) + { + unsigned long flags; + +@@ -352,7 +361,7 @@ static void unmask_IO_APIC_irq (unsigned + static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) + { + struct IO_APIC_route_entry entry; +- ++ + /* Check delivery_mode to be sure we're not clearing an SMI pin */ + entry = ioapic_read_entry(apic, pin); + if (entry.delivery_mode == dest_SMI) +@@ -364,7 +373,7 @@ static void clear_IO_APIC_pin(unsigned i + ioapic_mask_entry(apic, pin); + } + +-static void clear_IO_APIC (void) ++static void clear_IO_APIC(void) + { + int apic, pin; + +@@ -381,7 +390,7 @@ static void set_ioapic_affinity_irq(unsi + struct irq_pin_list *entry = irq_2_pin + irq; + unsigned int apicid_value; + cpumask_t tmp; +- ++ + cpus_and(tmp, cpumask, cpu_online_map); + if (cpus_empty(tmp)) + tmp = TARGET_CPUS; +@@ -410,7 +419,7 @@ static void set_ioapic_affinity_irq(unsi + # include /* kstat */ + # include /* kmalloc() */ + # include +- ++ + #define IRQBALANCE_CHECK_ARCH -999 + #define MAX_BALANCED_IRQ_INTERVAL (5*HZ) + #define MIN_BALANCED_IRQ_INTERVAL (HZ/2) +@@ -422,14 +431,14 @@ static int physical_balance __read_mostl + static long balanced_irq_interval __read_mostly = MAX_BALANCED_IRQ_INTERVAL; + + static struct irq_cpu_info { +- unsigned long * last_irq; +- unsigned long * irq_delta; ++ unsigned long *last_irq; ++ unsigned long *irq_delta; + unsigned long irq; + } irq_cpu_data[NR_CPUS]; + + #define CPU_IRQ(cpu) (irq_cpu_data[cpu].irq) +-#define LAST_CPU_IRQ(cpu,irq) (irq_cpu_data[cpu].last_irq[irq]) +-#define IRQ_DELTA(cpu,irq) (irq_cpu_data[cpu].irq_delta[irq]) ++#define LAST_CPU_IRQ(cpu, irq) (irq_cpu_data[cpu].last_irq[irq]) ++#define IRQ_DELTA(cpu, irq) (irq_cpu_data[cpu].irq_delta[irq]) + + #define IDLE_ENOUGH(cpu,now) \ + (idle_cpu(cpu) && ((now) - per_cpu(irq_stat, (cpu)).idle_timestamp > 1)) +@@ -468,8 +477,8 @@ inside: + if (cpu == -1) + cpu = NR_CPUS-1; + } +- } while (!cpu_online(cpu) || !IRQ_ALLOWED(cpu,allowed_mask) || +- (search_idle && !IDLE_ENOUGH(cpu,now))); ++ } while (!cpu_online(cpu) || !IRQ_ALLOWED(cpu, allowed_mask) || ++ (search_idle && !IDLE_ENOUGH(cpu, now))); + + return cpu; + } +@@ -479,15 +488,14 @@ static inline void balance_irq(int cpu, + unsigned long now = jiffies; + cpumask_t allowed_mask; + unsigned int new_cpu; +- ++ + if (irqbalance_disabled) +- return; ++ return; + + cpus_and(allowed_mask, cpu_online_map, balance_irq_affinity[irq]); + new_cpu = move(cpu, allowed_mask, now, 1); +- if (cpu != new_cpu) { ++ if (cpu != new_cpu) + set_pending_irq(irq, cpumask_of_cpu(new_cpu)); +- } + } + + static inline void rotate_irqs_among_cpus(unsigned long useful_load_threshold) +@@ -499,14 +507,14 @@ static inline void rotate_irqs_among_cpu + if (!irq_desc[j].action) + continue; + /* Is it a significant load ? */ +- if (IRQ_DELTA(CPU_TO_PACKAGEINDEX(i),j) < ++ if (IRQ_DELTA(CPU_TO_PACKAGEINDEX(i), j) < + useful_load_threshold) + continue; + balance_irq(i, j); + } + } + balanced_irq_interval = max((long)MIN_BALANCED_IRQ_INTERVAL, +- balanced_irq_interval - BALANCED_IRQ_LESS_DELTA); ++ balanced_irq_interval - BALANCED_IRQ_LESS_DELTA); + return; + } + +@@ -535,22 +543,22 @@ static void do_irq_balance(void) + /* Is this an active IRQ or balancing disabled ? */ + if (!irq_desc[j].action || irq_balancing_disabled(j)) + continue; +- if ( package_index == i ) +- IRQ_DELTA(package_index,j) = 0; ++ if (package_index == i) ++ IRQ_DELTA(package_index, j) = 0; + /* Determine the total count per processor per IRQ */ + value_now = (unsigned long) kstat_cpu(i).irqs[j]; + + /* Determine the activity per processor per IRQ */ +- delta = value_now - LAST_CPU_IRQ(i,j); ++ delta = value_now - LAST_CPU_IRQ(i, j); + + /* Update last_cpu_irq[][] for the next time */ +- LAST_CPU_IRQ(i,j) = value_now; ++ LAST_CPU_IRQ(i, j) = value_now; + + /* Ignore IRQs whose rate is less than the clock */ + if (delta < useful_load_threshold) + continue; + /* update the load for the processor or package total */ +- IRQ_DELTA(package_index,j) += delta; ++ IRQ_DELTA(package_index, j) += delta; + + /* Keep track of the higher numbered sibling as well */ + if (i != package_index) +@@ -576,7 +584,8 @@ static void do_irq_balance(void) + max_cpu_irq = ULONG_MAX; + + tryanothercpu: +- /* Look for heaviest loaded processor. ++ /* ++ * Look for heaviest loaded processor. + * We may come back to get the next heaviest loaded processor. + * Skip processors with trivial loads. + */ +@@ -585,7 +594,7 @@ tryanothercpu: + for_each_online_cpu(i) { + if (i != CPU_TO_PACKAGEINDEX(i)) + continue; +- if (max_cpu_irq <= CPU_IRQ(i)) ++ if (max_cpu_irq <= CPU_IRQ(i)) + continue; + if (tmp_cpu_irq < CPU_IRQ(i)) { + tmp_cpu_irq = CPU_IRQ(i); +@@ -594,8 +603,9 @@ tryanothercpu: + } + + if (tmp_loaded == -1) { +- /* In the case of small number of heavy interrupt sources, +- * loading some of the cpus too much. We use Ingo's original ++ /* ++ * In the case of small number of heavy interrupt sources, ++ * loading some of the cpus too much. We use Ingo's original + * approach to rotate them around. + */ + if (!first_attempt && imbalance >= useful_load_threshold) { +@@ -604,13 +614,14 @@ tryanothercpu: + } + goto not_worth_the_effort; + } +- ++ + first_attempt = 0; /* heaviest search */ + max_cpu_irq = tmp_cpu_irq; /* load */ + max_loaded = tmp_loaded; /* processor */ + imbalance = (max_cpu_irq - min_cpu_irq) / 2; +- +- /* if imbalance is less than approx 10% of max load, then ++ ++ /* ++ * if imbalance is less than approx 10% of max load, then + * observe diminishing returns action. - quit + */ + if (imbalance < (max_cpu_irq >> 3)) +@@ -626,26 +637,25 @@ tryanotherirq: + /* Is this an active IRQ? */ + if (!irq_desc[j].action) + continue; +- if (imbalance <= IRQ_DELTA(max_loaded,j)) ++ if (imbalance <= IRQ_DELTA(max_loaded, j)) + continue; + /* Try to find the IRQ that is closest to the imbalance + * without going over. + */ +- if (move_this_load < IRQ_DELTA(max_loaded,j)) { +- move_this_load = IRQ_DELTA(max_loaded,j); ++ if (move_this_load < IRQ_DELTA(max_loaded, j)) { ++ move_this_load = IRQ_DELTA(max_loaded, j); + selected_irq = j; + } + } +- if (selected_irq == -1) { ++ if (selected_irq == -1) + goto tryanothercpu; +- } + + imbalance = move_this_load; +- ++ + /* For physical_balance case, we accumulated both load + * values in the one of the siblings cpu_irq[], + * to use the same code for physical and logical processors +- * as much as possible. ++ * as much as possible. + * + * NOTE: the cpu_irq[] array holds the sum of the load for + * sibling A and sibling B in the slot for the lowest numbered +@@ -674,11 +684,11 @@ tryanotherirq: + /* mark for change destination */ + set_pending_irq(selected_irq, cpumask_of_cpu(min_loaded)); + +- /* Since we made a change, come back sooner to ++ /* Since we made a change, come back sooner to + * check for more variation. + */ + balanced_irq_interval = max((long)MIN_BALANCED_IRQ_INTERVAL, +- balanced_irq_interval - BALANCED_IRQ_LESS_DELTA); ++ balanced_irq_interval - BALANCED_IRQ_LESS_DELTA); + return; + } + goto tryanotherirq; +@@ -689,7 +699,7 @@ not_worth_the_effort: + * upward + */ + balanced_irq_interval = min((long)MAX_BALANCED_IRQ_INTERVAL, +- balanced_irq_interval + BALANCED_IRQ_MORE_DELTA); ++ balanced_irq_interval + BALANCED_IRQ_MORE_DELTA); + return; + } + +@@ -728,13 +738,13 @@ static int __init balanced_irq_init(void + cpumask_t tmp; + + cpus_shift_right(tmp, cpu_online_map, 2); +- c = &boot_cpu_data; ++ c = &boot_cpu_data; + /* When not overwritten by the command line ask subarchitecture. */ + if (irqbalance_disabled == IRQBALANCE_CHECK_ARCH) + irqbalance_disabled = NO_BALANCE_IRQ; + if (irqbalance_disabled) + return 0; +- ++ + /* disable irqbalance completely if there is only one processor online */ + if (num_online_cpus() < 2) { + irqbalance_disabled = 1; +@@ -748,16 +758,14 @@ static int __init balanced_irq_init(void + physical_balance = 1; + + for_each_online_cpu(i) { +- irq_cpu_data[i].irq_delta = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); +- irq_cpu_data[i].last_irq = kmalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); ++ irq_cpu_data[i].irq_delta = kzalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); ++ irq_cpu_data[i].last_irq = kzalloc(sizeof(unsigned long) * NR_IRQS, GFP_KERNEL); + if (irq_cpu_data[i].irq_delta == NULL || irq_cpu_data[i].last_irq == NULL) { + printk(KERN_ERR "balanced_irq_init: out of memory"); + goto failed; + } +- memset(irq_cpu_data[i].irq_delta,0,sizeof(unsigned long) * NR_IRQS); +- memset(irq_cpu_data[i].last_irq,0,sizeof(unsigned long) * NR_IRQS); + } +- ++ + printk(KERN_INFO "Starting balanced_irq\n"); + if (!IS_ERR(kthread_run(balanced_irq, NULL, "kirqd"))) + return 0; +@@ -799,7 +807,7 @@ void send_IPI_self(int vector) + /* + * Send the IPI. The write to APIC_ICR fires this off. + */ +- apic_write_around(APIC_ICR, cfg); ++ apic_write(APIC_ICR, cfg); + #endif + } + #endif /* !CONFIG_SMP */ +@@ -853,10 +861,10 @@ static int find_irq_entry(int apic, int + int i; + + for (i = 0; i < mp_irq_entries; i++) +- if (mp_irqs[i].mpc_irqtype == type && +- (mp_irqs[i].mpc_dstapic == mp_ioapics[apic].mpc_apicid || +- mp_irqs[i].mpc_dstapic == MP_APIC_ALL) && +- mp_irqs[i].mpc_dstirq == pin) ++ if (mp_irqs[i].mp_irqtype == type && ++ (mp_irqs[i].mp_dstapic == mp_ioapics[apic].mp_apicid || ++ mp_irqs[i].mp_dstapic == MP_APIC_ALL) && ++ mp_irqs[i].mp_dstirq == pin) + return i; + + return -1; +@@ -871,13 +879,13 @@ static int __init find_isa_irq_pin(int i + int i; + + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + if (test_bit(lbus, mp_bus_not_pci) && +- (mp_irqs[i].mpc_irqtype == type) && +- (mp_irqs[i].mpc_srcbusirq == irq)) ++ (mp_irqs[i].mp_irqtype == type) && ++ (mp_irqs[i].mp_srcbusirq == irq)) + +- return mp_irqs[i].mpc_dstirq; ++ return mp_irqs[i].mp_dstirq; + } + return -1; + } +@@ -887,17 +895,17 @@ static int __init find_isa_irq_apic(int + int i; + + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + if (test_bit(lbus, mp_bus_not_pci) && +- (mp_irqs[i].mpc_irqtype == type) && +- (mp_irqs[i].mpc_srcbusirq == irq)) ++ (mp_irqs[i].mp_irqtype == type) && ++ (mp_irqs[i].mp_srcbusirq == irq)) + break; + } + if (i < mp_irq_entries) { + int apic; +- for(apic = 0; apic < nr_ioapics; apic++) { +- if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic) ++ for (apic = 0; apic < nr_ioapics; apic++) { ++ if (mp_ioapics[apic].mp_apicid == mp_irqs[i].mp_dstapic) + return apic; + } + } +@@ -918,28 +926,28 @@ int IO_APIC_get_PCI_irq_vector(int bus, + + apic_printk(APIC_DEBUG, "querying PCI -> IRQ mapping bus:%d, " + "slot:%d, pin:%d.\n", bus, slot, pin); +- if (mp_bus_id_to_pci_bus[bus] == -1) { ++ if (test_bit(bus, mp_bus_not_pci)) { + printk(KERN_WARNING "PCI BIOS passed nonexistent PCI bus %d!\n", bus); + return -1; + } + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + for (apic = 0; apic < nr_ioapics; apic++) +- if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic || +- mp_irqs[i].mpc_dstapic == MP_APIC_ALL) ++ if (mp_ioapics[apic].mp_apicid == mp_irqs[i].mp_dstapic || ++ mp_irqs[i].mp_dstapic == MP_APIC_ALL) + break; + + if (!test_bit(lbus, mp_bus_not_pci) && +- !mp_irqs[i].mpc_irqtype && ++ !mp_irqs[i].mp_irqtype && + (bus == lbus) && +- (slot == ((mp_irqs[i].mpc_srcbusirq >> 2) & 0x1f))) { +- int irq = pin_2_irq(i,apic,mp_irqs[i].mpc_dstirq); ++ (slot == ((mp_irqs[i].mp_srcbusirq >> 2) & 0x1f))) { ++ int irq = pin_2_irq(i, apic, mp_irqs[i].mp_dstirq); + + if (!(apic || IO_APIC_IRQ(irq))) + continue; + +- if (pin == (mp_irqs[i].mpc_srcbusirq & 3)) ++ if (pin == (mp_irqs[i].mp_srcbusirq & 3)) + return irq; + /* + * Use the first all-but-pin matching entry as a +@@ -954,7 +962,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, + EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector); + + /* +- * This function currently is only a helper for the i386 smp boot process where ++ * This function currently is only a helper for the i386 smp boot process where + * we need to reprogram the ioredtbls to cater for the cpus which have come online + * so mask in all cases should simply be TARGET_CPUS + */ +@@ -1008,7 +1016,7 @@ static int EISA_ELCR(unsigned int irq) + * EISA conforming in the MP table, that means its trigger type must + * be read in from the ELCR */ + +-#define default_EISA_trigger(idx) (EISA_ELCR(mp_irqs[idx].mpc_srcbusirq)) ++#define default_EISA_trigger(idx) (EISA_ELCR(mp_irqs[idx].mp_srcbusirq)) + #define default_EISA_polarity(idx) default_ISA_polarity(idx) + + /* PCI interrupts are always polarity one level triggered, +@@ -1025,118 +1033,115 @@ static int EISA_ELCR(unsigned int irq) + + static int MPBIOS_polarity(int idx) + { +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + int polarity; + + /* + * Determine IRQ line polarity (high active or low active): + */ +- switch (mp_irqs[idx].mpc_irqflag & 3) ++ switch (mp_irqs[idx].mp_irqflag & 3) { ++ case 0: /* conforms, ie. bus-type dependent polarity */ + { +- case 0: /* conforms, ie. bus-type dependent polarity */ +- { +- polarity = test_bit(bus, mp_bus_not_pci)? +- default_ISA_polarity(idx): +- default_PCI_polarity(idx); +- break; +- } +- case 1: /* high active */ +- { +- polarity = 0; +- break; +- } +- case 2: /* reserved */ +- { +- printk(KERN_WARNING "broken BIOS!!\n"); +- polarity = 1; +- break; +- } +- case 3: /* low active */ +- { +- polarity = 1; +- break; +- } +- default: /* invalid */ +- { +- printk(KERN_WARNING "broken BIOS!!\n"); +- polarity = 1; +- break; +- } ++ polarity = test_bit(bus, mp_bus_not_pci)? ++ default_ISA_polarity(idx): ++ default_PCI_polarity(idx); ++ break; ++ } ++ case 1: /* high active */ ++ { ++ polarity = 0; ++ break; ++ } ++ case 2: /* reserved */ ++ { ++ printk(KERN_WARNING "broken BIOS!!\n"); ++ polarity = 1; ++ break; ++ } ++ case 3: /* low active */ ++ { ++ polarity = 1; ++ break; ++ } ++ default: /* invalid */ ++ { ++ printk(KERN_WARNING "broken BIOS!!\n"); ++ polarity = 1; ++ break; ++ } + } + return polarity; + } + + static int MPBIOS_trigger(int idx) + { +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + int trigger; + + /* + * Determine IRQ trigger mode (edge or level sensitive): + */ +- switch ((mp_irqs[idx].mpc_irqflag>>2) & 3) ++ switch ((mp_irqs[idx].mp_irqflag>>2) & 3) { ++ case 0: /* conforms, ie. bus-type dependent */ + { +- case 0: /* conforms, ie. bus-type dependent */ +- { +- trigger = test_bit(bus, mp_bus_not_pci)? +- default_ISA_trigger(idx): +- default_PCI_trigger(idx); ++ trigger = test_bit(bus, mp_bus_not_pci)? ++ default_ISA_trigger(idx): ++ default_PCI_trigger(idx); + #if defined(CONFIG_EISA) || defined(CONFIG_MCA) +- switch (mp_bus_id_to_type[bus]) +- { +- case MP_BUS_ISA: /* ISA pin */ +- { +- /* set before the switch */ +- break; +- } +- case MP_BUS_EISA: /* EISA pin */ +- { +- trigger = default_EISA_trigger(idx); +- break; +- } +- case MP_BUS_PCI: /* PCI pin */ +- { +- /* set before the switch */ +- break; +- } +- case MP_BUS_MCA: /* MCA pin */ +- { +- trigger = default_MCA_trigger(idx); +- break; +- } +- default: +- { +- printk(KERN_WARNING "broken BIOS!!\n"); +- trigger = 1; +- break; +- } +- } +-#endif ++ switch (mp_bus_id_to_type[bus]) { ++ case MP_BUS_ISA: /* ISA pin */ ++ { ++ /* set before the switch */ + break; + } +- case 1: /* edge */ ++ case MP_BUS_EISA: /* EISA pin */ + { +- trigger = 0; ++ trigger = default_EISA_trigger(idx); + break; + } +- case 2: /* reserved */ ++ case MP_BUS_PCI: /* PCI pin */ + { +- printk(KERN_WARNING "broken BIOS!!\n"); +- trigger = 1; ++ /* set before the switch */ + break; + } +- case 3: /* level */ ++ case MP_BUS_MCA: /* MCA pin */ + { +- trigger = 1; ++ trigger = default_MCA_trigger(idx); + break; + } +- default: /* invalid */ ++ default: + { + printk(KERN_WARNING "broken BIOS!!\n"); +- trigger = 0; ++ trigger = 1; + break; + } + } ++#endif ++ break; ++ } ++ case 1: /* edge */ ++ { ++ trigger = 0; ++ break; ++ } ++ case 2: /* reserved */ ++ { ++ printk(KERN_WARNING "broken BIOS!!\n"); ++ trigger = 1; ++ break; ++ } ++ case 3: /* level */ ++ { ++ trigger = 1; ++ break; ++ } ++ default: /* invalid */ ++ { ++ printk(KERN_WARNING "broken BIOS!!\n"); ++ trigger = 0; ++ break; ++ } ++ } + return trigger; + } + +@@ -1153,16 +1158,16 @@ static inline int irq_trigger(int idx) + static int pin_2_irq(int idx, int apic, int pin) + { + int irq, i; +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + + /* + * Debugging check, we are in big trouble if this message pops up! + */ +- if (mp_irqs[idx].mpc_dstirq != pin) ++ if (mp_irqs[idx].mp_dstirq != pin) + printk(KERN_ERR "broken BIOS or MPTABLE parser, ayiee!!\n"); + + if (test_bit(bus, mp_bus_not_pci)) +- irq = mp_irqs[idx].mpc_srcbusirq; ++ irq = mp_irqs[idx].mp_srcbusirq; + else { + /* + * PCI IRQs are mapped in order +@@ -1204,8 +1209,8 @@ static inline int IO_APIC_irq_trigger(in + + for (apic = 0; apic < nr_ioapics; apic++) { + for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { +- idx = find_irq_entry(apic,pin,mp_INT); +- if ((idx != -1) && (irq == pin_2_irq(idx,apic,pin))) ++ idx = find_irq_entry(apic, pin, mp_INT); ++ if ((idx != -1) && (irq == pin_2_irq(idx, apic, pin))) + return irq_trigger(idx); + } + } +@@ -1291,25 +1296,25 @@ static void __init setup_IO_APIC_irqs(vo + /* + * add it to the IO-APIC irq-routing table: + */ +- memset(&entry,0,sizeof(entry)); ++ memset(&entry, 0, sizeof(entry)); + + entry.delivery_mode = INT_DELIVERY_MODE; + entry.dest_mode = INT_DEST_MODE; + entry.mask = 0; /* enable IRQ */ +- entry.dest.logical.logical_dest = ++ entry.dest.logical.logical_dest = + cpu_mask_to_apicid(TARGET_CPUS); + +- idx = find_irq_entry(apic,pin,mp_INT); ++ idx = find_irq_entry(apic, pin, mp_INT); + if (idx == -1) { + if (first_notcon) { + apic_printk(APIC_VERBOSE, KERN_DEBUG + " IO-APIC (apicid-pin) %d-%d", +- mp_ioapics[apic].mpc_apicid, ++ mp_ioapics[apic].mp_apicid, + pin); + first_notcon = 0; + } else + apic_printk(APIC_VERBOSE, ", %d-%d", +- mp_ioapics[apic].mpc_apicid, pin); ++ mp_ioapics[apic].mp_apicid, pin); + continue; + } + +@@ -1343,7 +1348,7 @@ static void __init setup_IO_APIC_irqs(vo + vector = assign_irq_vector(irq); + entry.vector = vector; + ioapic_register_intr(irq, vector, IOAPIC_AUTO); +- ++ + if (!apic && (irq < 16)) + disable_8259A_irq(irq); + } +@@ -1355,27 +1360,23 @@ static void __init setup_IO_APIC_irqs(vo + apic_printk(APIC_VERBOSE, " not connected.\n"); + } + ++#ifndef CONFIG_XEN + /* +- * Set up the 8259A-master output pin: ++ * Set up the timer pin, possibly with the 8259A-master behind. + */ +-#ifndef CONFIG_XEN +-static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, int vector) ++static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin, ++ int vector) + { + struct IO_APIC_route_entry entry; + +- memset(&entry,0,sizeof(entry)); +- +- disable_8259A_irq(0); +- +- /* mask LVT0 */ +- apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); ++ memset(&entry, 0, sizeof(entry)); + + /* + * We use logical delivery to get the timer IRQ + * to the first CPU. + */ + entry.dest_mode = INT_DEST_MODE; +- entry.mask = 0; /* unmask IRQ now */ ++ entry.mask = 1; /* mask IRQ now */ + entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS); + entry.delivery_mode = INT_DELIVERY_MODE; + entry.polarity = 0; +@@ -1384,17 +1385,14 @@ static void __init setup_ExtINT_IRQ0_pin + + /* + * The timer IRQ doesn't have to know that behind the +- * scene we have a 8259A-master in AEOI mode ... ++ * scene we may have a 8259A-master in AEOI mode ... + */ +- irq_desc[0].chip = &ioapic_chip; +- set_irq_handler(0, handle_edge_irq); ++ ioapic_register_intr(0, vector, IOAPIC_EDGE); + + /* + * Add it to the IO-APIC irq-routing table: + */ + ioapic_write_entry(apic, pin, entry); +- +- enable_8259A_irq(0); + } + + void __init print_IO_APIC(void) +@@ -1409,10 +1407,10 @@ void __init print_IO_APIC(void) + if (apic_verbosity == APIC_QUIET) + return; + +- printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); ++ printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); + for (i = 0; i < nr_ioapics; i++) + printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n", +- mp_ioapics[i].mpc_apicid, nr_ioapic_registers[i]); ++ mp_ioapics[i].mp_apicid, nr_ioapic_registers[i]); + + /* + * We are a bit conservative about what we expect. We have to +@@ -1431,7 +1429,7 @@ void __init print_IO_APIC(void) + reg_03.raw = io_apic_read(apic, 3); + spin_unlock_irqrestore(&ioapic_lock, flags); + +- printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mpc_apicid); ++ printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mp_apicid); + printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw); + printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID); + printk(KERN_DEBUG "....... : Delivery Type: %X\n", reg_00.bits.delivery_type); +@@ -1512,7 +1510,7 @@ void __init print_IO_APIC(void) + return; + } + +-static void print_APIC_bitfield (int base) ++static void print_APIC_bitfield(int base) + { + unsigned int v; + int i, j; +@@ -1533,7 +1531,7 @@ static void print_APIC_bitfield (int bas + } + } + +-void /*__init*/ print_local_APIC(void * dummy) ++void /*__init*/ print_local_APIC(void *dummy) + { + unsigned int v, ver, maxlvt; + +@@ -1542,6 +1540,7 @@ void /*__init*/ print_local_APIC(void * + + printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", + smp_processor_id(), hard_smp_processor_id()); ++ v = apic_read(APIC_ID); + printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, + GET_APIC_ID(read_apic_id())); + v = apic_read(APIC_LVR); +@@ -1616,9 +1615,9 @@ void /*__init*/ print_local_APIC(void * + printk("\n"); + } + +-void print_all_local_APICs (void) ++void print_all_local_APICs(void) + { +- on_each_cpu(print_local_APIC, NULL, 1, 1); ++ on_each_cpu(print_local_APIC, NULL, 1); + } + + void /*__init*/ print_PIC(void) +@@ -1639,11 +1638,11 @@ void /*__init*/ print_PIC(void) + v = inb(0xa0) << 8 | inb(0x20); + printk(KERN_DEBUG "... PIC IRR: %04x\n", v); + +- outb(0x0b,0xa0); +- outb(0x0b,0x20); ++ outb(0x0b, 0xa0); ++ outb(0x0b, 0x20); + v = inb(0xa0) << 8 | inb(0x20); +- outb(0x0a,0xa0); +- outb(0x0a,0x20); ++ outb(0x0a, 0xa0); ++ outb(0x0a, 0x20); + + spin_unlock_irqrestore(&i8259A_lock, flags); + +@@ -1652,6 +1651,8 @@ void /*__init*/ print_PIC(void) + v = inb(0x4d1) << 8 | inb(0x4d0); + printk(KERN_DEBUG "... PIC ELCR: %04x\n", v); + } ++#else ++void __init print_IO_APIC(void) {} + #endif /* !CONFIG_XEN */ + + static void __init enable_IO_APIC(void) +@@ -1681,7 +1682,7 @@ static void __init enable_IO_APIC(void) + nr_ioapic_registers[apic] = reg_01.bits.entries+1; + } + #ifndef CONFIG_XEN +- for(apic = 0; apic < nr_ioapics; apic++) { ++ for (apic = 0; apic < nr_ioapics; apic++) { + int pin; + /* See if any of the pins is in ExtINT mode */ + for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { +@@ -1774,7 +1775,7 @@ void disable_IO_APIC(void) + * by Matt Domsch Tue Dec 21 12:25:05 CST 1999 + */ + +-#if !defined(CONFIG_XEN) && !defined(CONFIG_X86_NUMAQ) ++#ifndef CONFIG_XEN + static void __init setup_ioapic_ids_from_mpc(void) + { + union IO_APIC_reg_00 reg_00; +@@ -1784,6 +1785,11 @@ static void __init setup_ioapic_ids_from + unsigned char old_id; + unsigned long flags; + ++#ifdef CONFIG_X86_NUMAQ ++ if (found_numaq) ++ return; ++#endif ++ + /* + * Don't check I/O APIC IDs for xAPIC systems. They have + * no meaning without the serial APIC bus. +@@ -1806,15 +1812,15 @@ static void __init setup_ioapic_ids_from + spin_lock_irqsave(&ioapic_lock, flags); + reg_00.raw = io_apic_read(apic, 0); + spin_unlock_irqrestore(&ioapic_lock, flags); +- +- old_id = mp_ioapics[apic].mpc_apicid; + +- if (mp_ioapics[apic].mpc_apicid >= get_physical_broadcast()) { ++ old_id = mp_ioapics[apic].mp_apicid; ++ ++ if (mp_ioapics[apic].mp_apicid >= get_physical_broadcast()) { + printk(KERN_ERR "BIOS bug, IO-APIC#%d ID is %d in the MPC table!...\n", +- apic, mp_ioapics[apic].mpc_apicid); ++ apic, mp_ioapics[apic].mp_apicid); + printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", + reg_00.bits.ID); +- mp_ioapics[apic].mpc_apicid = reg_00.bits.ID; ++ mp_ioapics[apic].mp_apicid = reg_00.bits.ID; + } + + /* +@@ -1823,9 +1829,9 @@ static void __init setup_ioapic_ids_from + * 'stuck on smp_invalidate_needed IPI wait' messages. + */ + if (check_apicid_used(phys_id_present_map, +- mp_ioapics[apic].mpc_apicid)) { ++ mp_ioapics[apic].mp_apicid)) { + printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n", +- apic, mp_ioapics[apic].mpc_apicid); ++ apic, mp_ioapics[apic].mp_apicid); + for (i = 0; i < get_physical_broadcast(); i++) + if (!physid_isset(i, phys_id_present_map)) + break; +@@ -1834,13 +1840,13 @@ static void __init setup_ioapic_ids_from + printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", + i); + physid_set(i, phys_id_present_map); +- mp_ioapics[apic].mpc_apicid = i; ++ mp_ioapics[apic].mp_apicid = i; + } else { + physid_mask_t tmp; +- tmp = apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid); ++ tmp = apicid_to_cpu_present(mp_ioapics[apic].mp_apicid); + apic_printk(APIC_VERBOSE, "Setting %d in the " + "phys_id_present_map\n", +- mp_ioapics[apic].mpc_apicid); ++ mp_ioapics[apic].mp_apicid); + physids_or(phys_id_present_map, phys_id_present_map, tmp); + } + +@@ -1849,21 +1855,21 @@ static void __init setup_ioapic_ids_from + * We need to adjust the IRQ routing table + * if the ID changed. + */ +- if (old_id != mp_ioapics[apic].mpc_apicid) ++ if (old_id != mp_ioapics[apic].mp_apicid) + for (i = 0; i < mp_irq_entries; i++) +- if (mp_irqs[i].mpc_dstapic == old_id) +- mp_irqs[i].mpc_dstapic +- = mp_ioapics[apic].mpc_apicid; ++ if (mp_irqs[i].mp_dstapic == old_id) ++ mp_irqs[i].mp_dstapic ++ = mp_ioapics[apic].mp_apicid; + + /* + * Read the right value from the MPC table and + * write it into the ID register. +- */ ++ */ + apic_printk(APIC_VERBOSE, KERN_INFO + "...changing IO-APIC physical APIC ID to %d ...", +- mp_ioapics[apic].mpc_apicid); ++ mp_ioapics[apic].mp_apicid); + +- reg_00.bits.ID = mp_ioapics[apic].mpc_apicid; ++ reg_00.bits.ID = mp_ioapics[apic].mp_apicid; + spin_lock_irqsave(&ioapic_lock, flags); + io_apic_write(apic, 0, reg_00.raw); + spin_unlock_irqrestore(&ioapic_lock, flags); +@@ -1874,17 +1880,13 @@ static void __init setup_ioapic_ids_from + spin_lock_irqsave(&ioapic_lock, flags); + reg_00.raw = io_apic_read(apic, 0); + spin_unlock_irqrestore(&ioapic_lock, flags); +- if (reg_00.bits.ID != mp_ioapics[apic].mpc_apicid) ++ if (reg_00.bits.ID != mp_ioapics[apic].mp_apicid) + printk("could not set ID!\n"); + else + apic_printk(APIC_VERBOSE, " ok.\n"); + } + } +-#else +-static void __init setup_ioapic_ids_from_mpc(void) { } +-#endif + +-#ifndef CONFIG_XEN + int no_timer_check __initdata; + + static int __init notimercheck(char *s) +@@ -2077,45 +2079,53 @@ static inline void init_IO_APIC_traps(vo + * The local APIC irq-chip implementation: + */ + +-static void ack_apic(unsigned int irq) ++static void ack_lapic_irq(unsigned int irq) + { + ack_APIC_irq(); + } + +-static void mask_lapic_irq (unsigned int irq) ++static void mask_lapic_irq(unsigned int irq) + { + unsigned long v; + + v = apic_read(APIC_LVT0); +- apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED); ++ apic_write(APIC_LVT0, v | APIC_LVT_MASKED); + } + +-static void unmask_lapic_irq (unsigned int irq) ++static void unmask_lapic_irq(unsigned int irq) + { + unsigned long v; + + v = apic_read(APIC_LVT0); +- apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED); ++ apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED); + } + + static struct irq_chip lapic_chip __read_mostly = { +- .name = "local-APIC-edge", ++ .name = "local-APIC", + .mask = mask_lapic_irq, + .unmask = unmask_lapic_irq, +- .eoi = ack_apic, ++ .ack = ack_lapic_irq, + }; + ++static void lapic_register_intr(int irq, int vector) ++{ ++ irq_desc[irq].status &= ~IRQ_LEVEL; ++ set_irq_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq, ++ "edge"); ++ set_intr_gate(vector, interrupt[irq]); ++} ++ + static void __init setup_nmi(void) + { + /* +- * Dirty trick to enable the NMI watchdog ... ++ * Dirty trick to enable the NMI watchdog ... + * We put the 8259A master into AEOI mode and + * unmask on all local APICs LVT0 as NMI. + * + * The idea to use the 8259A in AEOI mode ('8259A Virtual Wire') + * is from Maciej W. Rozycki - so we do not have to EOI from + * the NMI handler or the timer interrupt. +- */ ++ */ + apic_printk(APIC_VERBOSE, KERN_INFO "activating NMI Watchdog ..."); + + enable_NMI_through_LVT0(); +@@ -2191,11 +2201,16 @@ static inline void __init unlock_ExtINT_ + static inline void __init check_timer(void) + { + int apic1, pin1, apic2, pin2; ++ int no_pin1 = 0; + int vector; ++ unsigned int ver; + unsigned long flags; + + local_irq_save(flags); + ++ ver = apic_read(APIC_LVR); ++ ver = GET_APIC_VERSION(ver); ++ + /* + * get/set the timer IRQ vector: + */ +@@ -2204,34 +2219,54 @@ static inline void __init check_timer(vo + set_intr_gate(vector, interrupt[0]); + + /* +- * Subtle, code in do_timer_interrupt() expects an AEOI +- * mode for the 8259A whenever interrupts are routed +- * through I/O APICs. Also IRQ0 has to be enabled in +- * the 8259A which implies the virtual wire has to be +- * disabled in the local APIC. ++ * As IRQ0 is to be enabled in the 8259A, the virtual ++ * wire has to be disabled in the local APIC. Also ++ * timer interrupts need to be acknowledged manually in ++ * the 8259A for the i82489DX when using the NMI ++ * watchdog as that APIC treats NMIs as level-triggered. ++ * The AEOI mode will finish them in the 8259A ++ * automatically. + */ +- apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); ++ apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); + init_8259A(1); +- timer_ack = 1; +- if (timer_over_8254 > 0) +- enable_8259A_irq(0); ++ timer_ack = (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver)); + + pin1 = find_isa_irq_pin(0, mp_INT); + apic1 = find_isa_irq_apic(0, mp_INT); + pin2 = ioapic_i8259.pin; + apic2 = ioapic_i8259.apic; + +- printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n", +- vector, apic1, pin1, apic2, pin2); ++ apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " ++ "apic1=%d pin1=%d apic2=%d pin2=%d\n", ++ vector, apic1, pin1, apic2, pin2); ++ ++ /* ++ * Some BIOS writers are clueless and report the ExtINTA ++ * I/O APIC input from the cascaded 8259A as the timer ++ * interrupt input. So just in case, if only one pin ++ * was found above, try it both directly and through the ++ * 8259A. ++ */ ++ if (pin1 == -1) { ++ pin1 = pin2; ++ apic1 = apic2; ++ no_pin1 = 1; ++ } else if (pin2 == -1) { ++ pin2 = pin1; ++ apic2 = apic1; ++ } + + if (pin1 != -1) { + /* + * Ok, does IRQ0 through the IOAPIC work? + */ ++ if (no_pin1) { ++ add_pin_to_irq(0, apic1, pin1); ++ setup_timer_IRQ0_pin(apic1, pin1, vector); ++ } + unmask_IO_APIC_irq(0); + if (timer_irq_works()) { + if (nmi_watchdog == NMI_IO_APIC) { +- disable_8259A_irq(0); + setup_nmi(); + enable_8259A_irq(0); + } +@@ -2240,71 +2275,77 @@ static inline void __init check_timer(vo + goto out; + } + clear_IO_APIC_pin(apic1, pin1); +- printk(KERN_ERR "..MP-BIOS bug: 8254 timer not connected to " +- "IO-APIC\n"); +- } +- +- printk(KERN_INFO "...trying to set up timer (IRQ0) through the 8259A ... "); +- if (pin2 != -1) { +- printk("\n..... (found pin %d) ...", pin2); ++ if (!no_pin1) ++ apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " ++ "8254 timer not connected to IO-APIC\n"); ++ ++ apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " ++ "(IRQ0) through the 8259A ...\n"); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "..... (found apic %d pin %d) ...\n", apic2, pin2); + /* + * legacy devices should be connected to IO APIC #0 + */ +- setup_ExtINT_IRQ0_pin(apic2, pin2, vector); ++ replace_pin_at_irq(0, apic1, pin1, apic2, pin2); ++ setup_timer_IRQ0_pin(apic2, pin2, vector); ++ unmask_IO_APIC_irq(0); ++ enable_8259A_irq(0); + if (timer_irq_works()) { +- printk("works.\n"); +- if (pin1 != -1) +- replace_pin_at_irq(0, apic1, pin1, apic2, pin2); +- else +- add_pin_to_irq(0, apic2, pin2); ++ apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); ++ timer_through_8259 = 1; + if (nmi_watchdog == NMI_IO_APIC) { ++ disable_8259A_irq(0); + setup_nmi(); ++ enable_8259A_irq(0); + } + goto out; + } + /* + * Cleanup, just in case ... + */ ++ disable_8259A_irq(0); + clear_IO_APIC_pin(apic2, pin2); ++ apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); + } +- printk(" failed.\n"); + + if (nmi_watchdog == NMI_IO_APIC) { +- printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); +- nmi_watchdog = 0; ++ apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " ++ "through the IO-APIC - disabling NMI Watchdog!\n"); ++ nmi_watchdog = NMI_NONE; + } ++ timer_ack = 0; + +- printk(KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "...trying to set up timer as Virtual Wire IRQ...\n"); + +- disable_8259A_irq(0); +- set_irq_chip_and_handler_name(0, &lapic_chip, handle_fasteoi_irq, +- "fasteoi"); +- apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ ++ lapic_register_intr(0, vector); ++ apic_write(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */ + enable_8259A_irq(0); + + if (timer_irq_works()) { +- printk(" works.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); + goto out; + } +- apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); +- printk(" failed.\n"); ++ disable_8259A_irq(0); ++ apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector); ++ apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); + +- printk(KERN_INFO "...trying to set up timer as ExtINT IRQ..."); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "...trying to set up timer as ExtINT IRQ...\n"); + +- timer_ack = 0; + init_8259A(0); + make_8259A_irq(0); +- apic_write_around(APIC_LVT0, APIC_DM_EXTINT); ++ apic_write(APIC_LVT0, APIC_DM_EXTINT); + + unlock_ExtINT_logic(); + + if (timer_irq_works()) { +- printk(" works.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); + goto out; + } +- printk(" failed :(.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); + panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " +- "report. Then try booting with the 'noapic' option"); ++ "report. Then try booting with the 'noapic' option.\n"); + out: + local_irq_restore(flags); + } +@@ -2314,11 +2355,21 @@ int timer_uses_ioapic_pin_0 = 0; + #endif + + /* +- * +- * IRQ's that are handled by the PIC in the MPS IOAPIC case. +- * - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ. +- * Linux doesn't really care, as it's not actually used +- * for any interrupt handling anyway. ++ * Traditionally ISA IRQ2 is the cascade IRQ, and is not available ++ * to devices. However there may be an I/O APIC pin available for ++ * this interrupt regardless. The pin may be left unconnected, but ++ * typically it will be reused as an ExtINT cascade interrupt for ++ * the master 8259A. In the MPS case such a pin will normally be ++ * reported as an ExtINT interrupt in the MP table. With ACPI ++ * there is no provision for ExtINT interrupts, and in the absence ++ * of an override it would be treated as an ordinary ISA I/O APIC ++ * interrupt, that is edge-triggered and unmasked by default. We ++ * used to do this, but it caused problems on some systems because ++ * of the NMI watchdog and sometimes IRQ0 of the 8254 timer using ++ * the same ExtINT cascade interrupt to drive the local APIC of the ++ * bootstrap processor. Therefore we refrain from routing IRQ2 to ++ * the I/O APIC in all cases now. No actual device should request ++ * it anyway. --macro + */ + #define PIC_IRQS (1 << PIC_CASCADE_IR) + +@@ -2328,25 +2379,22 @@ void __init setup_IO_APIC(void) + int i; + + /* Reserve all the system vectors. */ +- for (i = FIRST_SYSTEM_VECTOR; i < NR_VECTORS; i++) ++ for (i = first_system_vector; i < NR_VECTORS; i++) + set_bit(i, used_vectors); + #endif + + enable_IO_APIC(); + +- if (acpi_ioapic) +- io_apic_irqs = ~0; /* all IRQs go through IOAPIC */ +- else +- io_apic_irqs = ~PIC_IRQS; ++ io_apic_irqs = ~PIC_IRQS; + + printk("ENABLING IO-APIC IRQs\n"); + ++#ifndef CONFIG_XEN + /* + * Set up IO-APIC IRQ routing. + */ + if (!acpi_ioapic) + setup_ioapic_ids_from_mpc(); +-#ifndef CONFIG_XEN + sync_Arb_IDs(); + #endif + setup_IO_APIC_irqs(); +@@ -2356,28 +2404,14 @@ void __init setup_IO_APIC(void) + print_IO_APIC(); + } + +-static int __init setup_disable_8254_timer(char *s) +-{ +- timer_over_8254 = -1; +- return 1; +-} +-static int __init setup_enable_8254_timer(char *s) +-{ +- timer_over_8254 = 2; +- return 1; +-} +- +-__setup("disable_8254_timer", setup_disable_8254_timer); +-__setup("enable_8254_timer", setup_enable_8254_timer); +- + /* + * Called after all the initialization is done. If we didnt find any + * APIC bugs then we can allow the modify fast path + */ +- ++ + static int __init io_apic_bug_finalize(void) + { +- if(sis_apic_bug == -1) ++ if (sis_apic_bug == -1) + sis_apic_bug = 0; + if (is_initial_xendomain()) { + struct xen_platform_op op = { .cmd = XENPF_platform_quirk }; +@@ -2396,17 +2430,17 @@ struct sysfs_ioapic_data { + struct sys_device dev; + struct IO_APIC_route_entry entry[0]; + }; +-static struct sysfs_ioapic_data * mp_ioapic_data[MAX_IO_APICS]; ++static struct sysfs_ioapic_data *mp_ioapic_data[MAX_IO_APICS]; + + static int ioapic_suspend(struct sys_device *dev, pm_message_t state) + { + struct IO_APIC_route_entry *entry; + struct sysfs_ioapic_data *data; + int i; +- ++ + data = container_of(dev, struct sysfs_ioapic_data, dev); + entry = data->entry; +- for (i = 0; i < nr_ioapic_registers[dev->id]; i ++) ++ for (i = 0; i < nr_ioapic_registers[dev->id]; i++) + entry[i] = ioapic_read_entry(dev->id, i); + + return 0; +@@ -2419,18 +2453,18 @@ static int ioapic_resume(struct sys_devi + unsigned long flags; + union IO_APIC_reg_00 reg_00; + int i; +- ++ + data = container_of(dev, struct sysfs_ioapic_data, dev); + entry = data->entry; + + spin_lock_irqsave(&ioapic_lock, flags); + reg_00.raw = io_apic_read(dev->id, 0); +- if (reg_00.bits.ID != mp_ioapics[dev->id].mpc_apicid) { +- reg_00.bits.ID = mp_ioapics[dev->id].mpc_apicid; ++ if (reg_00.bits.ID != mp_ioapics[dev->id].mp_apicid) { ++ reg_00.bits.ID = mp_ioapics[dev->id].mp_apicid; + io_apic_write(dev->id, 0, reg_00.raw); + } + spin_unlock_irqrestore(&ioapic_lock, flags); +- for (i = 0; i < nr_ioapic_registers[dev->id]; i ++) ++ for (i = 0; i < nr_ioapic_registers[dev->id]; i++) + ioapic_write_entry(dev->id, i, entry[i]); + + return 0; +@@ -2444,24 +2478,23 @@ static struct sysdev_class ioapic_sysdev + + static int __init ioapic_init_sysfs(void) + { +- struct sys_device * dev; ++ struct sys_device *dev; + int i, size, error = 0; + + error = sysdev_class_register(&ioapic_sysdev_class); + if (error) + return error; + +- for (i = 0; i < nr_ioapics; i++ ) { +- size = sizeof(struct sys_device) + nr_ioapic_registers[i] ++ for (i = 0; i < nr_ioapics; i++) { ++ size = sizeof(struct sys_device) + nr_ioapic_registers[i] + * sizeof(struct IO_APIC_route_entry); +- mp_ioapic_data[i] = kmalloc(size, GFP_KERNEL); ++ mp_ioapic_data[i] = kzalloc(size, GFP_KERNEL); + if (!mp_ioapic_data[i]) { + printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i); + continue; + } +- memset(mp_ioapic_data[i], 0, size); + dev = &mp_ioapic_data[i]->dev; +- dev->id = i; ++ dev->id = i; + dev->cls = &ioapic_sysdev_class; + error = sysdev_register(dev); + if (error) { +@@ -2538,7 +2571,7 @@ static int msi_compose_msg(struct pci_de + msg->address_lo = + MSI_ADDR_BASE_LO | + ((INT_DEST_MODE == 0) ? +- MSI_ADDR_DEST_MODE_PHYSICAL: ++MSI_ADDR_DEST_MODE_PHYSICAL: + MSI_ADDR_DEST_MODE_LOGICAL) | + ((INT_DELIVERY_MODE != dest_LowestPrio) ? + MSI_ADDR_REDIRECTION_CPU: +@@ -2549,7 +2582,7 @@ static int msi_compose_msg(struct pci_de + MSI_DATA_TRIGGER_EDGE | + MSI_DATA_LEVEL_ASSERT | + ((INT_DELIVERY_MODE != dest_LowestPrio) ? +- MSI_DATA_DELIVERY_FIXED: ++MSI_DATA_DELIVERY_FIXED: + MSI_DATA_DELIVERY_LOWPRI) | + MSI_DATA_VECTOR(vector); + } +@@ -2720,12 +2753,12 @@ int arch_setup_ht_irq(unsigned int irq, + #endif /* CONFIG_HT_IRQ */ + + /* -------------------------------------------------------------------------- +- ACPI-based IOAPIC Configuration ++ ACPI-based IOAPIC Configuration + -------------------------------------------------------------------------- */ + + #ifdef CONFIG_ACPI + +-int __init io_apic_get_unique_id (int ioapic, int apic_id) ++int __init io_apic_get_unique_id(int ioapic, int apic_id) + { + #ifndef CONFIG_XEN + union IO_APIC_reg_00 reg_00; +@@ -2735,10 +2768,10 @@ int __init io_apic_get_unique_id (int io + int i = 0; + + /* +- * The P4 platform supports up to 256 APIC IDs on two separate APIC +- * buses (one for LAPICs, one for IOAPICs), where predecessors only ++ * The P4 platform supports up to 256 APIC IDs on two separate APIC ++ * buses (one for LAPICs, one for IOAPICs), where predecessors only + * supports up to 16 on one shared APIC bus. +- * ++ * + * TBD: Expand LAPIC/IOAPIC support on P4-class systems to take full + * advantage of new APIC bus architecture. + */ +@@ -2757,7 +2790,7 @@ int __init io_apic_get_unique_id (int io + } + + /* +- * Every APIC in a system must have a unique ID or we get lots of nice ++ * Every APIC in a system must have a unique ID or we get lots of nice + * 'stuck on smp_invalidate_needed IPI wait' messages. + */ + if (check_apicid_used(apic_id_map, apic_id)) { +@@ -2774,7 +2807,7 @@ int __init io_apic_get_unique_id (int io + "trying %d\n", ioapic, apic_id, i); + + apic_id = i; +- } ++ } + + tmp = apicid_to_cpu_present(apic_id); + physids_or(apic_id_map, apic_id_map, tmp); +@@ -2802,7 +2835,7 @@ int __init io_apic_get_unique_id (int io + } + + +-int __init io_apic_get_version (int ioapic) ++int __init io_apic_get_version(int ioapic) + { + union IO_APIC_reg_01 reg_01; + unsigned long flags; +@@ -2815,7 +2848,7 @@ int __init io_apic_get_version (int ioap + } + + +-int __init io_apic_get_redir_entries (int ioapic) ++int __init io_apic_get_redir_entries(int ioapic) + { + union IO_APIC_reg_01 reg_01; + unsigned long flags; +@@ -2828,7 +2861,7 @@ int __init io_apic_get_redir_entries (in + } + + +-int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low) ++int io_apic_set_pci_routing(int ioapic, int pin, int irq, int edge_level, int active_high_low) + { + struct IO_APIC_route_entry entry; + +@@ -2844,7 +2877,7 @@ int io_apic_set_pci_routing (int ioapic, + * corresponding device driver registers for this IRQ. + */ + +- memset(&entry,0,sizeof(entry)); ++ memset(&entry, 0, sizeof(entry)); + + entry.delivery_mode = INT_DELIVERY_MODE; + entry.dest_mode = INT_DEST_MODE; +@@ -2863,7 +2896,7 @@ int io_apic_set_pci_routing (int ioapic, + + apic_printk(APIC_DEBUG, KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry " + "(%d-%d -> 0x%x -> IRQ %d Mode:%i Active:%i)\n", ioapic, +- mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq, ++ mp_ioapics[ioapic].mp_apicid, pin, entry.vector, irq, + edge_level, active_high_low); + + ioapic_register_intr(irq, entry.vector, edge_level); +@@ -2884,8 +2917,8 @@ int acpi_get_override_irq(int bus_irq, i + return -1; + + for (i = 0; i < mp_irq_entries; i++) +- if (mp_irqs[i].mpc_irqtype == mp_INT && +- mp_irqs[i].mpc_srcbusirq == bus_irq) ++ if (mp_irqs[i].mp_irqtype == mp_INT && ++ mp_irqs[i].mp_srcbusirq == bus_irq) + break; + if (i >= mp_irq_entries) + return -1; +@@ -2918,3 +2951,35 @@ static int __init parse_noapic(char *arg + return 0; + } + early_param("noapic", parse_noapic); ++ ++#ifndef CONFIG_XEN ++void __init ioapic_init_mappings(void) ++{ ++ unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0; ++ int i; ++ ++ for (i = 0; i < nr_ioapics; i++) { ++ if (smp_found_config) { ++ ioapic_phys = mp_ioapics[i].mp_apicaddr; ++ if (!ioapic_phys) { ++ printk(KERN_ERR ++ "WARNING: bogus zero IO-APIC " ++ "address found in MPTABLE, " ++ "disabling IO/APIC support!\n"); ++ smp_found_config = 0; ++ skip_ioapic_setup = 1; ++ goto fake_ioapic_page; ++ } ++ } else { ++fake_ioapic_page: ++ ioapic_phys = (unsigned long) ++ alloc_bootmem_pages(PAGE_SIZE); ++ ioapic_phys = __pa(ioapic_phys); ++ } ++ set_fixmap_nocache(idx, ioapic_phys); ++ printk(KERN_DEBUG "mapped IOAPIC to %08lx (%08lx)\n", ++ __fix_to_virt(idx), ioapic_phys); ++ idx++; ++ } ++} ++#endif +--- head-2010-01-18.orig/arch/x86/kernel/io_apic_64-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/io_apic_64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -45,6 +45,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -63,10 +64,16 @@ struct irq_cfg { + }; + + /* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */ +-struct irq_cfg irq_cfg[NR_IRQS] __read_mostly; ++static struct irq_cfg irq_cfg[NR_IRQS] __read_mostly; + + static int assign_irq_vector(int irq, cpumask_t mask); + ++#ifndef CONFIG_XEN ++int first_system_vector = 0xfe; ++ ++char system_vectors[NR_VECTORS] = { [0 ... NR_VECTORS-1] = SYS_VECTOR_FREE}; ++#endif ++ + #define __apicdebuginit __init + + int sis_apic_bug; /* not actually supported, dummy for compile */ +@@ -89,14 +96,14 @@ unsigned long io_apic_irqs; + + #define clear_IO_APIC() ((void)0) + #else +-int timer_over_8254 __initdata = 1; ++int timer_through_8259 __initdata; + + /* Where if anywhere is the i8259 connect in external int mode */ + static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; + #endif + + static DEFINE_SPINLOCK(ioapic_lock); +-DEFINE_SPINLOCK(vector_lock); ++static DEFINE_SPINLOCK(vector_lock); + + /* + * # of IRQ routing registers +@@ -104,15 +111,17 @@ DEFINE_SPINLOCK(vector_lock); + int nr_ioapic_registers[MAX_IO_APICS]; + + /* I/O APIC entries */ +-struct mpc_config_ioapic mp_ioapics[MAX_IO_APICS]; ++struct mp_config_ioapic mp_ioapics[MAX_IO_APICS]; + int nr_ioapics; + + /* MP IRQ source entries */ +-struct mpc_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; ++struct mp_config_intsrc mp_irqs[MAX_IRQ_SOURCES]; + + /* # of MP IRQ source entries */ + int mp_irq_entries; + ++DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES); ++ + /* + * Rough estimation of how many shared IRQs there are, can + * be changed anytime. +@@ -141,7 +150,7 @@ struct io_apic { + static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) + { + return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) +- + (mp_ioapics[idx].mpc_apicaddr & ~PAGE_MASK); ++ + (mp_ioapics[idx].mp_apicaddr & ~PAGE_MASK); + } + #endif + +@@ -155,7 +164,7 @@ static inline unsigned int io_apic_read( + struct physdev_apic apic_op; + int ret; + +- apic_op.apic_physbase = mp_ioapics[apic].mpc_apicaddr; ++ apic_op.apic_physbase = mp_ioapics[apic].mp_apicaddr; + apic_op.reg = reg; + ret = HYPERVISOR_physdev_op(PHYSDEVOP_apic_read, &apic_op); + if (ret) +@@ -173,7 +182,7 @@ static inline void io_apic_write(unsigne + #else + struct physdev_apic apic_op; + +- apic_op.apic_physbase = mp_ioapics[apic].mpc_apicaddr; ++ apic_op.apic_physbase = mp_ioapics[apic].mp_apicaddr; + apic_op.reg = reg; + apic_op.value = value; + WARN_ON(HYPERVISOR_physdev_op(PHYSDEVOP_apic_write, &apic_op)); +@@ -209,7 +218,7 @@ static bool io_apic_level_ack_pending(un + break; + reg = io_apic_read(entry->apic, 0x10 + pin*2); + /* Is the remote IRR bit set? */ +- if ((reg >> 14) & 1) { ++ if (reg & IO_APIC_REDIR_REMOTE_IRR) { + spin_unlock_irqrestore(&ioapic_lock, flags); + return true; + } +@@ -308,7 +317,7 @@ static void __target_IO_APIC_irq(unsigne + break; + io_apic_write(apic, 0x11 + pin*2, dest); + reg = io_apic_read(apic, 0x10 + pin*2); +- reg &= ~0x000000ff; ++ reg &= ~IO_APIC_REDIR_VECTOR_MASK; + reg |= vector; + io_apic_modify(apic, reg); + if (!entry->next) +@@ -372,6 +381,26 @@ static void add_pin_to_irq(unsigned int + } + + #ifndef CONFIG_XEN ++/* ++ * Reroute an IRQ to a different pin. ++ */ ++static void __init replace_pin_at_irq(unsigned int irq, ++ int oldapic, int oldpin, ++ int newapic, int newpin) ++{ ++ struct irq_pin_list *entry = irq_2_pin + irq; ++ ++ while (1) { ++ if (entry->apic == oldapic && entry->pin == oldpin) { ++ entry->apic = newapic; ++ entry->pin = newpin; ++ } ++ if (!entry->next) ++ break; ++ entry = irq_2_pin + entry->next; ++ } ++} ++ + #define __DO_ACTION(R, ACTION, FINAL) \ + \ + { \ +@@ -399,10 +428,11 @@ static void add_pin_to_irq(unsigned int + static void name##_IO_APIC_irq (unsigned int irq) \ + __DO_ACTION(R, ACTION, FINAL) + +-DO_ACTION( __mask, 0, |= 0x00010000, io_apic_sync(entry->apic) ) +- /* mask = 1 */ +-DO_ACTION( __unmask, 0, &= 0xfffeffff, ) +- /* mask = 0 */ ++/* mask = 1 */ ++DO_ACTION(__mask, 0, |= IO_APIC_REDIR_MASKED, io_apic_sync(entry->apic)) ++ ++/* mask = 0 */ ++DO_ACTION(__unmask, 0, &= ~IO_APIC_REDIR_MASKED, ) + + static void mask_IO_APIC_irq (unsigned int irq) + { +@@ -465,22 +495,6 @@ static int __init disable_timer_pin_setu + } + __setup("disable_timer_pin_1", disable_timer_pin_setup); + +-#ifndef CONFIG_XEN +-static int __init setup_disable_8254_timer(char *s) +-{ +- timer_over_8254 = -1; +- return 1; +-} +-static int __init setup_enable_8254_timer(char *s) +-{ +- timer_over_8254 = 2; +- return 1; +-} +- +-__setup("disable_8254_timer", setup_disable_8254_timer); +-__setup("enable_8254_timer", setup_enable_8254_timer); +-#endif /* !CONFIG_XEN */ +- + + /* + * Find the IRQ entry number of a certain pin. +@@ -490,10 +504,10 @@ static int find_irq_entry(int apic, int + int i; + + for (i = 0; i < mp_irq_entries; i++) +- if (mp_irqs[i].mpc_irqtype == type && +- (mp_irqs[i].mpc_dstapic == mp_ioapics[apic].mpc_apicid || +- mp_irqs[i].mpc_dstapic == MP_APIC_ALL) && +- mp_irqs[i].mpc_dstirq == pin) ++ if (mp_irqs[i].mp_irqtype == type && ++ (mp_irqs[i].mp_dstapic == mp_ioapics[apic].mp_apicid || ++ mp_irqs[i].mp_dstapic == MP_APIC_ALL) && ++ mp_irqs[i].mp_dstirq == pin) + return i; + + return -1; +@@ -508,13 +522,13 @@ static int __init find_isa_irq_pin(int i + int i; + + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + if (test_bit(lbus, mp_bus_not_pci) && +- (mp_irqs[i].mpc_irqtype == type) && +- (mp_irqs[i].mpc_srcbusirq == irq)) ++ (mp_irqs[i].mp_irqtype == type) && ++ (mp_irqs[i].mp_srcbusirq == irq)) + +- return mp_irqs[i].mpc_dstirq; ++ return mp_irqs[i].mp_dstirq; + } + return -1; + } +@@ -524,17 +538,17 @@ static int __init find_isa_irq_apic(int + int i; + + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + if (test_bit(lbus, mp_bus_not_pci) && +- (mp_irqs[i].mpc_irqtype == type) && +- (mp_irqs[i].mpc_srcbusirq == irq)) ++ (mp_irqs[i].mp_irqtype == type) && ++ (mp_irqs[i].mp_srcbusirq == irq)) + break; + } + if (i < mp_irq_entries) { + int apic; + for(apic = 0; apic < nr_ioapics; apic++) { +- if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic) ++ if (mp_ioapics[apic].mp_apicid == mp_irqs[i].mp_dstapic) + return apic; + } + } +@@ -555,28 +569,28 @@ int IO_APIC_get_PCI_irq_vector(int bus, + + apic_printk(APIC_DEBUG, "querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n", + bus, slot, pin); +- if (mp_bus_id_to_pci_bus[bus] == -1) { ++ if (test_bit(bus, mp_bus_not_pci)) { + apic_printk(APIC_VERBOSE, "PCI BIOS passed nonexistent PCI bus %d!\n", bus); + return -1; + } + for (i = 0; i < mp_irq_entries; i++) { +- int lbus = mp_irqs[i].mpc_srcbus; ++ int lbus = mp_irqs[i].mp_srcbus; + + for (apic = 0; apic < nr_ioapics; apic++) +- if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic || +- mp_irqs[i].mpc_dstapic == MP_APIC_ALL) ++ if (mp_ioapics[apic].mp_apicid == mp_irqs[i].mp_dstapic || ++ mp_irqs[i].mp_dstapic == MP_APIC_ALL) + break; + + if (!test_bit(lbus, mp_bus_not_pci) && +- !mp_irqs[i].mpc_irqtype && ++ !mp_irqs[i].mp_irqtype && + (bus == lbus) && +- (slot == ((mp_irqs[i].mpc_srcbusirq >> 2) & 0x1f))) { +- int irq = pin_2_irq(i,apic,mp_irqs[i].mpc_dstirq); ++ (slot == ((mp_irqs[i].mp_srcbusirq >> 2) & 0x1f))) { ++ int irq = pin_2_irq(i,apic,mp_irqs[i].mp_dstirq); + + if (!(apic || IO_APIC_IRQ(irq))) + continue; + +- if (pin == (mp_irqs[i].mpc_srcbusirq & 3)) ++ if (pin == (mp_irqs[i].mp_srcbusirq & 3)) + return irq; + /* + * Use the first all-but-pin matching entry as a +@@ -604,13 +618,13 @@ int IO_APIC_get_PCI_irq_vector(int bus, + + static int MPBIOS_polarity(int idx) + { +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + int polarity; + + /* + * Determine IRQ line polarity (high active or low active): + */ +- switch (mp_irqs[idx].mpc_irqflag & 3) ++ switch (mp_irqs[idx].mp_irqflag & 3) + { + case 0: /* conforms, ie. bus-type dependent polarity */ + if (test_bit(bus, mp_bus_not_pci)) +@@ -646,13 +660,13 @@ static int MPBIOS_polarity(int idx) + + static int MPBIOS_trigger(int idx) + { +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + int trigger; + + /* + * Determine IRQ trigger mode (edge or level sensitive): + */ +- switch ((mp_irqs[idx].mpc_irqflag>>2) & 3) ++ switch ((mp_irqs[idx].mp_irqflag>>2) & 3) + { + case 0: /* conforms, ie. bus-type dependent */ + if (test_bit(bus, mp_bus_not_pci)) +@@ -699,16 +713,16 @@ static inline int irq_trigger(int idx) + static int pin_2_irq(int idx, int apic, int pin) + { + int irq, i; +- int bus = mp_irqs[idx].mpc_srcbus; ++ int bus = mp_irqs[idx].mp_srcbus; + + /* + * Debugging check, we are in big trouble if this message pops up! + */ +- if (mp_irqs[idx].mpc_dstirq != pin) ++ if (mp_irqs[idx].mp_dstirq != pin) + printk(KERN_ERR "broken BIOS or MPTABLE parser, ayiee!!\n"); + + if (test_bit(bus, mp_bus_not_pci)) { +- irq = mp_irqs[idx].mpc_srcbusirq; ++ irq = mp_irqs[idx].mp_srcbusirq; + } else { + /* + * PCI IRQs are mapped in order +@@ -722,6 +736,19 @@ static int pin_2_irq(int idx, int apic, + return irq; + } + ++void lock_vector_lock(void) ++{ ++ /* Used to the online set of cpus does not change ++ * during assign_irq_vector. ++ */ ++ spin_lock(&vector_lock); ++} ++ ++void unlock_vector_lock(void) ++{ ++ spin_unlock(&vector_lock); ++} ++ + static int __assign_irq_vector(int irq, cpumask_t mask) + { + struct physdev_irq irq_op; +@@ -773,7 +800,7 @@ static void __clear_irq_vector(int irq) + + vector = cfg->vector; + cpus_and(mask, cfg->domain, cpu_online_map); +- for_each_cpu_mask(cpu, mask) ++ for_each_cpu_mask_nr(cpu, mask) + per_cpu(vector_irq, cpu)[vector] = -1; + + cfg->vector = 0; +@@ -842,7 +869,7 @@ static void setup_IO_APIC_irq(int apic, + apic_printk(APIC_VERBOSE,KERN_DEBUG + "IOAPIC[%d]: Set routing entry (%d-%d -> 0x%x -> " + "IRQ %d Mode:%i Active:%i)\n", +- apic, mp_ioapics[apic].mpc_apicid, pin, cfg->vector, ++ apic, mp_ioapics[apic].mp_apicid, pin, cfg->vector, + irq, trigger, polarity); + + /* +@@ -883,10 +910,10 @@ static void __init setup_IO_APIC_irqs(vo + idx = find_irq_entry(apic,pin,mp_INT); + if (idx == -1) { + if (first_notcon) { +- apic_printk(APIC_VERBOSE, KERN_DEBUG " IO-APIC (apicid-pin) %d-%d", mp_ioapics[apic].mpc_apicid, pin); ++ apic_printk(APIC_VERBOSE, KERN_DEBUG " IO-APIC (apicid-pin) %d-%d", mp_ioapics[apic].mp_apicid, pin); + first_notcon = 0; + } else +- apic_printk(APIC_VERBOSE, ", %d-%d", mp_ioapics[apic].mpc_apicid, pin); ++ apic_printk(APIC_VERBOSE, ", %d-%d", mp_ioapics[apic].mp_apicid, pin); + continue; + } + if (!first_notcon) { +@@ -908,26 +935,21 @@ static void __init setup_IO_APIC_irqs(vo + + #ifndef CONFIG_XEN + /* +- * Set up the 8259A-master output pin as broadcast to all +- * CPUs. ++ * Set up the timer pin, possibly with the 8259A-master behind. + */ +-static void __init setup_ExtINT_IRQ0_pin(unsigned int apic, unsigned int pin, int vector) ++static void __init setup_timer_IRQ0_pin(unsigned int apic, unsigned int pin, ++ int vector) + { + struct IO_APIC_route_entry entry; + + memset(&entry, 0, sizeof(entry)); + +- disable_8259A_irq(0); +- +- /* mask LVT0 */ +- apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); +- + /* + * We use logical delivery to get the timer IRQ + * to the first CPU. + */ + entry.dest_mode = INT_DEST_MODE; +- entry.mask = 0; /* unmask IRQ now */ ++ entry.mask = 1; /* mask IRQ now */ + entry.dest = cpu_mask_to_apicid(TARGET_CPUS); + entry.delivery_mode = INT_DELIVERY_MODE; + entry.polarity = 0; +@@ -936,7 +958,7 @@ static void __init setup_ExtINT_IRQ0_pin + + /* + * The timer IRQ doesn't have to know that behind the +- * scene we have a 8259A-master in AEOI mode ... ++ * scene we may have a 8259A-master in AEOI mode ... + */ + set_irq_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq, "edge"); + +@@ -944,8 +966,6 @@ static void __init setup_ExtINT_IRQ0_pin + * Add it to the IO-APIC irq-routing table: + */ + ioapic_write_entry(apic, pin, entry); +- +- enable_8259A_irq(0); + } + + void __apicdebuginit print_IO_APIC(void) +@@ -962,7 +982,7 @@ void __apicdebuginit print_IO_APIC(void) + printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); + for (i = 0; i < nr_ioapics; i++) + printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n", +- mp_ioapics[i].mpc_apicid, nr_ioapic_registers[i]); ++ mp_ioapics[i].mp_apicid, nr_ioapic_registers[i]); + + /* + * We are a bit conservative about what we expect. We have to +@@ -980,7 +1000,7 @@ void __apicdebuginit print_IO_APIC(void) + spin_unlock_irqrestore(&ioapic_lock, flags); + + printk("\n"); +- printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mpc_apicid); ++ printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mp_apicid); + printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw); + printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID); + +@@ -1072,6 +1092,7 @@ void __apicdebuginit print_local_APIC(vo + + printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", + smp_processor_id(), hard_smp_processor_id()); ++ v = apic_read(APIC_ID); + printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, GET_APIC_ID(read_apic_id())); + v = apic_read(APIC_LVR); + printk(KERN_INFO "... APIC VERSION: %08x\n", v); +@@ -1141,7 +1162,7 @@ void __apicdebuginit print_local_APIC(vo + + void print_all_local_APICs (void) + { +- on_each_cpu(print_local_APIC, NULL, 1, 1); ++ on_each_cpu(print_local_APIC, NULL, 1); + } + + void __apicdebuginit print_PIC(void) +@@ -1175,6 +1196,8 @@ void __apicdebuginit print_PIC(void) + v = inb(0x4d1) << 8 | inb(0x4d0); + printk(KERN_DEBUG "... PIC ELCR: %04x\n", v); + } ++#else ++void __apicdebuginit print_IO_APIC(void) {} + #endif /* !CONFIG_XEN */ + + void __init enable_IO_APIC(void) +@@ -1359,12 +1382,10 @@ static unsigned int startup_ioapic_irq(u + static int ioapic_retrigger_irq(unsigned int irq) + { + struct irq_cfg *cfg = &irq_cfg[irq]; +- cpumask_t mask; + unsigned long flags; + + spin_lock_irqsave(&vector_lock, flags); +- mask = cpumask_of_cpu(first_cpu(cfg->domain)); +- send_IPI_mask(mask, cfg->vector); ++ send_IPI_mask(cpumask_of_cpu(first_cpu(cfg->domain)), cfg->vector); + spin_unlock_irqrestore(&vector_lock, flags); + + return 1; +@@ -1545,7 +1566,7 @@ static inline void init_IO_APIC_traps(vo + } + + #ifndef CONFIG_XEN +-static void enable_lapic_irq (unsigned int irq) ++static void unmask_lapic_irq(unsigned int irq) + { + unsigned long v; + +@@ -1553,7 +1574,7 @@ static void enable_lapic_irq (unsigned i + apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED); + } + +-static void disable_lapic_irq (unsigned int irq) ++static void mask_lapic_irq(unsigned int irq) + { + unsigned long v; + +@@ -1566,19 +1587,20 @@ static void ack_lapic_irq (unsigned int + ack_APIC_irq(); + } + +-static void end_lapic_irq (unsigned int i) { /* nothing */ } +- +-static struct hw_interrupt_type lapic_irq_type __read_mostly = { +- .name = "local-APIC", +- .typename = "local-APIC-edge", +- .startup = NULL, /* startup_irq() not used for IRQ0 */ +- .shutdown = NULL, /* shutdown_irq() not used for IRQ0 */ +- .enable = enable_lapic_irq, +- .disable = disable_lapic_irq, +- .ack = ack_lapic_irq, +- .end = end_lapic_irq, ++static struct irq_chip lapic_chip __read_mostly = { ++ .name = "local-APIC", ++ .mask = mask_lapic_irq, ++ .unmask = unmask_lapic_irq, ++ .ack = ack_lapic_irq, + }; + ++static void lapic_register_intr(int irq) ++{ ++ irq_desc[irq].status &= ~IRQ_LEVEL; ++ set_irq_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq, ++ "edge"); ++} ++ + static void __init setup_nmi(void) + { + /* +@@ -1664,6 +1686,7 @@ static inline void __init check_timer(vo + struct irq_cfg *cfg = irq_cfg + 0; + int apic1, pin1, apic2, pin2; + unsigned long flags; ++ int no_pin1 = 0; + + local_irq_save(flags); + +@@ -1674,34 +1697,48 @@ static inline void __init check_timer(vo + assign_irq_vector(0, TARGET_CPUS); + + /* +- * Subtle, code in do_timer_interrupt() expects an AEOI +- * mode for the 8259A whenever interrupts are routed +- * through I/O APICs. Also IRQ0 has to be enabled in +- * the 8259A which implies the virtual wire has to be +- * disabled in the local APIC. ++ * As IRQ0 is to be enabled in the 8259A, the virtual ++ * wire has to be disabled in the local APIC. + */ + apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); + init_8259A(1); +- if (timer_over_8254 > 0) +- enable_8259A_irq(0); + + pin1 = find_isa_irq_pin(0, mp_INT); + apic1 = find_isa_irq_apic(0, mp_INT); + pin2 = ioapic_i8259.pin; + apic2 = ioapic_i8259.apic; + +- apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n", +- cfg->vector, apic1, pin1, apic2, pin2); ++ apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " ++ "apic1=%d pin1=%d apic2=%d pin2=%d\n", ++ cfg->vector, apic1, pin1, apic2, pin2); ++ ++ /* ++ * Some BIOS writers are clueless and report the ExtINTA ++ * I/O APIC input from the cascaded 8259A as the timer ++ * interrupt input. So just in case, if only one pin ++ * was found above, try it both directly and through the ++ * 8259A. ++ */ ++ if (pin1 == -1) { ++ pin1 = pin2; ++ apic1 = apic2; ++ no_pin1 = 1; ++ } else if (pin2 == -1) { ++ pin2 = pin1; ++ apic2 = apic1; ++ } + + if (pin1 != -1) { + /* + * Ok, does IRQ0 through the IOAPIC work? + */ ++ if (no_pin1) { ++ add_pin_to_irq(0, apic1, pin1); ++ setup_timer_IRQ0_pin(apic1, pin1, cfg->vector); ++ } + unmask_IO_APIC_irq(0); + if (!no_timer_check && timer_irq_works()) { +- nmi_watchdog_default(); + if (nmi_watchdog == NMI_IO_APIC) { +- disable_8259A_irq(0); + setup_nmi(); + enable_8259A_irq(0); + } +@@ -1710,54 +1747,62 @@ static inline void __init check_timer(vo + goto out; + } + clear_IO_APIC_pin(apic1, pin1); +- apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: 8254 timer not " +- "connected to IO-APIC\n"); +- } +- +- apic_printk(APIC_VERBOSE,KERN_INFO "...trying to set up timer (IRQ0) " +- "through the 8259A ... "); +- if (pin2 != -1) { +- apic_printk(APIC_VERBOSE,"\n..... (found apic %d pin %d) ...", +- apic2, pin2); ++ if (!no_pin1) ++ apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " ++ "8254 timer not connected to IO-APIC\n"); ++ ++ apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " ++ "(IRQ0) through the 8259A ...\n"); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "..... (found apic %d pin %d) ...\n", apic2, pin2); + /* + * legacy devices should be connected to IO APIC #0 + */ +- setup_ExtINT_IRQ0_pin(apic2, pin2, cfg->vector); ++ replace_pin_at_irq(0, apic1, pin1, apic2, pin2); ++ setup_timer_IRQ0_pin(apic2, pin2, cfg->vector); ++ unmask_IO_APIC_irq(0); ++ enable_8259A_irq(0); + if (timer_irq_works()) { +- apic_printk(APIC_VERBOSE," works.\n"); +- nmi_watchdog_default(); ++ apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); ++ timer_through_8259 = 1; + if (nmi_watchdog == NMI_IO_APIC) { ++ disable_8259A_irq(0); + setup_nmi(); ++ enable_8259A_irq(0); + } + goto out; + } + /* + * Cleanup, just in case ... + */ ++ disable_8259A_irq(0); + clear_IO_APIC_pin(apic2, pin2); ++ apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); + } +- apic_printk(APIC_VERBOSE," failed.\n"); + + if (nmi_watchdog == NMI_IO_APIC) { +- printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n"); +- nmi_watchdog = 0; ++ apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " ++ "through the IO-APIC - disabling NMI Watchdog!\n"); ++ nmi_watchdog = NMI_NONE; + } + +- apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ..."); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "...trying to set up timer as Virtual Wire IRQ...\n"); + +- disable_8259A_irq(0); +- irq_desc[0].chip = &lapic_irq_type; ++ lapic_register_intr(0); + apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ + enable_8259A_irq(0); + + if (timer_irq_works()) { +- apic_printk(APIC_VERBOSE," works.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); + goto out; + } ++ disable_8259A_irq(0); + apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); +- apic_printk(APIC_VERBOSE," failed.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); + +- apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ..."); ++ apic_printk(APIC_QUIET, KERN_INFO ++ "...trying to set up timer as ExtINT IRQ...\n"); + + init_8259A(0); + make_8259A_irq(0); +@@ -1766,11 +1811,12 @@ static inline void __init check_timer(vo + unlock_ExtINT_logic(); + + if (timer_irq_works()) { +- apic_printk(APIC_VERBOSE," works.\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); + goto out; + } +- apic_printk(APIC_VERBOSE," failed :(.\n"); +- panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n"); ++ apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); ++ panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " ++ "report. Then try booting with the 'noapic' option.\n"); + out: + local_irq_restore(flags); + } +@@ -1788,10 +1834,21 @@ __setup("no_timer_check", notimercheck); + + /* + * +- * IRQs that are handled by the PIC in the MPS IOAPIC case. +- * - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ. +- * Linux doesn't really care, as it's not actually used +- * for any interrupt handling anyway. ++ * Traditionally ISA IRQ2 is the cascade IRQ, and is not available ++ * to devices. However there may be an I/O APIC pin available for ++ * this interrupt regardless. The pin may be left unconnected, but ++ * typically it will be reused as an ExtINT cascade interrupt for ++ * the master 8259A. In the MPS case such a pin will normally be ++ * reported as an ExtINT interrupt in the MP table. With ACPI ++ * there is no provision for ExtINT interrupts, and in the absence ++ * of an override it would be treated as an ordinary ISA I/O APIC ++ * interrupt, that is edge-triggered and unmasked by default. We ++ * used to do this, but it caused problems on some systems because ++ * of the NMI watchdog and sometimes IRQ0 of the 8254 timer using ++ * the same ExtINT cascade interrupt to drive the local APIC of the ++ * bootstrap processor. Therefore we refrain from routing IRQ2 to ++ * the I/O APIC in all cases now. No actual device should request ++ * it anyway. --macro + */ + #define PIC_IRQS (1<<2) + +@@ -1799,10 +1856,7 @@ void __init setup_IO_APIC(void) + { + enable_IO_APIC(); + +- if (acpi_ioapic) +- io_apic_irqs = ~0; /* all IRQs go through IOAPIC */ +- else +- io_apic_irqs = ~PIC_IRQS; ++ io_apic_irqs = ~PIC_IRQS; + + apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n"); + +@@ -1851,8 +1905,8 @@ static int ioapic_resume(struct sys_devi + + spin_lock_irqsave(&ioapic_lock, flags); + reg_00.raw = io_apic_read(dev->id, 0); +- if (reg_00.bits.ID != mp_ioapics[dev->id].mpc_apicid) { +- reg_00.bits.ID = mp_ioapics[dev->id].mpc_apicid; ++ if (reg_00.bits.ID != mp_ioapics[dev->id].mp_apicid) { ++ reg_00.bits.ID = mp_ioapics[dev->id].mp_apicid; + io_apic_write(dev->id, 0, reg_00.raw); + } + spin_unlock_irqrestore(&ioapic_lock, flags); +@@ -2254,8 +2308,8 @@ int acpi_get_override_irq(int bus_irq, i + return -1; + + for (i = 0; i < mp_irq_entries; i++) +- if (mp_irqs[i].mpc_irqtype == mp_INT && +- mp_irqs[i].mpc_srcbusirq == bus_irq) ++ if (mp_irqs[i].mp_irqtype == mp_INT && ++ mp_irqs[i].mp_srcbusirq == bus_irq) + break; + if (i >= mp_irq_entries) + return -1; +@@ -2349,7 +2403,7 @@ void __init ioapic_init_mappings(void) + ioapic_res = ioapic_setup_resources(); + for (i = 0; i < nr_ioapics; i++) { + if (smp_found_config) { +- ioapic_phys = mp_ioapics[i].mpc_apicaddr; ++ ioapic_phys = mp_ioapics[i].mp_apicaddr; + } else { + ioapic_phys = (unsigned long) + alloc_bootmem_pages(PAGE_SIZE); +--- head-2010-01-18.orig/arch/x86/kernel/apic/ipi-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/apic/ipi-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -8,7 +8,6 @@ + #include + #include + #include +-#include + #include + #include + +@@ -85,7 +84,7 @@ void __send_IPI_shortcut(unsigned int sh + /* + * Send the IPI. The write to APIC_ICR fires this off. + */ +- apic_write_around(APIC_ICR, cfg); ++ apic_write(APIC_ICR, cfg); + #else + int cpu; + +@@ -132,7 +131,7 @@ static inline void __send_IPI_dest_field + * prepare target chip field + */ + cfg = __prepare_ICR2(mask); +- apic_write_around(APIC_ICR2, cfg); ++ apic_write(APIC_ICR2, cfg); + + /* + * program the ICR +@@ -142,7 +141,7 @@ static inline void __send_IPI_dest_field + /* + * Send the IPI. The write to APIC_ICR fires this off. + */ +- apic_write_around(APIC_ICR, cfg); ++ apic_write(APIC_ICR, cfg); + } + #endif + +--- head-2010-01-18.orig/arch/x86/kernel/irq_32-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/irq_32-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -48,6 +48,29 @@ void ack_bad_irq(unsigned int irq) + #endif + } + ++#ifdef CONFIG_DEBUG_STACKOVERFLOW ++/* Debugging check for stack overflow: is there less than 1KB free? */ ++static int check_stack_overflow(void) ++{ ++ long sp; ++ ++ __asm__ __volatile__("andl %%esp,%0" : ++ "=r" (sp) : "0" (THREAD_SIZE - 1)); ++ ++ return sp < (sizeof(struct thread_info) + STACK_WARN); ++} ++ ++static void print_stack_overflow(void) ++{ ++ printk(KERN_WARNING "low stack detected by irq handler\n"); ++ dump_stack(); ++} ++ ++#else ++static inline int check_stack_overflow(void) { return 0; } ++static inline void print_stack_overflow(void) { } ++#endif ++ + #ifdef CONFIG_4KSTACKS + /* + * per-CPU IRQ handling contexts (thread information and stack) +@@ -59,48 +82,26 @@ union irq_ctx { + + static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly; + static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; +-#endif +- +-/* +- * do_IRQ handles all normal device IRQ's (the special +- * SMP cross-CPU interrupts have their own specific +- * handlers). +- */ +-unsigned int do_IRQ(struct pt_regs *regs) +-{ +- struct pt_regs *old_regs; +- /* high bit used in ret_from_ code */ +- int irq = ~regs->orig_ax; +- struct irq_desc *desc = irq_desc + irq; +-#ifdef CONFIG_4KSTACKS +- union irq_ctx *curctx, *irqctx; +- u32 *isp; +-#endif + +- if (unlikely((unsigned)irq >= NR_IRQS)) { +- printk(KERN_EMERG "%s: cannot handle IRQ %d\n", +- __func__, irq); +- BUG(); +- } ++static char softirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; ++static char hardirq_stack[NR_CPUS * THREAD_SIZE] __page_aligned_bss; + +- old_regs = set_irq_regs(regs); +- /*irq_enter();*/ +-#ifdef CONFIG_DEBUG_STACKOVERFLOW +- /* Debugging check for stack overflow: is there less than 1KB free? */ +- { +- long sp; +- +- __asm__ __volatile__("andl %%esp,%0" : +- "=r" (sp) : "0" (THREAD_SIZE - 1)); +- if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) { +- printk("do_IRQ: stack overflow: %ld\n", +- sp - sizeof(struct thread_info)); +- dump_stack(); +- } +- } +-#endif ++static void call_on_stack(void *func, void *stack) ++{ ++ asm volatile("xchgl %%ebx,%%esp \n" ++ "call *%%edi \n" ++ "movl %%ebx,%%esp \n" ++ : "=b" (stack) ++ : "0" (stack), ++ "D"(func) ++ : "memory", "cc", "edx", "ecx", "eax"); ++} + +-#ifdef CONFIG_4KSTACKS ++static inline int ++execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) ++{ ++ union irq_ctx *curctx, *irqctx; ++ u32 *isp, arg1, arg2; + + curctx = (union irq_ctx *) current_thread_info(); + irqctx = hardirq_ctx[smp_processor_id()]; +@@ -111,52 +112,39 @@ unsigned int do_IRQ(struct pt_regs *regs + * handler) we can't do that and just have to keep using the + * current stack (which is the irq stack already after all) + */ +- if (curctx != irqctx) { +- int arg1, arg2, bx; +- +- /* build the stack frame on the IRQ stack */ +- isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); +- irqctx->tinfo.task = curctx->tinfo.task; +- irqctx->tinfo.previous_esp = current_stack_pointer; ++ if (unlikely(curctx == irqctx)) ++ return 0; + +- /* +- * Copy the softirq bits in preempt_count so that the +- * softirq checks work in the hardirq context. +- */ +- irqctx->tinfo.preempt_count = +- (irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK) | +- (curctx->tinfo.preempt_count & SOFTIRQ_MASK); +- +- asm volatile( +- " xchgl %%ebx,%%esp \n" +- " call *%%edi \n" +- " movl %%ebx,%%esp \n" +- : "=a" (arg1), "=d" (arg2), "=b" (bx) +- : "0" (irq), "1" (desc), "2" (isp), +- "D" (desc->handle_irq) +- : "memory", "cc", "ecx" +- ); +- } else +-#endif +- desc->handle_irq(irq, desc); ++ /* build the stack frame on the IRQ stack */ ++ isp = (u32 *) ((char*)irqctx + sizeof(*irqctx)); ++ irqctx->tinfo.task = curctx->tinfo.task; ++ irqctx->tinfo.previous_esp = current_stack_pointer; + +- /*irq_exit();*/ +- set_irq_regs(old_regs); ++ /* ++ * Copy the softirq bits in preempt_count so that the ++ * softirq checks work in the hardirq context. ++ */ ++ irqctx->tinfo.preempt_count = ++ (irqctx->tinfo.preempt_count & ~SOFTIRQ_MASK) | ++ (curctx->tinfo.preempt_count & SOFTIRQ_MASK); ++ ++ if (unlikely(overflow)) ++ call_on_stack(print_stack_overflow, isp); ++ ++ asm volatile("xchgl %%ebx,%%esp \n" ++ "call *%%edi \n" ++ "movl %%ebx,%%esp \n" ++ : "=a" (arg1), "=d" (arg2), "=b" (isp) ++ : "0" (irq), "1" (desc), "2" (isp), ++ "D" (desc->handle_irq) ++ : "memory", "cc", "ecx"); + return 1; + } + +-#ifdef CONFIG_4KSTACKS +- +-static char softirq_stack[NR_CPUS * THREAD_SIZE] +- __attribute__((__section__(".bss.page_aligned"))); +- +-static char hardirq_stack[NR_CPUS * THREAD_SIZE] +- __attribute__((__section__(".bss.page_aligned"))); +- + /* + * allocate per-cpu stacks for hardirq and for softirq processing + */ +-void irq_ctx_init(int cpu) ++void __cpuinit irq_ctx_init(int cpu) + { + union irq_ctx *irqctx; + +@@ -164,25 +152,25 @@ void irq_ctx_init(int cpu) + return; + + irqctx = (union irq_ctx*) &hardirq_stack[cpu*THREAD_SIZE]; +- irqctx->tinfo.task = NULL; +- irqctx->tinfo.exec_domain = NULL; +- irqctx->tinfo.cpu = cpu; +- irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; +- irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); ++ irqctx->tinfo.task = NULL; ++ irqctx->tinfo.exec_domain = NULL; ++ irqctx->tinfo.cpu = cpu; ++ irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; ++ irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); + + hardirq_ctx[cpu] = irqctx; + + irqctx = (union irq_ctx*) &softirq_stack[cpu*THREAD_SIZE]; +- irqctx->tinfo.task = NULL; +- irqctx->tinfo.exec_domain = NULL; +- irqctx->tinfo.cpu = cpu; +- irqctx->tinfo.preempt_count = 0; +- irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); ++ irqctx->tinfo.task = NULL; ++ irqctx->tinfo.exec_domain = NULL; ++ irqctx->tinfo.cpu = cpu; ++ irqctx->tinfo.preempt_count = 0; ++ irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); + + softirq_ctx[cpu] = irqctx; + +- printk("CPU %u irqstacks, hard=%p soft=%p\n", +- cpu,hardirq_ctx[cpu],softirq_ctx[cpu]); ++ printk(KERN_DEBUG "CPU %u irqstacks, hard=%p soft=%p\n", ++ cpu,hardirq_ctx[cpu],softirq_ctx[cpu]); + } + + void irq_ctx_exit(int cpu) +@@ -211,25 +199,56 @@ asmlinkage void do_softirq(void) + /* build the stack frame on the softirq stack */ + isp = (u32*) ((char*)irqctx + sizeof(*irqctx)); + +- asm volatile( +- " xchgl %%ebx,%%esp \n" +- " call __do_softirq \n" +- " movl %%ebx,%%esp \n" +- : "=b"(isp) +- : "0"(isp) +- : "memory", "cc", "edx", "ecx", "eax" +- ); ++ call_on_stack(__do_softirq, isp); + /* + * Shouldnt happen, we returned above if in_interrupt(): +- */ ++ */ + WARN_ON_ONCE(softirq_count()); + } + + local_irq_restore(flags); + } ++ ++#else ++static inline int ++execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) { return 0; } + #endif + + /* ++ * do_IRQ handles all normal device IRQ's (the special ++ * SMP cross-CPU interrupts have their own specific ++ * handlers). ++ */ ++unsigned int do_IRQ(struct pt_regs *regs) ++{ ++ struct pt_regs *old_regs; ++ /* high bit used in ret_from_ code */ ++ int overflow, irq = ~regs->orig_ax; ++ struct irq_desc *desc = irq_desc + irq; ++ ++ if (unlikely((unsigned)irq >= NR_IRQS)) { ++ printk(KERN_EMERG "%s: cannot handle IRQ %d\n", ++ __func__, irq); ++ BUG(); ++ } ++ ++ old_regs = set_irq_regs(regs); ++ /*irq_enter();*/ ++ ++ overflow = check_stack_overflow(); ++ ++ if (!execute_on_irq_stack(overflow, desc, irq)) { ++ if (unlikely(overflow)) ++ print_stack_overflow(); ++ desc->handle_irq(irq, desc); ++ } ++ ++ /*irq_exit();*/ ++ set_irq_regs(old_regs); ++ return 1; ++} ++ ++/* + * Interrupt statistics: + */ + +@@ -337,6 +356,42 @@ skip: + return 0; + } + ++/* ++ * /proc/stat helpers ++ */ ++u64 arch_irq_stat_cpu(unsigned int cpu) ++{ ++ u64 sum = nmi_count(cpu); ++ ++#ifdef CONFIG_X86_LOCAL_APIC ++ sum += per_cpu(irq_stat, cpu).apic_timer_irqs; ++#endif ++#ifdef CONFIG_SMP ++ sum += per_cpu(irq_stat, cpu).irq_resched_count; ++ sum += per_cpu(irq_stat, cpu).irq_call_count; ++#ifndef CONFIG_XEN ++ sum += per_cpu(irq_stat, cpu).irq_tlb_count; ++#endif ++#endif ++#ifdef CONFIG_X86_MCE ++ sum += per_cpu(irq_stat, cpu).irq_thermal_count; ++#endif ++#ifdef CONFIG_X86_LOCAL_APIC ++ sum += per_cpu(irq_stat, cpu).irq_spurious_count; ++#endif ++ return sum; ++} ++ ++u64 arch_irq_stat(void) ++{ ++ u64 sum = atomic_read(&irq_err_count); ++ ++#ifdef CONFIG_X86_IO_APIC ++ sum += atomic_read(&irq_mis_count); ++#endif ++ return sum; ++} ++ + #ifdef CONFIG_HOTPLUG_CPU + + void fixup_irqs(cpumask_t map) +--- head-2010-01-18.orig/arch/x86/kernel/irq_64-xen.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/irq_64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -163,6 +163,34 @@ skip: + } + + /* ++ * /proc/stat helpers ++ */ ++u64 arch_irq_stat_cpu(unsigned int cpu) ++{ ++ u64 sum = cpu_pda(cpu)->__nmi_count; ++ ++ sum += cpu_pda(cpu)->apic_timer_irqs; ++#ifdef CONFIG_SMP ++ sum += cpu_pda(cpu)->irq_resched_count; ++ sum += cpu_pda(cpu)->irq_call_count; ++#ifndef CONFIG_XEN ++ sum += cpu_pda(cpu)->irq_tlb_count; ++#endif ++#endif ++#ifdef CONFIG_X86_MCE ++ sum += cpu_pda(cpu)->irq_thermal_count; ++ sum += cpu_pda(cpu)->irq_threshold_count; ++#endif ++ sum += cpu_pda(cpu)->irq_spurious_count; ++ return sum; ++} ++ ++u64 arch_irq_stat(void) ++{ ++ return atomic_read(&irq_err_count); ++} ++ ++/* + * do_IRQ handles all normal device IRQ's (the special + * SMP cross-CPU interrupts have their own specific + * handlers). +--- head-2010-01-18.orig/arch/x86/kernel/ldt-xen.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/ldt-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -20,9 +20,9 @@ + #include + + #ifdef CONFIG_SMP +-static void flush_ldt(void *null) ++static void flush_ldt(void *current_mm) + { +- if (current->active_mm) ++ if (current->active_mm == current_mm) + load_LDT(¤t->active_mm->context); + } + #endif +@@ -62,8 +62,6 @@ static int alloc_ldt(mm_context_t *pc, i + + if (reload) { + #ifdef CONFIG_SMP +- cpumask_t mask; +- + preempt_disable(); + #endif + make_pages_readonly(newldt, +@@ -71,9 +69,9 @@ static int alloc_ldt(mm_context_t *pc, i + XENFEAT_writable_descriptor_tables); + load_LDT(pc); + #ifdef CONFIG_SMP +- mask = cpumask_of_cpu(smp_processor_id()); +- if (!cpus_equal(current->mm->cpu_vm_mask, mask)) +- smp_call_function(flush_ldt, NULL, 1, 1); ++ if (!cpus_equal(current->mm->cpu_vm_mask, ++ cpumask_of_cpu(smp_processor_id()))) ++ smp_call_function(flush_ldt, current->mm, 1); + preempt_enable(); + #endif + } +--- head-2010-01-18.orig/arch/x86/kernel/machine_kexec_32.c 2009-12-04 10:44:46.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/machine_kexec_32.c 2009-11-06 10:51:42.000000000 +0100 +@@ -130,6 +130,8 @@ void machine_kexec_setup_load_arg(xen_ke + xki->page_list[PA_PTE_0] = __ma(kexec_pte0); + xki->page_list[PA_PTE_1] = __ma(kexec_pte1); + ++ if (image->type == KEXEC_TYPE_DEFAULT) ++ xki->page_list[PA_SWAP_PAGE] = page_to_phys(image->swap_page); + } + + int __init machine_kexec_setup_resources(struct resource *hypervisor, +--- head-2010-01-18.orig/arch/x86/kernel/microcode-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/microcode-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -5,13 +5,14 @@ + * 2006 Shaohua Li + * + * This driver allows to upgrade microcode on Intel processors +- * belonging to IA-32 family - PentiumPro, Pentium II, ++ * belonging to IA-32 family - PentiumPro, Pentium II, + * Pentium III, Xeon, Pentium 4, etc. + * +- * Reference: Section 8.10 of Volume III, Intel Pentium 4 Manual, +- * Order Number 245472 or free download from: +- * +- * http://developer.intel.com/design/pentium4/manuals/245472.htm ++ * Reference: Section 8.11 of Volume 3a, IA-32 Intel? Architecture ++ * Software Developer's Manual ++ * Order Number 253668 or free download from: ++ * ++ * http://developer.intel.com/design/pentium4/manuals/253668.htm + * + * For more information, go to http://www.urbanmyth.org/microcode + * +@@ -26,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -86,6 +88,7 @@ static int do_microcode_update (const vo + + static int microcode_open (struct inode *unused1, struct file *unused2) + { ++ cycle_kernel_lock(); + return capable(CAP_SYS_RAWIO) ? 0 : -EPERM; + } + +@@ -162,7 +165,7 @@ static int request_microcode(void) + c->x86, c->x86_model, c->x86_mask); + error = request_firmware(&firmware, name, µcode_pdev->dev); + if (error) { +- pr_debug("microcode: ucode data file %s load failed\n", name); ++ pr_debug("microcode: data file %s load failed\n", name); + return error; + } + +@@ -183,6 +186,9 @@ static int __init microcode_init (void) + { + int error; + ++ printk(KERN_INFO ++ "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " \n"); ++ + error = microcode_dev_init(); + if (error) + return error; +@@ -195,8 +201,6 @@ static int __init microcode_init (void) + + request_microcode(); + +- printk(KERN_INFO +- "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " \n"); + return 0; + } + +--- head-2010-01-18.orig/arch/x86/kernel/mpparse-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/mpparse-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -25,6 +25,9 @@ + #include + #include + #include ++#include ++#include ++#include + + #include + #ifdef CONFIG_X86_32 +@@ -32,27 +35,10 @@ + #include + #endif + +-/* Have we found an MP table */ +-int smp_found_config; +- +-/* +- * Various Linux-internal data structures created from the +- * MP-table. +- */ +-#if defined (CONFIG_MCA) || defined (CONFIG_EISA) +-int mp_bus_id_to_type[MAX_MP_BUSSES]; +-#endif +- +-DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES); +-int mp_bus_id_to_pci_bus[MAX_MP_BUSSES] = {[0 ... MAX_MP_BUSSES - 1] = -1 }; +- +-static int mp_current_pci_id; +- +-int pic_mode; +- +-/* +- * Intel MP BIOS table parsing routines: +- */ ++static void *_bus_to_virt(unsigned long ma) ++{ ++ return is_ISA_range(ma, ma) ? isa_bus_to_virt(ma) : bus_to_virt(ma); ++} + + /* + * Checksum an MP configuration block. +@@ -68,19 +54,7 @@ static int __init mpf_checksum(unsigned + return sum & 0xFF; + } + +-#ifdef CONFIG_X86_NUMAQ +-/* +- * Have to match translation table entries to main table entries by counter +- * hence the mpc_record variable .... can't see a less disgusting way of +- * doing this .... +- */ +- +-static int mpc_record; +-static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] +- __cpuinitdata; +-#endif +- +-static void __cpuinit MP_processor_info(struct mpc_config_processor *m) ++static void __init MP_processor_info(struct mpc_config_processor *m) + { + #ifndef CONFIG_XEN + int apicid; +@@ -90,11 +64,12 @@ static void __cpuinit MP_processor_info( + disabled_cpus++; + return; + } +-#ifdef CONFIG_X86_NUMAQ +- apicid = mpc_apic_id(m, translation_table[mpc_record]); +-#else +- apicid = m->mpc_apicid; +-#endif ++ ++ if (x86_quirks->mpc_apic_id) ++ apicid = x86_quirks->mpc_apic_id(m); ++ else ++ apicid = m->mpc_apicid; ++ + if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { + bootup_cpu = " (Bootup-CPU)"; + boot_cpu_physical_apicid = m->mpc_apicid; +@@ -107,18 +82,17 @@ static void __cpuinit MP_processor_info( + #endif + } + ++#ifdef CONFIG_X86_IO_APIC + static void __init MP_bus_info(struct mpc_config_bus *m) + { + char str[7]; +- + memcpy(str, m->mpc_bustype, 6); + str[6] = 0; + +-#ifdef CONFIG_X86_NUMAQ +- mpc_oem_bus_info(m, str, translation_table[mpc_record]); +-#else +- Dprintk("Bus #%d is %s\n", m->mpc_busid, str); +-#endif ++ if (x86_quirks->mpc_oem_bus_info) ++ x86_quirks->mpc_oem_bus_info(m, str); ++ else ++ apic_printk(APIC_VERBOSE, "Bus #%d is %s\n", m->mpc_busid, str); + + #if MAX_MP_BUSSES < 256 + if (m->mpc_busid >= MAX_MP_BUSSES) { +@@ -135,12 +109,10 @@ static void __init MP_bus_info(struct mp + mp_bus_id_to_type[m->mpc_busid] = MP_BUS_ISA; + #endif + } else if (strncmp(str, BUSTYPE_PCI, sizeof(BUSTYPE_PCI) - 1) == 0) { +-#ifdef CONFIG_X86_NUMAQ +- mpc_oem_pci_bus(m, translation_table[mpc_record]); +-#endif ++ if (x86_quirks->mpc_oem_pci_bus) ++ x86_quirks->mpc_oem_pci_bus(m); ++ + clear_bit(m->mpc_busid, mp_bus_not_pci); +- mp_bus_id_to_pci_bus[m->mpc_busid] = mp_current_pci_id; +- mp_current_pci_id++; + #if defined(CONFIG_EISA) || defined (CONFIG_MCA) + mp_bus_id_to_type[m->mpc_busid] = MP_BUS_PCI; + } else if (strncmp(str, BUSTYPE_EISA, sizeof(BUSTYPE_EISA) - 1) == 0) { +@@ -151,6 +123,7 @@ static void __init MP_bus_info(struct mp + } else + printk(KERN_WARNING "Unknown bustype %s - ignoring\n", str); + } ++#endif + + #ifdef CONFIG_X86_IO_APIC + +@@ -180,117 +153,111 @@ static void __init MP_ioapic_info(struct + if (bad_ioapic(m->mpc_apicaddr)) + return; + +- mp_ioapics[nr_ioapics] = *m; ++ mp_ioapics[nr_ioapics].mp_apicaddr = m->mpc_apicaddr; ++ mp_ioapics[nr_ioapics].mp_apicid = m->mpc_apicid; ++ mp_ioapics[nr_ioapics].mp_type = m->mpc_type; ++ mp_ioapics[nr_ioapics].mp_apicver = m->mpc_apicver; ++ mp_ioapics[nr_ioapics].mp_flags = m->mpc_flags; + nr_ioapics++; + } + +-static void __init MP_intsrc_info(struct mpc_config_intsrc *m) ++static void print_MP_intsrc_info(struct mpc_config_intsrc *m) + { +- mp_irqs[mp_irq_entries] = *m; +- Dprintk("Int: type %d, pol %d, trig %d, bus %d," ++ apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," + " IRQ %02x, APIC ID %x, APIC INT %02x\n", + m->mpc_irqtype, m->mpc_irqflag & 3, + (m->mpc_irqflag >> 2) & 3, m->mpc_srcbus, + m->mpc_srcbusirq, m->mpc_dstapic, m->mpc_dstirq); +- if (++mp_irq_entries == MAX_IRQ_SOURCES) +- panic("Max # of irq sources exceeded!!\n"); + } + +-#endif +- +-static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) ++static void __init print_mp_irq_info(struct mp_config_intsrc *mp_irq) + { +- Dprintk("Lint: type %d, pol %d, trig %d, bus %d," +- " IRQ %02x, APIC ID %x, APIC LINT %02x\n", +- m->mpc_irqtype, m->mpc_irqflag & 3, +- (m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid, +- m->mpc_srcbusirq, m->mpc_destapic, m->mpc_destapiclint); ++ apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x," ++ " IRQ %02x, APIC ID %x, APIC INT %02x\n", ++ mp_irq->mp_irqtype, mp_irq->mp_irqflag & 3, ++ (mp_irq->mp_irqflag >> 2) & 3, mp_irq->mp_srcbus, ++ mp_irq->mp_srcbusirq, mp_irq->mp_dstapic, mp_irq->mp_dstirq); + } + +-#ifdef CONFIG_X86_NUMAQ +-static void __init MP_translation_info(struct mpc_config_translation *m) ++static void __init assign_to_mp_irq(struct mpc_config_intsrc *m, ++ struct mp_config_intsrc *mp_irq) + { +- printk(KERN_INFO +- "Translation: record %d, type %d, quad %d, global %d, local %d\n", +- mpc_record, m->trans_type, m->trans_quad, m->trans_global, +- m->trans_local); ++ mp_irq->mp_dstapic = m->mpc_dstapic; ++ mp_irq->mp_type = m->mpc_type; ++ mp_irq->mp_irqtype = m->mpc_irqtype; ++ mp_irq->mp_irqflag = m->mpc_irqflag; ++ mp_irq->mp_srcbus = m->mpc_srcbus; ++ mp_irq->mp_srcbusirq = m->mpc_srcbusirq; ++ mp_irq->mp_dstirq = m->mpc_dstirq; ++} + +- if (mpc_record >= MAX_MPC_ENTRY) +- printk(KERN_ERR "MAX_MPC_ENTRY exceeded!\n"); +- else +- translation_table[mpc_record] = m; /* stash this for later */ +- if (m->trans_quad < MAX_NUMNODES && !node_online(m->trans_quad)) +- node_set_online(m->trans_quad); ++static void __init assign_to_mpc_intsrc(struct mp_config_intsrc *mp_irq, ++ struct mpc_config_intsrc *m) ++{ ++ m->mpc_dstapic = mp_irq->mp_dstapic; ++ m->mpc_type = mp_irq->mp_type; ++ m->mpc_irqtype = mp_irq->mp_irqtype; ++ m->mpc_irqflag = mp_irq->mp_irqflag; ++ m->mpc_srcbus = mp_irq->mp_srcbus; ++ m->mpc_srcbusirq = mp_irq->mp_srcbusirq; ++ m->mpc_dstirq = mp_irq->mp_dstirq; + } + +-/* +- * Read/parse the MPC oem tables +- */ ++static int __init mp_irq_mpc_intsrc_cmp(struct mp_config_intsrc *mp_irq, ++ struct mpc_config_intsrc *m) ++{ ++ if (mp_irq->mp_dstapic != m->mpc_dstapic) ++ return 1; ++ if (mp_irq->mp_type != m->mpc_type) ++ return 2; ++ if (mp_irq->mp_irqtype != m->mpc_irqtype) ++ return 3; ++ if (mp_irq->mp_irqflag != m->mpc_irqflag) ++ return 4; ++ if (mp_irq->mp_srcbus != m->mpc_srcbus) ++ return 5; ++ if (mp_irq->mp_srcbusirq != m->mpc_srcbusirq) ++ return 6; ++ if (mp_irq->mp_dstirq != m->mpc_dstirq) ++ return 7; + +-static void __init smp_read_mpc_oem(struct mp_config_oemtable *oemtable, +- unsigned short oemsize) ++ return 0; ++} ++ ++static void __init MP_intsrc_info(struct mpc_config_intsrc *m) + { +- int count = sizeof(*oemtable); /* the header size */ +- unsigned char *oemptr = ((unsigned char *)oemtable) + count; ++ int i; + +- mpc_record = 0; +- printk(KERN_INFO "Found an OEM MPC table at %8p - parsing it ... \n", +- oemtable); +- if (memcmp(oemtable->oem_signature, MPC_OEM_SIGNATURE, 4)) { +- printk(KERN_WARNING +- "SMP mpc oemtable: bad signature [%c%c%c%c]!\n", +- oemtable->oem_signature[0], oemtable->oem_signature[1], +- oemtable->oem_signature[2], oemtable->oem_signature[3]); +- return; +- } +- if (mpf_checksum((unsigned char *)oemtable, oemtable->oem_length)) { +- printk(KERN_WARNING "SMP oem mptable: checksum error!\n"); +- return; +- } +- while (count < oemtable->oem_length) { +- switch (*oemptr) { +- case MP_TRANSLATION: +- { +- struct mpc_config_translation *m = +- (struct mpc_config_translation *)oemptr; +- MP_translation_info(m); +- oemptr += sizeof(*m); +- count += sizeof(*m); +- ++mpc_record; +- break; +- } +- default: +- { +- printk(KERN_WARNING +- "Unrecognised OEM table entry type! - %d\n", +- (int)*oemptr); +- return; +- } +- } ++ print_MP_intsrc_info(m); ++ ++ for (i = 0; i < mp_irq_entries; i++) { ++ if (!mp_irq_mpc_intsrc_cmp(&mp_irqs[i], m)) ++ return; + } ++ ++ assign_to_mp_irq(m, &mp_irqs[mp_irq_entries]); ++ if (++mp_irq_entries == MAX_IRQ_SOURCES) ++ panic("Max # of irq sources exceeded!!\n"); + } + +-static inline void mps_oem_check(struct mp_config_table *mpc, char *oem, +- char *productid) ++#endif ++ ++static void __init MP_lintsrc_info(struct mpc_config_lintsrc *m) + { +- if (strncmp(oem, "IBM NUMA", 8)) +- printk("Warning! May not be a NUMA-Q system!\n"); +- if (mpc->mpc_oemptr) +- smp_read_mpc_oem((struct mp_config_oemtable *)mpc->mpc_oemptr, +- mpc->mpc_oemsize); ++ apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x," ++ " IRQ %02x, APIC ID %x, APIC LINT %02x\n", ++ m->mpc_irqtype, m->mpc_irqflag & 3, ++ (m->mpc_irqflag >> 2) & 3, m->mpc_srcbusid, ++ m->mpc_srcbusirq, m->mpc_destapic, m->mpc_destapiclint); + } +-#endif /* CONFIG_X86_NUMAQ */ + + /* + * Read/parse the MPC + */ + +-static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ++static int __init smp_check_mpc(struct mp_config_table *mpc, char *oem, ++ char *str) + { +- char str[16]; +- char oem[10]; +- int count = sizeof(*mpc); +- unsigned char *mpt = ((unsigned char *)mpc) + count; + + if (memcmp(mpc->mpc_signature, MPC_SIGNATURE, 4)) { + printk(KERN_ERR "MPTABLE: bad signature [%c%c%c%c]!\n", +@@ -313,19 +280,41 @@ static int __init smp_read_mpc(struct mp + } + memcpy(oem, mpc->mpc_oem, 8); + oem[8] = 0; +- printk(KERN_INFO "MPTABLE: OEM ID: %s ", oem); ++ printk(KERN_INFO "MPTABLE: OEM ID: %s\n", oem); + + memcpy(str, mpc->mpc_productid, 12); + str[12] = 0; +- printk("Product ID: %s ", str); + +-#ifdef CONFIG_X86_32 +- mps_oem_check(mpc, oem, str); +-#endif +- printk(KERN_INFO "MPTABLE: Product ID: %s ", str); ++ printk(KERN_INFO "MPTABLE: Product ID: %s\n", str); + + printk(KERN_INFO "MPTABLE: APIC at: 0x%X\n", mpc->mpc_lapic); + ++ return 1; ++} ++ ++static int __init smp_read_mpc(struct mp_config_table *mpc, unsigned early) ++{ ++ char str[16]; ++ char oem[10]; ++ ++ int count = sizeof(*mpc); ++ unsigned char *mpt = ((unsigned char *)mpc) + count; ++ ++ if (!smp_check_mpc(mpc, oem, str)) ++ return 0; ++ ++#ifdef CONFIG_X86_32 ++ /* ++ * need to make sure summit and es7000's mps_oem_check is safe to be ++ * called early via genericarch 's mps_oem_check ++ */ ++ if (early) { ++#ifdef CONFIG_X86_NUMAQ ++ numaq_mps_oem_check(mpc, oem, str); ++#endif ++ } else ++ mps_oem_check(mpc, oem, str); ++#endif + /* save the local APIC address, it might be non-default */ + if (!acpi_lapic) + mp_lapic_addr = mpc->mpc_lapic; +@@ -333,12 +322,17 @@ static int __init smp_read_mpc(struct mp + if (early) + return 1; + ++ if (mpc->mpc_oemptr && x86_quirks->smp_read_mpc_oem) { ++ struct mp_config_oemtable *oem_table = (struct mp_config_oemtable *)(unsigned long)mpc->mpc_oemptr; ++ x86_quirks->smp_read_mpc_oem(oem_table, mpc->mpc_oemsize); ++ } ++ + /* + * Now process the configuration blocks. + */ +-#ifdef CONFIG_X86_NUMAQ +- mpc_record = 0; +-#endif ++ if (x86_quirks->mpc_record) ++ *x86_quirks->mpc_record = 0; ++ + while (count < mpc->mpc_length) { + switch (*mpt) { + case MP_PROCESSOR: +@@ -356,7 +350,9 @@ static int __init smp_read_mpc(struct mp + { + struct mpc_config_bus *m = + (struct mpc_config_bus *)mpt; ++#ifdef CONFIG_X86_IO_APIC + MP_bus_info(m); ++#endif + mpt += sizeof(*m); + count += sizeof(*m); + break; +@@ -402,10 +398,14 @@ static int __init smp_read_mpc(struct mp + count = mpc->mpc_length; + break; + } +-#ifdef CONFIG_X86_NUMAQ +- ++mpc_record; +-#endif ++ if (x86_quirks->mpc_record) ++ (*x86_quirks->mpc_record)++; + } ++ ++#ifdef CONFIG_X86_GENERICARCH ++ generic_bigsmp_probe(); ++#endif ++ + setup_apic_routing(); + if (!num_processors) + printk(KERN_ERR "MPTABLE: no processors registered!\n"); +@@ -431,7 +431,7 @@ static void __init construct_default_ioi + intsrc.mpc_type = MP_INTSRC; + intsrc.mpc_irqflag = 0; /* conforming */ + intsrc.mpc_srcbus = 0; +- intsrc.mpc_dstapic = mp_ioapics[0].mpc_apicid; ++ intsrc.mpc_dstapic = mp_ioapics[0].mp_apicid; + + intsrc.mpc_irqtype = mp_INT; + +@@ -492,40 +492,11 @@ static void __init construct_default_ioi + MP_intsrc_info(&intsrc); + } + +-#endif + +-static inline void __init construct_default_ISA_mptable(int mpc_default_type) ++static void __init construct_ioapic_table(int mpc_default_type) + { +- struct mpc_config_processor processor; +- struct mpc_config_bus bus; +-#ifdef CONFIG_X86_IO_APIC + struct mpc_config_ioapic ioapic; +-#endif +- struct mpc_config_lintsrc lintsrc; +- int linttypes[2] = { mp_ExtINT, mp_NMI }; +- int i; +- +- /* +- * local APIC has default address +- */ +- mp_lapic_addr = APIC_DEFAULT_PHYS_BASE; +- +- /* +- * 2 CPUs, numbered 0 & 1. +- */ +- processor.mpc_type = MP_PROCESSOR; +- /* Either an integrated APIC or a discrete 82489DX. */ +- processor.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01; +- processor.mpc_cpuflag = CPU_ENABLED; +- processor.mpc_cpufeature = (boot_cpu_data.x86 << 8) | +- (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_mask; +- processor.mpc_featureflag = boot_cpu_data.x86_capability[0]; +- processor.mpc_reserved[0] = 0; +- processor.mpc_reserved[1] = 0; +- for (i = 0; i < 2; i++) { +- processor.mpc_apicid = i; +- MP_processor_info(&processor); +- } ++ struct mpc_config_bus bus; + + bus.mpc_type = MP_BUS; + bus.mpc_busid = 0; +@@ -554,7 +525,6 @@ static inline void __init construct_defa + MP_bus_info(&bus); + } + +-#ifdef CONFIG_X86_IO_APIC + ioapic.mpc_type = MP_IOAPIC; + ioapic.mpc_apicid = 2; + ioapic.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01; +@@ -566,7 +536,42 @@ static inline void __init construct_defa + * We set up most of the low 16 IO-APIC pins according to MPS rules. + */ + construct_default_ioirq_mptable(mpc_default_type); ++} ++#else ++static inline void __init construct_ioapic_table(int mpc_default_type) { } + #endif ++ ++static inline void __init construct_default_ISA_mptable(int mpc_default_type) ++{ ++ struct mpc_config_processor processor; ++ struct mpc_config_lintsrc lintsrc; ++ int linttypes[2] = { mp_ExtINT, mp_NMI }; ++ int i; ++ ++ /* ++ * local APIC has default address ++ */ ++ mp_lapic_addr = APIC_DEFAULT_PHYS_BASE; ++ ++ /* ++ * 2 CPUs, numbered 0 & 1. ++ */ ++ processor.mpc_type = MP_PROCESSOR; ++ /* Either an integrated APIC or a discrete 82489DX. */ ++ processor.mpc_apicver = mpc_default_type > 4 ? 0x10 : 0x01; ++ processor.mpc_cpuflag = CPU_ENABLED; ++ processor.mpc_cpufeature = (boot_cpu_data.x86 << 8) | ++ (boot_cpu_data.x86_model << 4) | boot_cpu_data.x86_mask; ++ processor.mpc_featureflag = boot_cpu_data.x86_capability[0]; ++ processor.mpc_reserved[0] = 0; ++ processor.mpc_reserved[1] = 0; ++ for (i = 0; i < 2; i++) { ++ processor.mpc_apicid = i; ++ MP_processor_info(&processor); ++ } ++ ++ construct_ioapic_table(mpc_default_type); ++ + lintsrc.mpc_type = MP_LINTSRC; + lintsrc.mpc_irqflag = 0; /* conforming */ + lintsrc.mpc_srcbusid = 0; +@@ -584,10 +589,14 @@ static struct intel_mp_floating *mpf_fou + /* + * Scan the memory blocks for an SMP configuration block. + */ +-static void __init __get_smp_config(unsigned early) ++static void __init __get_smp_config(unsigned int early) + { + struct intel_mp_floating *mpf = mpf_found; + ++ if (x86_quirks->mach_get_smp_config) { ++ if (x86_quirks->mach_get_smp_config(early)) ++ return; ++ } + if (acpi_lapic && early) + return; + /* +@@ -604,7 +613,7 @@ static void __init __get_smp_config(unsi + + printk(KERN_INFO "Intel MultiProcessor Specification v1.%d\n", + mpf->mpf_specification); +-#ifdef CONFIG_X86_32 ++#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86_32) && !defined(CONFIG_XEN) + if (mpf->mpf_feature2 & (1 << 7)) { + printk(KERN_INFO " IMCR and PIC compatibility mode.\n"); + pic_mode = 1; +@@ -635,8 +644,10 @@ static void __init __get_smp_config(unsi + * Read the physical hardware table. Anything here will + * override the defaults. + */ +- if (!smp_read_mpc(isa_bus_to_virt(mpf->mpf_physptr), early)) { ++ if (!smp_read_mpc(_bus_to_virt(mpf->mpf_physptr), early)) { ++#ifdef CONFIG_X86_LOCAL_APIC + smp_found_config = 0; ++#endif + printk(KERN_ERR + "BIOS bug, MP table errors detected!...\n"); + printk(KERN_ERR "... disabling SMP support. " +@@ -690,10 +701,11 @@ void __init get_smp_config(void) + static int __init smp_scan_config(unsigned long base, unsigned long length, + unsigned reserve) + { +- unsigned int *bp = isa_bus_to_virt(base); ++ unsigned int *bp = _bus_to_virt(base); + struct intel_mp_floating *mpf; + +- Dprintk("Scan SMP from %p for %ld bytes.\n", bp, length); ++ apic_printk(APIC_VERBOSE, "Scan SMP from %p for %ld bytes.\n", ++ bp, length); + BUILD_BUG_ON(sizeof(*mpf) != 16); + + while (length > 0) { +@@ -703,16 +715,22 @@ static int __init smp_scan_config(unsign + !mpf_checksum((unsigned char *)bp, 16) && + ((mpf->mpf_specification == 1) + || (mpf->mpf_specification == 4))) { +- ++#ifdef CONFIG_X86_LOCAL_APIC + smp_found_config = 1; ++#endif + mpf_found = mpf; +-#ifdef CONFIG_X86_32 ++ + #ifndef CONFIG_XEN + printk(KERN_INFO "found SMP MP-table at [%p] %08lx\n", + mpf, virt_to_phys(mpf)); +- reserve_bootmem(virt_to_phys(mpf), PAGE_SIZE, ++ ++ if (!reserve) ++ return 1; ++ reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE, + BOOTMEM_DEFAULT); + if (mpf->mpf_physptr) { ++ unsigned long size = PAGE_SIZE; ++#ifdef CONFIG_X86_32 + /* + * We cannot access to MPC table to compute + * table size yet, as only few megabytes from +@@ -722,27 +740,18 @@ static int __init smp_scan_config(unsign + * PAGE_SIZE from mpg->mpf_physptr yields BUG() + * in reserve_bootmem. + */ +- unsigned long size = PAGE_SIZE; + unsigned long end = max_low_pfn * PAGE_SIZE; + if (mpf->mpf_physptr + size > end) + size = end - mpf->mpf_physptr; +- reserve_bootmem(mpf->mpf_physptr, size, ++#endif ++ reserve_bootmem_generic(mpf->mpf_physptr, size, + BOOTMEM_DEFAULT); + } + #else + printk(KERN_INFO "found SMP MP-table at [%p] %08lx\n", +- mpf, ((void *)bp - isa_bus_to_virt(base)) + base); +-#endif +-#elif !defined(CONFIG_XEN) +- if (!reserve) +- return 1; +- +- reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE); +- if (mpf->mpf_physptr) +- reserve_bootmem_generic(mpf->mpf_physptr, +- PAGE_SIZE); ++ mpf, ((void *)bp - _bus_to_virt(base)) + base); + #endif +- return 1; ++ return 1; + } + bp += 4; + length -= 16; +@@ -750,12 +759,16 @@ static int __init smp_scan_config(unsign + return 0; + } + +-static void __init __find_smp_config(unsigned reserve) ++static void __init __find_smp_config(unsigned int reserve) + { + #ifndef CONFIG_XEN + unsigned int address; + #endif + ++ if (x86_quirks->mach_find_smp_config) { ++ if (x86_quirks->mach_find_smp_config(reserve)) ++ return; ++ } + /* + * FIXME: Linux assumes you have 640K of base ram.. + * this continues the error... +@@ -802,300 +815,297 @@ void __init find_smp_config(void) + __find_smp_config(1); + } + +-/* -------------------------------------------------------------------------- +- ACPI-based MP Configuration +- -------------------------------------------------------------------------- */ +- +-/* +- * Keep this outside and initialized to 0, for !CONFIG_ACPI builds: +- */ +-int es7000_plat; +- +-#ifdef CONFIG_ACPI ++#ifdef CONFIG_X86_IO_APIC ++static u8 __initdata irq_used[MAX_IRQ_SOURCES]; + +-#ifdef CONFIG_X86_IO_APIC ++static int __init get_MP_intsrc_index(struct mpc_config_intsrc *m) ++{ ++ int i; + +-#define MP_ISA_BUS 0 ++ if (m->mpc_irqtype != mp_INT) ++ return 0; + +-extern struct mp_ioapic_routing mp_ioapic_routing[MAX_IO_APICS]; ++ if (m->mpc_irqflag != 0x0f) ++ return 0; + +-static int mp_find_ioapic(int gsi) +-{ +- int i = 0; ++ /* not legacy */ + +- /* Find the IOAPIC that manages this GSI. */ +- for (i = 0; i < nr_ioapics; i++) { +- if ((gsi >= mp_ioapic_routing[i].gsi_base) +- && (gsi <= mp_ioapic_routing[i].gsi_end)) +- return i; ++ for (i = 0; i < mp_irq_entries; i++) { ++ if (mp_irqs[i].mp_irqtype != mp_INT) ++ continue; ++ ++ if (mp_irqs[i].mp_irqflag != 0x0f) ++ continue; ++ ++ if (mp_irqs[i].mp_srcbus != m->mpc_srcbus) ++ continue; ++ if (mp_irqs[i].mp_srcbusirq != m->mpc_srcbusirq) ++ continue; ++ if (irq_used[i]) { ++ /* already claimed */ ++ return -2; ++ } ++ irq_used[i] = 1; ++ return i; + } + +- printk(KERN_ERR "ERROR: Unable to locate IOAPIC for GSI %d\n", gsi); ++ /* not found */ + return -1; + } + +-static u8 __init uniq_ioapic_id(u8 id) +-{ +-#ifdef CONFIG_X86_32 +- if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && +- !APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) +- return io_apic_get_unique_id(nr_ioapics, id); +- else +- return id; +-#else +- int i; +- DECLARE_BITMAP(used, 256); +- bitmap_zero(used, 256); +- for (i = 0; i < nr_ioapics; i++) { +- struct mpc_config_ioapic *ia = &mp_ioapics[i]; +- __set_bit(ia->mpc_apicid, used); +- } +- if (!test_bit(id, used)) +- return id; +- return find_first_zero_bit(used, 256); ++#define SPARE_SLOT_NUM 20 ++ ++static struct mpc_config_intsrc __initdata *m_spare[SPARE_SLOT_NUM]; + #endif +-} + +-void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) ++static int __init replace_intsrc_all(struct mp_config_table *mpc, ++ unsigned long mpc_new_phys, ++ unsigned long mpc_new_length) + { +- int idx = 0; +- +- if (bad_ioapic(address)) +- return; ++#ifdef CONFIG_X86_IO_APIC ++ int i; ++ int nr_m_spare = 0; ++#endif + +- idx = nr_ioapics; ++ int count = sizeof(*mpc); ++ unsigned char *mpt = ((unsigned char *)mpc) + count; + +- mp_ioapics[idx].mpc_type = MP_IOAPIC; +- mp_ioapics[idx].mpc_flags = MPC_APIC_USABLE; +- mp_ioapics[idx].mpc_apicaddr = address; ++ printk(KERN_INFO "mpc_length %x\n", mpc->mpc_length); ++ while (count < mpc->mpc_length) { ++ switch (*mpt) { ++ case MP_PROCESSOR: ++ { ++ struct mpc_config_processor *m = ++ (struct mpc_config_processor *)mpt; ++ mpt += sizeof(*m); ++ count += sizeof(*m); ++ break; ++ } ++ case MP_BUS: ++ { ++ struct mpc_config_bus *m = ++ (struct mpc_config_bus *)mpt; ++ mpt += sizeof(*m); ++ count += sizeof(*m); ++ break; ++ } ++ case MP_IOAPIC: ++ { ++ mpt += sizeof(struct mpc_config_ioapic); ++ count += sizeof(struct mpc_config_ioapic); ++ break; ++ } ++ case MP_INTSRC: ++ { ++#ifdef CONFIG_X86_IO_APIC ++ struct mpc_config_intsrc *m = ++ (struct mpc_config_intsrc *)mpt; + +-#ifndef CONFIG_XEN +- set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); ++ apic_printk(APIC_VERBOSE, "OLD "); ++ print_MP_intsrc_info(m); ++ i = get_MP_intsrc_index(m); ++ if (i > 0) { ++ assign_to_mpc_intsrc(&mp_irqs[i], m); ++ apic_printk(APIC_VERBOSE, "NEW "); ++ print_mp_irq_info(&mp_irqs[i]); ++ } else if (!i) { ++ /* legacy, do nothing */ ++ } else if (nr_m_spare < SPARE_SLOT_NUM) { ++ /* ++ * not found (-1), or duplicated (-2) ++ * are invalid entries, ++ * we need to use the slot later ++ */ ++ m_spare[nr_m_spare] = m; ++ nr_m_spare++; ++ } + #endif +- mp_ioapics[idx].mpc_apicid = uniq_ioapic_id(id); +-#ifdef CONFIG_X86_32 +- mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); +-#else +- mp_ioapics[idx].mpc_apicver = 0; ++ mpt += sizeof(struct mpc_config_intsrc); ++ count += sizeof(struct mpc_config_intsrc); ++ break; ++ } ++ case MP_LINTSRC: ++ { ++ struct mpc_config_lintsrc *m = ++ (struct mpc_config_lintsrc *)mpt; ++ mpt += sizeof(*m); ++ count += sizeof(*m); ++ break; ++ } ++ default: ++ /* wrong mptable */ ++ printk(KERN_ERR "Your mptable is wrong, contact your HW vendor!\n"); ++ printk(KERN_ERR "type %x\n", *mpt); ++ print_hex_dump(KERN_ERR, " ", DUMP_PREFIX_ADDRESS, 16, ++ 1, mpc, mpc->mpc_length, 1); ++ goto out; ++ } ++ } ++ ++#ifdef CONFIG_X86_IO_APIC ++ for (i = 0; i < mp_irq_entries; i++) { ++ if (irq_used[i]) ++ continue; ++ ++ if (mp_irqs[i].mp_irqtype != mp_INT) ++ continue; ++ ++ if (mp_irqs[i].mp_irqflag != 0x0f) ++ continue; ++ ++ if (nr_m_spare > 0) { ++ apic_printk(APIC_VERBOSE, "*NEW* found\n"); ++ nr_m_spare--; ++ assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]); ++ m_spare[nr_m_spare] = NULL; ++ } else { ++ struct mpc_config_intsrc *m = ++ (struct mpc_config_intsrc *)mpt; ++ count += sizeof(struct mpc_config_intsrc); ++ if (!mpc_new_phys) { ++ printk(KERN_INFO "No spare slots, try to append...take your risk, new mpc_length %x\n", count); ++ } else { ++ if (count <= mpc_new_length) ++ printk(KERN_INFO "No spare slots, try to append..., new mpc_length %x\n", count); ++ else { ++ printk(KERN_ERR "mpc_new_length %lx is too small\n", mpc_new_length); ++ goto out; ++ } ++ } ++ assign_to_mpc_intsrc(&mp_irqs[i], m); ++ mpc->mpc_length = count; ++ mpt += sizeof(struct mpc_config_intsrc); ++ } ++ print_mp_irq_info(&mp_irqs[i]); ++ } + #endif +- /* +- * Build basic GSI lookup table to facilitate gsi->io_apic lookups +- * and to prevent reprogramming of IOAPIC pins (PCI GSIs). +- */ +- mp_ioapic_routing[idx].apic_id = mp_ioapics[idx].mpc_apicid; +- mp_ioapic_routing[idx].gsi_base = gsi_base; +- mp_ioapic_routing[idx].gsi_end = gsi_base + +- io_apic_get_redir_entries(idx); +- +- printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " +- "GSI %d-%d\n", idx, mp_ioapics[idx].mpc_apicid, +- mp_ioapics[idx].mpc_apicver, mp_ioapics[idx].mpc_apicaddr, +- mp_ioapic_routing[idx].gsi_base, mp_ioapic_routing[idx].gsi_end); ++out: ++ /* update checksum */ ++ mpc->mpc_checksum = 0; ++ mpc->mpc_checksum -= mpf_checksum((unsigned char *)mpc, ++ mpc->mpc_length); + +- nr_ioapics++; ++ return 0; + } + +-void __init mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger, u32 gsi) +-{ +- struct mpc_config_intsrc intsrc; +- int ioapic = -1; +- int pin = -1; +- +- /* +- * Convert 'gsi' to 'ioapic.pin'. +- */ +- ioapic = mp_find_ioapic(gsi); +- if (ioapic < 0) +- return; +- pin = gsi - mp_ioapic_routing[ioapic].gsi_base; ++static int __initdata enable_update_mptable; + +- /* +- * TBD: This check is for faulty timer entries, where the override +- * erroneously sets the trigger to level, resulting in a HUGE +- * increase of timer interrupts! +- */ +- if ((bus_irq == 0) && (trigger == 3)) +- trigger = 1; ++static int __init update_mptable_setup(char *str) ++{ ++ enable_update_mptable = 1; ++ return 0; ++} ++early_param("update_mptable", update_mptable_setup); + +- intsrc.mpc_type = MP_INTSRC; +- intsrc.mpc_irqtype = mp_INT; +- intsrc.mpc_irqflag = (trigger << 2) | polarity; +- intsrc.mpc_srcbus = MP_ISA_BUS; +- intsrc.mpc_srcbusirq = bus_irq; /* IRQ */ +- intsrc.mpc_dstapic = mp_ioapics[ioapic].mpc_apicid; /* APIC ID */ +- intsrc.mpc_dstirq = pin; /* INTIN# */ ++static unsigned long __initdata mpc_new_phys; ++static unsigned long mpc_new_length __initdata = 4096; + +- MP_intsrc_info(&intsrc); ++/* alloc_mptable or alloc_mptable=4k */ ++static int __initdata alloc_mptable; ++static int __init parse_alloc_mptable_opt(char *p) ++{ ++ enable_update_mptable = 1; ++ alloc_mptable = 1; ++ if (!p) ++ return 0; ++ mpc_new_length = memparse(p, &p); ++ return 0; + } ++early_param("alloc_mptable", parse_alloc_mptable_opt); + +-void __init mp_config_acpi_legacy_irqs(void) ++void __init early_reserve_e820_mpc_new(void) + { +- struct mpc_config_intsrc intsrc; +- int i = 0; +- int ioapic = -1; +- +-#if defined (CONFIG_MCA) || defined (CONFIG_EISA) +- /* +- * Fabricate the legacy ISA bus (bus #31). +- */ +- mp_bus_id_to_type[MP_ISA_BUS] = MP_BUS_ISA; ++ if (enable_update_mptable && alloc_mptable) { ++ u64 startt = 0; ++#ifdef CONFIG_X86_TRAMPOLINE ++ startt = TRAMPOLINE_BASE; + #endif +- set_bit(MP_ISA_BUS, mp_bus_not_pci); +- Dprintk("Bus #%d is ISA\n", MP_ISA_BUS); +- +- /* +- * Older generations of ES7000 have no legacy identity mappings +- */ +- if (es7000_plat == 1) +- return; +- +- /* +- * Locate the IOAPIC that manages the ISA IRQs (0-15). +- */ +- ioapic = mp_find_ioapic(0); +- if (ioapic < 0) +- return; +- +- intsrc.mpc_type = MP_INTSRC; +- intsrc.mpc_irqflag = 0; /* Conforming */ +- intsrc.mpc_srcbus = MP_ISA_BUS; +-#ifdef CONFIG_X86_IO_APIC +- intsrc.mpc_dstapic = mp_ioapics[ioapic].mpc_apicid; +-#endif +- /* +- * Use the default configuration for the IRQs 0-15. Unless +- * overridden by (MADT) interrupt source override entries. +- */ +- for (i = 0; i < 16; i++) { +- int idx; +- +- for (idx = 0; idx < mp_irq_entries; idx++) { +- struct mpc_config_intsrc *irq = mp_irqs + idx; +- +- /* Do we already have a mapping for this ISA IRQ? */ +- if (irq->mpc_srcbus == MP_ISA_BUS +- && irq->mpc_srcbusirq == i) +- break; +- +- /* Do we already have a mapping for this IOAPIC pin */ +- if ((irq->mpc_dstapic == intsrc.mpc_dstapic) && +- (irq->mpc_dstirq == i)) +- break; +- } +- +- if (idx != mp_irq_entries) { +- printk(KERN_DEBUG "ACPI: IRQ%d used by override.\n", i); +- continue; /* IRQ already used */ +- } +- +- intsrc.mpc_irqtype = mp_INT; +- intsrc.mpc_srcbusirq = i; /* Identity mapped */ +- intsrc.mpc_dstirq = i; +- +- MP_intsrc_info(&intsrc); ++ mpc_new_phys = early_reserve_e820(startt, mpc_new_length, 4); + } + } + +-int mp_register_gsi(u32 gsi, int triggering, int polarity) ++static int __init update_mp_table(void) + { +- int ioapic; +- int ioapic_pin; +-#if defined(CONFIG_X86_32) && !defined(CONFIG_XEN) +-#define MAX_GSI_NUM 4096 +-#define IRQ_COMPRESSION_START 64 ++ char str[16]; ++ char oem[10]; ++ struct intel_mp_floating *mpf; ++ struct mp_config_table *mpc; ++ struct mp_config_table *mpc_new; ++ ++ if (!enable_update_mptable) ++ return 0; ++ ++ mpf = mpf_found; ++ if (!mpf) ++ return 0; + +- static int pci_irq = IRQ_COMPRESSION_START; + /* +- * Mapping between Global System Interrupts, which +- * represent all possible interrupts, and IRQs +- * assigned to actual devices. ++ * Now see if we need to go further. + */ +- static int gsi_to_irq[MAX_GSI_NUM]; +-#else ++ if (mpf->mpf_feature1 != 0) ++ return 0; + +- if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC) +- return gsi; +-#endif ++ if (!mpf->mpf_physptr) ++ return 0; + +- /* Don't set up the ACPI SCI because it's already set up */ +- if (acpi_gbl_FADT.sci_interrupt == gsi) +- return gsi; ++ mpc = _bus_to_virt(mpf->mpf_physptr); + +- ioapic = mp_find_ioapic(gsi); +- if (ioapic < 0) { +- printk(KERN_WARNING "No IOAPIC for GSI %u\n", gsi); +- return gsi; +- } ++ if (!smp_check_mpc(mpc, oem, str)) ++ return 0; + +- ioapic_pin = gsi - mp_ioapic_routing[ioapic].gsi_base; ++ printk(KERN_INFO "mpf: %lx\n", (long)arbitrary_virt_to_machine(mpf)); ++ printk(KERN_INFO "mpf_physptr: %x\n", mpf->mpf_physptr); + +-#ifndef CONFIG_X86_32 +- if (ioapic_renumber_irq) +- gsi = ioapic_renumber_irq(ioapic, gsi); +-#endif ++ if (mpc_new_phys && mpc->mpc_length > mpc_new_length) { ++ mpc_new_phys = 0; ++ printk(KERN_INFO "mpc_new_length is %ld, please use alloc_mptable=8k\n", ++ mpc_new_length); ++ } ++ ++ if (!mpc_new_phys) { ++ unsigned char old, new; ++ /* check if we can change the postion */ ++ mpc->mpc_checksum = 0; ++ old = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); ++ mpc->mpc_checksum = 0xff; ++ new = mpf_checksum((unsigned char *)mpc, mpc->mpc_length); ++ if (old == new) { ++ printk(KERN_INFO "mpc is readonly, please try alloc_mptable instead\n"); ++ return 0; ++ } ++ printk(KERN_INFO "use in-positon replacing\n"); ++ } else { ++ maddr_t mpc_new_bus; + +- /* +- * Avoid pin reprogramming. PRTs typically include entries +- * with redundant pin->gsi mappings (but unique PCI devices); +- * we only program the IOAPIC on the first. +- */ +- if (ioapic_pin > MP_MAX_IOAPIC_PIN) { +- printk(KERN_ERR "Invalid reference to IOAPIC pin " +- "%d-%d\n", mp_ioapic_routing[ioapic].apic_id, +- ioapic_pin); +- return gsi; +- } +- if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) { +- Dprintk(KERN_DEBUG "Pin %d-%d already programmed\n", +- mp_ioapic_routing[ioapic].apic_id, ioapic_pin); +-#if defined(CONFIG_X86_32) && !defined(CONFIG_XEN) +- return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]); +-#else +- return gsi; +-#endif ++ mpc_new_bus = phys_to_machine(mpc_new_phys); ++ mpf->mpf_physptr = mpc_new_bus; ++ mpc_new = phys_to_virt(mpc_new_phys); ++ memcpy(mpc_new, mpc, mpc->mpc_length); ++ mpc = mpc_new; ++ /* check if we can modify that */ ++ if (mpc_new_bus - mpf->mpf_physptr) { ++ struct intel_mp_floating *mpf_new; ++ /* steal 16 bytes from [0, 1k) */ ++ printk(KERN_INFO "mpf new: %x\n", 0x400 - 16); ++ mpf_new = isa_bus_to_virt(0x400 - 16); ++ memcpy(mpf_new, mpf, 16); ++ mpf = mpf_new; ++ mpf->mpf_physptr = mpc_new_bus; ++ } ++ mpf->mpf_checksum = 0; ++ mpf->mpf_checksum -= mpf_checksum((unsigned char *)mpf, 16); ++ printk(KERN_INFO "mpf_physptr new: %x\n", mpf->mpf_physptr); + } + +- set_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed); +-#if defined(CONFIG_X86_32) && !defined(CONFIG_XEN) + /* +- * For GSI >= 64, use IRQ compression ++ * only replace the one with mp_INT and ++ * MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, ++ * already in mp_irqs , stored by ... and mp_config_acpi_gsi, ++ * may need pci=routeirq for all coverage + */ +- if ((gsi >= IRQ_COMPRESSION_START) +- && (triggering == ACPI_LEVEL_SENSITIVE)) { +- /* +- * For PCI devices assign IRQs in order, avoiding gaps +- * due to unused I/O APIC pins. +- */ +- int irq = gsi; +- if (gsi < MAX_GSI_NUM) { +- /* +- * Retain the VIA chipset work-around (gsi > 15), but +- * avoid a problem where the 8254 timer (IRQ0) is setup +- * via an override (so it's not on pin 0 of the ioapic), +- * and at the same time, the pin 0 interrupt is a PCI +- * type. The gsi > 15 test could cause these two pins +- * to be shared as IRQ0, and they are not shareable. +- * So test for this condition, and if necessary, avoid +- * the pin collision. +- */ +- gsi = pci_irq++; +- /* +- * Don't assign IRQ used by ACPI SCI +- */ +- if (gsi == acpi_gbl_FADT.sci_interrupt) +- gsi = pci_irq++; +- gsi_to_irq[irq] = gsi; +- } else { +- printk(KERN_ERR "GSI %u is too high\n", gsi); +- return gsi; +- } +- } +-#endif +- io_apic_set_pci_routing(ioapic, ioapic_pin, gsi, +- triggering == ACPI_EDGE_SENSITIVE ? 0 : 1, +- polarity == ACPI_ACTIVE_HIGH ? 0 : 1); +- return gsi; ++ replace_intsrc_all(mpc, mpc_new_phys, mpc_new_length); ++ ++ return 0; + } + +-#endif /* CONFIG_X86_IO_APIC */ +-#endif /* CONFIG_ACPI */ ++late_initcall(update_mp_table); +--- head-2010-01-18.orig/arch/x86/kernel/apic/nmi.c 2010-01-18 16:51:20.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/apic/nmi.c 2009-11-06 10:51:42.000000000 +0100 +@@ -27,7 +27,9 @@ + #include + #include + ++#ifndef CONFIG_XEN + #include ++#endif + #include + #include + #include +@@ -174,11 +176,13 @@ int __init check_nmi_watchdog(void) + kfree(prev_nmi_count); + return 0; + error: ++#ifndef CONFIG_XEN + if (nmi_watchdog == NMI_IO_APIC) { + if (!timer_through_8259) + disable_8259A_irq(0); + on_each_cpu(__acpi_nmi_disable, NULL, 1); + } ++#endif + + #ifdef CONFIG_X86_32 + timer_ack = 0; +--- head-2010-01-18.orig/arch/x86/kernel/pci-dma-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/pci-dma-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -5,13 +5,13 @@ + + #include + #include +-#include ++#include + #include ++#include + +-int forbid_dac __read_mostly; +-EXPORT_SYMBOL(forbid_dac); ++static int forbid_dac __read_mostly; + +-const struct dma_mapping_ops *dma_ops; ++struct dma_mapping_ops *dma_ops; + EXPORT_SYMBOL(dma_ops); + + static int iommu_sac_force __read_mostly; +@@ -74,13 +74,17 @@ early_param("dma32_size", parse_dma32_si + void __init dma32_reserve_bootmem(void) + { + unsigned long size, align; +- if (end_pfn <= MAX_DMA32_PFN) ++ if (max_pfn <= MAX_DMA32_PFN) + return; + ++ /* ++ * check aperture_64.c allocate_aperture() for reason about ++ * using 512M as goal ++ */ + align = 64ULL<<20; + size = round_up(dma32_bootmem_size, align); + dma32_bootmem_ptr = __alloc_bootmem_nopanic(size, align, +- __pa(MAX_DMA_ADDRESS)); ++ 512ULL<<20); + if (dma32_bootmem_ptr) + dma32_bootmem_size = size; + else +@@ -88,17 +92,14 @@ void __init dma32_reserve_bootmem(void) + } + static void __init dma32_free_bootmem(void) + { +- int node; + +- if (end_pfn <= MAX_DMA32_PFN) ++ if (max_pfn <= MAX_DMA32_PFN) + return; + + if (!dma32_bootmem_ptr) + return; + +- for_each_online_node(node) +- free_bootmem_node(NODE_DATA(node), __pa(dma32_bootmem_ptr), +- dma32_bootmem_size); ++ free_bootmem(__pa(dma32_bootmem_ptr), dma32_bootmem_size); + + dma32_bootmem_ptr = NULL; + dma32_bootmem_size = 0; +@@ -107,7 +108,7 @@ static void __init dma32_free_bootmem(vo + #define dma32_free_bootmem() ((void)0) + #endif + +-static const struct dma_mapping_ops swiotlb_dma_ops = { ++static struct dma_mapping_ops swiotlb_dma_ops = { + .mapping_error = swiotlb_dma_mapping_error, + .map_single = swiotlb_map_single_phys, + .unmap_single = swiotlb_unmap_single, +@@ -130,25 +131,31 @@ void __init pci_iommu_alloc(void) + * The order of these functions is important for + * fall-back/fail-over reasons + */ +-#ifdef CONFIG_GART_IOMMU + gart_iommu_hole_init(); +-#endif + +-#ifdef CONFIG_CALGARY_IOMMU + detect_calgary(); +-#endif + + detect_intel_iommu(); + +-#ifdef CONFIG_SWIOTLB ++ amd_iommu_detect(); ++ + swiotlb_init(); + if (swiotlb) { + printk(KERN_INFO "PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\n"); + dma_ops = &swiotlb_dma_ops; + } +-#endif + } + ++#ifndef CONFIG_XEN ++unsigned long iommu_num_pages(unsigned long addr, unsigned long len) ++{ ++ unsigned long size = roundup((addr & ~PAGE_MASK) + len, PAGE_SIZE); ++ ++ return size >> PAGE_SHIFT; ++} ++EXPORT_SYMBOL(iommu_num_pages); ++#endif ++ + /* + * See for the iommu kernel parameter + * documentation. +@@ -201,9 +208,7 @@ static __init int iommu_setup(char *p) + swiotlb = 1; + #endif + +-#ifdef CONFIG_GART_IOMMU + gart_parse_options(p); +-#endif + + #ifdef CONFIG_CALGARY_IOMMU + if (!strncmp(p, "calgary", 7)) +@@ -245,136 +250,19 @@ int range_straddles_page_boundary(paddr_ + !check_pages_physically_contiguous(pfn, offset, size)); + } + +-#ifdef CONFIG_X86_32 +-int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, +- dma_addr_t device_addr, size_t size, int flags) +-{ +- void __iomem *mem_base = NULL; +- int pages = size >> PAGE_SHIFT; +- int bitmap_size = BITS_TO_LONGS(pages) * sizeof(long); +- +- if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0) +- goto out; +- if (!size) +- goto out; +- if (dev->dma_mem) +- goto out; +- +- /* FIXME: this routine just ignores DMA_MEMORY_INCLUDES_CHILDREN */ +- +- mem_base = ioremap(bus_addr, size); +- if (!mem_base) +- goto out; +- +- dev->dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL); +- if (!dev->dma_mem) +- goto out; +- dev->dma_mem->bitmap = kzalloc(bitmap_size, GFP_KERNEL); +- if (!dev->dma_mem->bitmap) +- goto free1_out; +- +- dev->dma_mem->virt_base = mem_base; +- dev->dma_mem->device_base = device_addr; +- dev->dma_mem->size = pages; +- dev->dma_mem->flags = flags; +- +- if (flags & DMA_MEMORY_MAP) +- return DMA_MEMORY_MAP; +- +- return DMA_MEMORY_IO; +- +- free1_out: +- kfree(dev->dma_mem); +- out: +- if (mem_base) +- iounmap(mem_base); +- return 0; +-} +-EXPORT_SYMBOL(dma_declare_coherent_memory); +- +-void dma_release_declared_memory(struct device *dev) +-{ +- struct dma_coherent_mem *mem = dev->dma_mem; +- +- if (!mem) +- return; +- dev->dma_mem = NULL; +- iounmap(mem->virt_base); +- kfree(mem->bitmap); +- kfree(mem); +-} +-EXPORT_SYMBOL(dma_release_declared_memory); +- +-void *dma_mark_declared_memory_occupied(struct device *dev, +- dma_addr_t device_addr, size_t size) +-{ +- struct dma_coherent_mem *mem = dev->dma_mem; +- int pos, err; +- int pages = (size + (device_addr & ~PAGE_MASK) + PAGE_SIZE - 1); +- +- pages >>= PAGE_SHIFT; +- +- if (!mem) +- return ERR_PTR(-EINVAL); +- +- pos = (device_addr - mem->device_base) >> PAGE_SHIFT; +- err = bitmap_allocate_region(mem->bitmap, pos, get_order(pages)); +- if (err != 0) +- return ERR_PTR(err); +- return mem->virt_base + (pos << PAGE_SHIFT); +-} +-EXPORT_SYMBOL(dma_mark_declared_memory_occupied); +- +-static int dma_alloc_from_coherent_mem(struct device *dev, ssize_t size, +- dma_addr_t *dma_handle, void **ret) +-{ +- struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL; +- int order = get_order(size); +- +- if (mem) { +- int page = bitmap_find_free_region(mem->bitmap, mem->size, +- order); +- if (page >= 0) { +- *dma_handle = mem->device_base + (page << PAGE_SHIFT); +- *ret = mem->virt_base + (page << PAGE_SHIFT); +- memset(*ret, 0, size); +- } +- if (mem->flags & DMA_MEMORY_EXCLUSIVE) +- *ret = NULL; +- } +- return (mem != NULL); +-} +- +-static int dma_release_coherent(struct device *dev, int order, void *vaddr) +-{ +- struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL; +- +- if (mem && vaddr >= mem->virt_base && vaddr < +- (mem->virt_base + (mem->size << PAGE_SHIFT))) { +- int page = (vaddr - mem->virt_base) >> PAGE_SHIFT; +- +- bitmap_release_region(mem->bitmap, page, order); +- return 1; +- } +- return 0; +-} +-#else +-#define dma_alloc_from_coherent_mem(dev, size, handle, ret) (0) +-#define dma_release_coherent(dev, order, vaddr) (0) +-#endif /* CONFIG_X86_32 */ +- + int dma_supported(struct device *dev, u64 mask) + { ++ struct dma_mapping_ops *ops = get_dma_ops(dev); ++ + #ifdef CONFIG_PCI + if (mask > 0xffffffff && forbid_dac > 0) { +- printk(KERN_INFO "PCI: Disallowing DAC for device %s\n", +- dev->bus_id); ++ dev_info(dev, "PCI: Disallowing DAC for device\n"); + return 0; + } + #endif + +- if (dma_ops->dma_supported) +- return dma_ops->dma_supported(dev, mask); ++ if (ops->dma_supported) ++ return ops->dma_supported(dev, mask); + + /* Copied from i386. Doesn't make much sense, because it will + only work for pci_alloc_coherent. +@@ -395,8 +283,7 @@ int dma_supported(struct device *dev, u6 + type. Normally this doesn't make any difference, but gives + more gentle handling of IOMMU overflow. */ + if (iommu_sac_force && (mask >= DMA_40BIT_MASK)) { +- printk(KERN_INFO "%s: Force SAC with mask %Lx\n", +- dev->bus_id, mask); ++ dev_info(dev, "Force SAC with mask %Lx\n", mask); + return 0; + } + +@@ -422,6 +309,9 @@ void * + dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, + gfp_t gfp) + { ++#ifndef CONFIG_XEN ++ struct dma_mapping_ops *ops = get_dma_ops(dev); ++#endif + void *memory = NULL; + struct page *page; + unsigned long dma_mask = 0; +@@ -431,7 +321,7 @@ dma_alloc_coherent(struct device *dev, s + /* ignore region specifiers */ + gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); + +- if (dma_alloc_from_coherent_mem(dev, size, dma_handle, &memory)) ++ if (dma_alloc_from_coherent(dev, size, dma_handle, &memory)) + return memory; + + if (!dev) { +@@ -491,8 +381,8 @@ dma_alloc_coherent(struct device *dev, s + /* Let low level make its own zone decisions */ + gfp &= ~(GFP_DMA32|GFP_DMA); + +- if (dma_ops->alloc_coherent) +- return dma_ops->alloc_coherent(dev, size, ++ if (ops->alloc_coherent) ++ return ops->alloc_coherent(dev, size, + dma_handle, gfp); + return NULL; + } +@@ -504,14 +394,14 @@ dma_alloc_coherent(struct device *dev, s + } + } + +- if (dma_ops->alloc_coherent) { ++ if (ops->alloc_coherent) { + free_pages((unsigned long)memory, order); + gfp &= ~(GFP_DMA|GFP_DMA32); +- return dma_ops->alloc_coherent(dev, size, dma_handle, gfp); ++ return ops->alloc_coherent(dev, size, dma_handle, gfp); + } + +- if (dma_ops->map_simple) { +- *dma_handle = dma_ops->map_simple(dev, virt_to_bus(memory), ++ if (ops->map_simple) { ++ *dma_handle = ops->map_simple(dev, virt_to_bus(memory), + size, + PCI_DMA_BIDIRECTIONAL); + if (*dma_handle != bad_dma_address) +@@ -542,13 +432,17 @@ EXPORT_SYMBOL(dma_alloc_coherent); + void dma_free_coherent(struct device *dev, size_t size, + void *vaddr, dma_addr_t bus) + { ++#ifndef CONFIG_XEN ++ struct dma_mapping_ops *ops = get_dma_ops(dev); ++#endif ++ + int order = get_order(size); + WARN_ON(irqs_disabled()); /* for portability */ +- if (dma_release_coherent(dev, order, vaddr)) ++ if (dma_release_from_coherent(dev, order, vaddr)) + return; + #ifndef CONFIG_XEN +- if (dma_ops->unmap_single) +- dma_ops->unmap_single(dev, bus, size, 0); ++ if (ops->unmap_single) ++ ops->unmap_single(dev, bus, size, 0); + #endif + xen_destroy_contiguous_region((unsigned long)vaddr, order); + free_pages((unsigned long)vaddr, order); +@@ -557,15 +451,13 @@ EXPORT_SYMBOL(dma_free_coherent); + + static int __init pci_iommu_init(void) + { +-#ifdef CONFIG_CALGARY_IOMMU + calgary_iommu_init(); +-#endif + + intel_iommu_init(); + +-#ifdef CONFIG_GART_IOMMU ++ amd_iommu_init(); ++ + gart_iommu_init(); +-#endif + + no_iommu_init(); + return 0; +--- head-2010-01-18.orig/arch/x86/kernel/pci-nommu-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/pci-nommu-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -79,18 +79,12 @@ gnttab_unmap_single(struct device *dev, + gnttab_dma_unmap_page(dma_addr); + } + +-static int nommu_mapping_error(dma_addr_t dma_addr) +-{ +- return (dma_addr == bad_dma_address); +-} +- +-static const struct dma_mapping_ops nommu_dma_ops = { ++static struct dma_mapping_ops nommu_dma_ops = { + .map_single = gnttab_map_single, + .unmap_single = gnttab_unmap_single, + .map_sg = gnttab_map_sg, + .unmap_sg = gnttab_unmap_sg, + .dma_supported = swiotlb_dma_supported, +- .mapping_error = nommu_mapping_error + }; + + void __init no_iommu_init(void) +--- head-2010-01-18.orig/arch/x86/kernel/probe_roms_32.c 2010-01-18 16:51:20.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/probe_roms_32.c 2009-11-06 10:51:42.000000000 +0100 +@@ -131,7 +131,7 @@ void __init probe_roms(void) + upper = system_rom_resource.start; + + /* check for extension rom (ignore length byte!) */ +- rom = isa_bus_to_virt(extension_rom_resource.start); ++ rom = isa_bus_to_virt((unsigned long)extension_rom_resource.start); + if (romsignature(rom)) { + length = extension_rom_resource.end - extension_rom_resource.start + 1; + if (romchecksum(rom, length)) { +--- head-2010-01-18.orig/arch/x86/kernel/process-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/process-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -6,6 +6,13 @@ + #include + #include + #include ++#include ++#include ++ ++unsigned long idle_halt; ++EXPORT_SYMBOL(idle_halt); ++unsigned long idle_nomwait; ++EXPORT_SYMBOL(idle_nomwait); + + struct kmem_cache *task_xstate_cachep; + +@@ -45,6 +52,70 @@ void arch_task_cache_init(void) + SLAB_PANIC, NULL); + } + ++/* ++ * Idle related variables and functions ++ */ ++unsigned long boot_option_idle_override = 0; ++EXPORT_SYMBOL(boot_option_idle_override); ++ ++/* ++ * Powermanagement idle function, if any.. ++ */ ++void (*pm_idle)(void); ++EXPORT_SYMBOL(pm_idle); ++ ++#ifdef CONFIG_X86_32 ++/* ++ * This halt magic was a workaround for ancient floppy DMA ++ * wreckage. It should be safe to remove. ++ */ ++static int hlt_counter; ++void disable_hlt(void) ++{ ++ hlt_counter++; ++} ++EXPORT_SYMBOL(disable_hlt); ++ ++void enable_hlt(void) ++{ ++ hlt_counter--; ++} ++EXPORT_SYMBOL(enable_hlt); ++ ++static inline int hlt_use_halt(void) ++{ ++ return (!hlt_counter && boot_cpu_data.hlt_works_ok); ++} ++#else ++static inline int hlt_use_halt(void) ++{ ++ return 1; ++} ++#endif ++ ++/* ++ * We use this if we don't have any better ++ * idle routine.. ++ */ ++void xen_idle(void) ++{ ++ current_thread_info()->status &= ~TS_POLLING; ++ /* ++ * TS_POLLING-cleared state must be visible before we ++ * test NEED_RESCHED: ++ */ ++ smp_mb(); ++ ++ if (!need_resched()) ++ safe_halt(); /* enables interrupts racelessly */ ++ else ++ local_irq_enable(); ++ current_thread_info()->status |= TS_POLLING; ++} ++#ifdef CONFIG_APM_MODULE ++EXPORT_SYMBOL(default_idle); ++#endif ++ + static void do_nothing(void *unused) + { + } +@@ -61,7 +132,7 @@ void cpu_idle_wait(void) + { + smp_mb(); + /* kick all the CPUs so that they exit out of pm_idle */ +- smp_call_function(do_nothing, NULL, 0, 1); ++ smp_call_function(do_nothing, NULL, 1); + } + EXPORT_SYMBOL_GPL(cpu_idle_wait); + +@@ -125,60 +196,175 @@ static void poll_idle(void) + * + * idle=mwait overrides this decision and forces the usage of mwait. + */ ++static int __cpuinitdata force_mwait; ++ ++#define MWAIT_INFO 0x05 ++#define MWAIT_ECX_EXTENDED_INFO 0x01 ++#define MWAIT_EDX_C1 0xf0 ++ + static int __cpuinit mwait_usable(const struct cpuinfo_x86 *c) + { ++ u32 eax, ebx, ecx, edx; ++ + if (force_mwait) + return 1; + +- if (c->x86_vendor == X86_VENDOR_AMD) { +- switch(c->x86) { +- case 0x10: +- case 0x11: +- return 0; ++ if (c->cpuid_level < MWAIT_INFO) ++ return 0; ++ ++ cpuid(MWAIT_INFO, &eax, &ebx, &ecx, &edx); ++ /* Check, whether EDX has extended info about MWAIT */ ++ if (!(ecx & MWAIT_ECX_EXTENDED_INFO)) ++ return 1; ++ ++ /* ++ * edx enumeratios MONITOR/MWAIT extensions. Check, whether ++ * C1 supports MWAIT ++ */ ++ return (edx & MWAIT_EDX_C1); ++} ++ ++/* ++ * Check for AMD CPUs, which have potentially C1E support ++ */ ++static int __cpuinit check_c1e_idle(const struct cpuinfo_x86 *c) ++{ ++ if (c->x86_vendor != X86_VENDOR_AMD) ++ return 0; ++ ++ if (c->x86 < 0x0F) ++ return 0; ++ ++ /* Family 0x0f models < rev F do not have C1E */ ++ if (c->x86 == 0x0f && c->x86_model < 0x40) ++ return 0; ++ ++ return 1; ++} ++ ++static cpumask_t c1e_mask = CPU_MASK_NONE; ++static int c1e_detected; ++ ++void c1e_remove_cpu(int cpu) ++{ ++ cpu_clear(cpu, c1e_mask); ++} ++ ++/* ++ * C1E aware idle routine. We check for C1E active in the interrupt ++ * pending message MSR. If we detect C1E, then we handle it the same ++ * way as C3 power states (local apic timer and TSC stop) ++ */ ++static void c1e_idle(void) ++{ ++ if (need_resched()) ++ return; ++ ++ if (!c1e_detected) { ++ u32 lo, hi; ++ ++ rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); ++ if (lo & K8_INTP_C1E_ACTIVE_MASK) { ++ c1e_detected = 1; ++ if (!boot_cpu_has(X86_FEATURE_CONSTANT_TSC)) ++ mark_tsc_unstable("TSC halt in AMD C1E"); ++ printk(KERN_INFO "System has AMD C1E enabled\n"); ++ set_cpu_cap(&boot_cpu_data, X86_FEATURE_AMDC1E); + } + } +- return 1; ++ ++ if (c1e_detected) { ++ int cpu = smp_processor_id(); ++ ++ if (!cpu_isset(cpu, c1e_mask)) { ++ cpu_set(cpu, c1e_mask); ++ /* ++ * Force broadcast so ACPI can not interfere. Needs ++ * to run with interrupts enabled as it uses ++ * smp_function_call. ++ */ ++ local_irq_enable(); ++ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_FORCE, ++ &cpu); ++ printk(KERN_INFO "Switch to broadcast mode on CPU%d\n", ++ cpu); ++ local_irq_disable(); ++ } ++ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu); ++ ++ default_idle(); ++ ++ /* ++ * The switch back from broadcast mode needs to be ++ * called with interrupts disabled. ++ */ ++ local_irq_disable(); ++ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu); ++ local_irq_enable(); ++ } else ++ default_idle(); + } + #endif + + void __cpuinit select_idle_routine(const struct cpuinfo_x86 *c) + { + #ifndef CONFIG_XEN +- static int selected; +- +- if (selected) +- return; + #ifdef CONFIG_X86_SMP + if (pm_idle == poll_idle && smp_num_siblings > 1) { + printk(KERN_WARNING "WARNING: polling idle and HT enabled," + " performance may degrade.\n"); + } + #endif ++ if (pm_idle) ++ return; ++ + if (cpu_has(c, X86_FEATURE_MWAIT) && mwait_usable(c)) { + /* +- * Skip, if setup has overridden idle. + * One CPU supports mwait => All CPUs supports mwait + */ +- if (!pm_idle) { +- printk(KERN_INFO "using mwait in idle threads.\n"); +- pm_idle = mwait_idle; +- } +- } +- selected = 1; ++ printk(KERN_INFO "using mwait in idle threads.\n"); ++ pm_idle = mwait_idle; ++ } else if (check_c1e_idle(c)) { ++ printk(KERN_INFO "using C1E aware idle routine\n"); ++ pm_idle = c1e_idle; ++ } else ++ pm_idle = default_idle; + #endif + } + + static int __init idle_setup(char *str) + { ++ if (!str) ++ return -EINVAL; ++ + if (!strcmp(str, "poll")) { + printk("using polling idle threads.\n"); + pm_idle = poll_idle; +- } + #ifndef CONFIG_XEN +- else if (!strcmp(str, "mwait")) ++ } else if (!strcmp(str, "mwait")) + force_mwait = 1; ++ else if (!strcmp(str, "halt")) { ++ /* ++ * When the boot option of idle=halt is added, halt is ++ * forced to be used for CPU idle. In such case CPU C2/C3 ++ * won't be used again. ++ * To continue to load the CPU idle driver, don't touch ++ * the boot_option_idle_override. ++ */ ++ pm_idle = default_idle; ++ idle_halt = 1; ++ return 0; ++ } else if (!strcmp(str, "nomwait")) { ++ /* ++ * If the boot option of "idle=nomwait" is added, ++ * it means that mwait will be disabled for CPU C2/C3 ++ * states. In such case it won't touch the variable ++ * of boot_option_idle_override. ++ */ ++ idle_nomwait = 1; ++ return 0; + #endif +- else ++ } else + return -1; + + boot_option_idle_override = 1; +--- head-2010-01-18.orig/arch/x86/kernel/process_32-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/process_32-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -59,15 +59,11 @@ + #include + #include + #include ++#include + + asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); + asmlinkage void cstar_ret_from_fork(void) __asm__("cstar_ret_from_fork"); + +-static int hlt_counter; +- +-unsigned long boot_option_idle_override = 0; +-EXPORT_SYMBOL(boot_option_idle_override); +- + DEFINE_PER_CPU(struct task_struct *, current_task) = &init_task; + EXPORT_PER_CPU_SYMBOL(current_task); + +@@ -82,46 +78,27 @@ unsigned long thread_saved_pc(struct tas + return ((unsigned long *)tsk->thread.sp)[3]; + } + +-/* +- * Powermanagement idle function, if any.. +- */ +-void (*pm_idle)(void); +-EXPORT_SYMBOL(pm_idle); ++#ifdef CONFIG_HOTPLUG_CPU ++#ifndef CONFIG_XEN ++#include + +-void disable_hlt(void) ++static void cpu_exit_clear(void) + { +- hlt_counter++; +-} ++ int cpu = raw_smp_processor_id(); + +-EXPORT_SYMBOL(disable_hlt); +- +-void enable_hlt(void) +-{ +- hlt_counter--; +-} ++ idle_task_exit(); + +-EXPORT_SYMBOL(enable_hlt); ++ cpu_uninit(); ++ irq_ctx_exit(cpu); + +-static void xen_idle(void) +-{ +- current_thread_info()->status &= ~TS_POLLING; +- /* +- * TS_POLLING-cleared state must be visible before we +- * test NEED_RESCHED: +- */ +- smp_mb(); ++ cpu_clear(cpu, cpu_callout_map); ++ cpu_clear(cpu, cpu_callin_map); + +- if (!need_resched()) +- safe_halt(); /* enables interrupts racelessly */ +- else +- local_irq_enable(); +- current_thread_info()->status |= TS_POLLING; ++ numa_remove_cpu(cpu); ++ c1e_remove_cpu(cpu); + } +-#ifdef CONFIG_APM_MODULE +-EXPORT_SYMBOL(default_idle); + #endif + +-#ifdef CONFIG_HOTPLUG_CPU + static inline void play_dead(void) + { + idle_task_exit(); +@@ -152,13 +129,11 @@ void cpu_idle(void) + + /* endless idle loop with no priority at all */ + while (1) { +- tick_nohz_stop_sched_tick(); ++ tick_nohz_stop_sched_tick(1); + while (!need_resched()) { +- void (*idle)(void); + + check_pgt_cache(); + rmb(); +- idle = xen_idle; /* no alternatives */ + + if (rcu_pending(cpu)) + rcu_check_callbacks(cpu, 0); +@@ -168,7 +143,10 @@ void cpu_idle(void) + + local_irq_disable(); + __get_cpu_var(irq_stat).idle_timestamp = jiffies; +- idle(); ++ /* Don't trace irqs off for idle */ ++ stop_critical_timings(); ++ xen_idle(); ++ start_critical_timings(); + } + tick_nohz_restart_sched_tick(); + preempt_enable_no_resched(); +--- head-2010-01-18.orig/arch/x86/kernel/process_64-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/process_64-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -65,15 +65,6 @@ asmlinkage extern void ret_from_fork(voi + + unsigned long kernel_thread_flags = CLONE_VM | CLONE_UNTRACED; + +-unsigned long boot_option_idle_override = 0; +-EXPORT_SYMBOL(boot_option_idle_override); +- +-/* +- * Powermanagement idle function, if any.. +- */ +-void (*pm_idle)(void); +-EXPORT_SYMBOL(pm_idle); +- + static ATOMIC_NOTIFIER_HEAD(idle_notifier); + + void idle_notifier_register(struct notifier_block *n) +@@ -103,25 +94,13 @@ void exit_idle(void) + __exit_idle(); + } + +-static void xen_idle(void) +-{ +- current_thread_info()->status &= ~TS_POLLING; +- /* +- * TS_POLLING-cleared state must be visible before we +- * test NEED_RESCHED: +- */ +- smp_mb(); +- if (!need_resched()) +- safe_halt(); /* enables interrupts racelessly */ +- else +- local_irq_enable(); +- current_thread_info()->status |= TS_POLLING; +-} +- + #ifdef CONFIG_HOTPLUG_CPU + static inline void play_dead(void) + { + idle_task_exit(); ++#ifndef CONFIG_XEN ++ c1e_remove_cpu(raw_smp_processor_id()); ++#endif + local_irq_disable(); + cpu_clear(smp_processor_id(), cpu_initialized); + preempt_enable_no_resched(); +@@ -146,12 +125,11 @@ void cpu_idle(void) + current_thread_info()->status |= TS_POLLING; + /* endless idle loop with no priority at all */ + while (1) { +- tick_nohz_stop_sched_tick(); ++ tick_nohz_stop_sched_tick(1); + while (!need_resched()) { +- void (*idle)(void); + + rmb(); +- idle = xen_idle; /* no alternatives */ ++ + if (cpu_is_offline(smp_processor_id())) + play_dead(); + /* +@@ -161,7 +139,10 @@ void cpu_idle(void) + */ + local_irq_disable(); + enter_idle(); +- idle(); ++ /* Don't trace irqs off for idle */ ++ stop_critical_timings(); ++ xen_idle(); ++ start_critical_timings(); + /* In many cases the interrupt that ended idle + has already called exit_idle. But some idle + loops can be woken up without interrupt. */ +@@ -271,7 +252,7 @@ void exit_thread(void) + } + } + +-void load_gs_index(unsigned gs) ++void xen_load_gs_index(unsigned gs) + { + WARN_ON(HYPERVISOR_set_segment_base(SEGBASE_GS_USER_SEL, gs)); + } +@@ -373,10 +354,10 @@ int copy_thread(int nr, unsigned long cl + p->thread.fs = me->thread.fs; + p->thread.gs = me->thread.gs; + +- asm("mov %%gs,%0" : "=m" (p->thread.gsindex)); +- asm("mov %%fs,%0" : "=m" (p->thread.fsindex)); +- asm("mov %%es,%0" : "=m" (p->thread.es)); +- asm("mov %%ds,%0" : "=m" (p->thread.ds)); ++ savesegment(gs, p->thread.gsindex); ++ savesegment(fs, p->thread.fsindex); ++ savesegment(es, p->thread.es); ++ savesegment(ds, p->thread.ds); + + if (unlikely(test_tsk_thread_flag(me, TIF_IO_BITMAP))) { + p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL); +@@ -417,7 +398,9 @@ out: + void + start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) + { +- asm volatile("movl %0, %%fs; movl %0, %%es; movl %0, %%ds" :: "r"(0)); ++ loadsegment(fs, 0); ++ loadsegment(es, 0); ++ loadsegment(ds, 0); + load_gs_index(0); + regs->ip = new_ip; + regs->sp = new_sp; +@@ -557,8 +540,8 @@ static inline void __switch_to_xtra(stru + struct task_struct * + __switch_to(struct task_struct *prev_p, struct task_struct *next_p) + { +- struct thread_struct *prev = &prev_p->thread, +- *next = &next_p->thread; ++ struct thread_struct *prev = &prev_p->thread; ++ struct thread_struct *next = &next_p->thread; + int cpu = smp_processor_id(); + #ifndef CONFIG_X86_NO_TSS + struct tss_struct *tss = &per_cpu(init_tss, cpu); +@@ -661,12 +644,25 @@ __switch_to(struct task_struct *prev_p, + */ + if (unlikely(next->es)) + loadsegment(es, next->es); +- ++ + if (unlikely(next->ds)) + loadsegment(ds, next->ds); + ++ /* ++ * Leave lazy mode, flushing any hypercalls made here. ++ * This must be done before restoring TLS segments so ++ * the GDT and LDT are properly updated, and must be ++ * done before math_state_restore, so the TS bit is up ++ * to date. ++ */ ++ arch_leave_lazy_cpu_mode(); ++ + /* + * Switch FS and GS. ++ * ++ * Segment register != 0 always requires a reload. Also ++ * reload when it has changed. When prev process used 64bit ++ * base always reload to avoid an information leak. + */ + if (unlikely(next->fsindex)) + loadsegment(fs, next->fsindex); +@@ -687,7 +683,8 @@ __switch_to(struct task_struct *prev_p, + write_pda(oldrsp, next->usersp); + write_pda(pcurrent, next_p); + write_pda(kernelstack, +- (unsigned long)task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET); ++ (unsigned long)task_stack_page(next_p) + ++ THREAD_SIZE - PDA_STACKOFFSET); + #ifdef CONFIG_CC_STACKPROTECTOR + write_pda(stack_canary, next_p->stack_canary); + +@@ -848,7 +845,7 @@ long do_arch_prctl(struct task_struct *t + set_32bit_tls(task, FS_TLS, addr); + if (doit) { + load_TLS(&task->thread, cpu); +- asm volatile("movl %0,%%fs" :: "r"(FS_TLS_SEL)); ++ loadsegment(fs, FS_TLS_SEL); + } + task->thread.fsindex = FS_TLS_SEL; + task->thread.fs = 0; +@@ -858,7 +855,7 @@ long do_arch_prctl(struct task_struct *t + if (doit) { + /* set the selector to 0 to not confuse + __switch_to */ +- asm volatile("movl %0,%%fs" :: "r" (0)); ++ loadsegment(fs, 0); + ret = HYPERVISOR_set_segment_base(SEGBASE_FS, + addr); + } +@@ -882,7 +879,7 @@ long do_arch_prctl(struct task_struct *t + if (task->thread.gsindex == GS_TLS_SEL) + base = read_32bit_tls(task, GS_TLS); + else if (doit) { +- asm("movl %%gs,%0" : "=r" (gsindex)); ++ savesegment(gs, gsindex); + if (gsindex) + rdmsrl(MSR_KERNEL_GS_BASE, base); + else +--- head-2010-01-18.orig/arch/x86/kernel/quirks-xen.c 2009-11-06 10:51:25.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/quirks-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -63,6 +63,7 @@ static enum { + ICH_FORCE_HPET_RESUME, + VT8237_FORCE_HPET_RESUME, + NVIDIA_FORCE_HPET_RESUME, ++ ATI_FORCE_HPET_RESUME, + } force_hpet_resume_type; + + static void __iomem *rcba_base; +@@ -156,6 +157,8 @@ static void ich_force_enable_hpet(struct + + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0, + ich_force_enable_hpet); ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_0, ++ ich_force_enable_hpet); + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, + ich_force_enable_hpet); + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, +@@ -172,6 +175,12 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I + + static struct pci_dev *cached_dev; + ++static void hpet_print_force_info(void) ++{ ++ printk(KERN_INFO "HPET not enabled in BIOS. " ++ "You might try hpet=force boot option\n"); ++} ++ + static void old_ich_force_hpet_resume(void) + { + u32 val; +@@ -251,8 +260,12 @@ static void old_ich_force_enable_hpet_us + { + if (hpet_force_user) + old_ich_force_enable_hpet(dev); ++ else ++ hpet_print_force_info(); + } + ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, ++ old_ich_force_enable_hpet_user); + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, + old_ich_force_enable_hpet_user); + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, +@@ -288,9 +301,14 @@ static void vt8237_force_enable_hpet(str + { + u32 uninitialized_var(val); + +- if (!hpet_force_user || hpet_address || force_hpet_address) ++ if (hpet_address || force_hpet_address) + return; + ++ if (!hpet_force_user) { ++ hpet_print_force_info(); ++ return; ++ } ++ + pci_read_config_dword(dev, 0x68, &val); + /* + * Bit 7 is HPET enable bit. +@@ -328,6 +346,36 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_V + DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, + vt8237_force_enable_hpet); + ++static void ati_force_hpet_resume(void) ++{ ++ pci_write_config_dword(cached_dev, 0x14, 0xfed00000); ++ printk(KERN_DEBUG "Force enabled HPET at resume\n"); ++} ++ ++static void ati_force_enable_hpet(struct pci_dev *dev) ++{ ++ u32 uninitialized_var(val); ++ ++ if (hpet_address || force_hpet_address) ++ return; ++ ++ if (!hpet_force_user) { ++ hpet_print_force_info(); ++ return; ++ } ++ ++ pci_write_config_dword(dev, 0x14, 0xfed00000); ++ pci_read_config_dword(dev, 0x14, &val); ++ force_hpet_address = val; ++ force_hpet_resume_type = ATI_FORCE_HPET_RESUME; ++ dev_printk(KERN_DEBUG, &dev->dev, "Force enabled HPET at 0x%lx\n", ++ force_hpet_address); ++ cached_dev = dev; ++ return; ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS, ++ ati_force_enable_hpet); ++ + /* + * Undocumented chipset feature taken from LinuxBIOS. + */ +@@ -341,8 +389,13 @@ static void nvidia_force_enable_hpet(str + { + u32 uninitialized_var(val); + +- if (!hpet_force_user || hpet_address || force_hpet_address) ++ if (hpet_address || force_hpet_address) ++ return; ++ ++ if (!hpet_force_user) { ++ hpet_print_force_info(); + return; ++ } + + pci_write_config_dword(dev, 0x44, 0xfed00001); + pci_read_config_dword(dev, 0x44, &val); +@@ -395,6 +448,9 @@ void force_hpet_resume(void) + case NVIDIA_FORCE_HPET_RESUME: + nvidia_force_hpet_resume(); + return; ++ case ATI_FORCE_HPET_RESUME: ++ ati_force_hpet_resume(); ++ return; + default: + break; + } +--- head-2010-01-18.orig/arch/x86/kernel/setup-xen.c 2009-11-06 10:51:32.000000000 +0100 ++++ head-2010-01-18/arch/x86/kernel/setup-xen.c 2009-11-06 10:51:42.000000000 +0100 +@@ -1,141 +1,1133 @@ +-#include ++/* ++ * Copyright (C) 1995 Linus Torvalds ++ * ++ * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 ++ * ++ * Memory region support ++ * David Parsons , July-August 1999 ++ * ++ * Added E820 sanitization routine (removes overlapping memory regions); ++ * Brian Moyle , February 2001 ++ * ++ * Moved CPU detection code to cpu/${cpu}.c ++ * Patrick Mochel , March 2002 ++ * ++ * Provisions for empty E820 memory regions (reported by certain BIOSes). ++ * Alex Achenbach , December 2002. ++ * ++ */ ++ ++/* ++ * This file handles the architecture-dependent parts of initialization ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include + #include ++#include + #include +-#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ + #include +-#include +-#include ++#include ++ ++#include