[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#807142: marked as done (jessie-pu: package linux-tools/3.16.7-ckt20-1)



Your message dated Sat, 23 Jan 2016 13:57:15 +0000
with message-id <1453557435.1835.52.camel@adam-barratt.org.uk>
and subject line 8.3 point release cleanup
has caused the Debian Bug report #807142,
regarding jessie-pu: package linux-tools/3.16.7-ckt20-1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
807142: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=807142
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: jessie
User: release.debian.org@packages.debian.org
Usertags: pu

This version of linux-tools adds a new binary package (hyperv-daemons)
containing programs built from the previously-unused tools/hv
directory.  This will improve support for running Debian as a Hyper-V
guest.  Many upstream bug fixes to these programs are applied as
patches.

It also includes some bug fixes to the perf tool and the module
building tools from the 3.16-ckt stable branch. as listed in the
changelog.

Finally, the rules and control file have been updated to work with the
kernel team's git repository.

The debdiff is below.  I've excluded upstream changes to these files
which I believe are unused in this source package:

- arch/*/Makefile
- arch/*/include/asm/cacheflush.h
- arch/*/include/asm/elf.h
- arch/*/include/asm/kvm*.h
- arch/*/include/asm/mmu_context.h
- arch/*/include/asm/pgtable*.h
- arch/*/include/asm/ptrace.h
- arch/*/include/asm/suspend.h
- arch/*/include/asm/thread_info.h
- arch/arc/**
- arch/arm/include/asm/tls.h
- arch/arm/include/asm/unistd.h
- arch/arm/include/asm/xen/page.h
- arch/arm64/include/asm/arch_timer.h
- arch/arm64/include/asm/compat.h
- arch/arm64/include/asm/cputype.h
- arch/arm64/include/asm/hw_breakpoint.h
- arch/arm64/include/asm/hwcap.h
- arch/arm64/include/asm/tlbflush.h
- arch/m68k/**
- arch/metag/**
- arch/mips/include/asm/asm-eva.h
- arch/mips/include/asm/asmmacro.h
- arch/mips/include/asm/eva.h
- arch/mips/include/asm/ftrace.h
- arch/mips/include/asm/mach-**
- arch/mips/include/asm/mipsregs.h
- arch/mips/include/asm/r4kcache.h
- arch/mips/include/asm/reg.h
- arch/mips/include/asm/stackframe.h
- arch/mips/include/asm/syscall.h
- arch/mips/include/asm/uaccess.h
- arch/parisc/**
- arch/powerpc/include/asm/iommu.h
- arch/powerpc/include/asm/machdep.h
- arch/powerpc/include/asm/pte-hash64-64k.h
- arch/powerpc/include/asm/reg.h
- arch/powerpc/include/asm/rtas.h
- arch/powerpc/include/asm/spinlock.h
- arch/sh/**
- arch/sparc/**
- arch/unicore32/**
- arch/x86/include/asm/desc.h
- arch/x86/include/asm/efi.h
- arch/x86/include/asm/fixmap.h
- arch/x86/include/asm/fpu-internal.h
- arch/x86/include/asm/mmu.h
- arch/x86/include/asm/mwait.h
- arch/x86/include/asm/page_*_types.h
- arch/x86/include/asm/preempt.h
- arch/x86/include/asm/pvclock.h
- arch/x86/include/asm/segment.h
- arch/x86/include/asm/traps.h
- arch/x86/include/asm/vga.h
- arch/x86/include/asm/vsyscall.h
- arch/x86/include/asm/xen/page.h
- arch/xtensa/**
- include/acpi/**
- include/asm-generic/preempt.h
- include/asm-generic/sections.h
- include/drm/**
- include/dt-bindings/**
- include/kvm/**
- include/linux/acpi.h
- include/linux/audit.h
- include/linux/bitops.h
- include/linux/blkdev.h
- include/linux/blk_types.h
- include/linux/bootmem.h
- include/linux/buffer_head.h
- include/linux/capability.h
- include/linux/ccp.h
- include/linux/clk-provider.h
- include/linux/clocksource.h
- include/linux/cpuidle.h
- include/linux/crash_dump.h
- include/linux/cred.h
- include/linux/crypto.h
- include/linux/dcache.h
- include/linux/device-mapper.h
- include/linux/efi.h
- include/linux/etherdevice.h
- include/linux/fs.h
- include/linux/fsl_devices.h
- include/linux/fsnotify*.h
- include/linux/fsnotify.h
- include/linux/ftrace.h
- include/linux/hid.h
- include/linux/hugetlb.h
- include/linux/if_vlan.h
- include/linux/iio/*
- include/linux/inetdevice.h
- include/linux/jbd2.h
- include/linux/jhash.h
- include/linux/jiffies.h
- include/linux/kernel_stat.h
- include/linux/kernfs.h
- include/linux/kgdb.h
- include/linux/khugepaged.h
- include/linux/libata.h
- include/linux/memory.h
- include/linux/mm.h
- include/linux/mount.h
- include/linux/mtd/*
- include/linux/netdevice.h
- include/linux/netlink.h
- include/linux/nfs_*.h
- include/linux/nilfs2_fs.h
- include/linux/of.h
- include/linux/oom.h
- include/linux/pagemap.h
- include/linux/pci.h
- include/linux/pci_ids.h
- include/linux/perf_event.h
- include/linux/power/charger-manager.h
- include/linux/preempt*.h
- include/linux/pstore_ram.h
- include/linux/quota*.h
- include/linux/ring_buffer.h
- include/linux/rmap.h
- include/linux/sched/rt.h
- include/linux/sched.h
- include/linux/seq_file.h
- include/linux/seqlock.h
- include/linux/skbuff.h
- include/linux/string.h
- include/linux/sunrpc/*
- include/linux/swapops.h
- include/linux/sysctl.h
- include/linux/sysfs.h
- include/linux/time.h
- include/linux/tpm.h
- include/linux/uio.h
- include/linux/usb/*
- include/linux/usb*.h
- include/linux/user_namespace.h
- include/linux/vga_switcheroo.h
- include/linux/workqueue.h
- include/linux/writeback.h
- include/media/*
- include/net/*
- include/scsi/*
- include/sound/*
- include/target/*
- include/trace/*
- include/uapi/drm/*
- include/xen/**
- tools/power/**
- tools/testing/**

The upload is currently in the NEW queue rather than the p-u queue,
due to the new binary package.

Ben.

diff -Nru linux-tools-3.16/arch/arm/include/uapi/asm/unistd.h linux-tools-3.16.7-ckt20/arch/arm/include/uapi/asm/unistd.h
--- linux-tools-3.16/arch/arm/include/uapi/asm/unistd.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/arm/include/uapi/asm/unistd.h	2015-11-18 10:08:46.000000000 +0000
@@ -411,11 +411,6 @@
 #define __NR_renameat2			(__NR_SYSCALL_BASE+382)
 
 /*
- * This may need to be greater than __NR_last_syscall+1 in order to
- * account for the padding in the syscall table
- */
-
-/*
  * The following SWIs are ARM private.
  */
 #define __ARM_NR_BASE			(__NR_SYSCALL_BASE+0x0f0000)
@@ -426,12 +421,6 @@
 #define __ARM_NR_set_tls		(__ARM_NR_BASE+5)
 
 /*
- * *NOTE*: This is a ghost syscall private to the kernel.  Only the
- * __kuser_cmpxchg code in entry-armv.S should be aware of its
- * existence.  Don't ever use this from user code.
- */
-
-/*
  * The following syscalls are obsolete and no longer available for EABI.
  */
 #if !defined(__KERNEL__)
diff -Nru linux-tools-3.16/arch/powerpc/include/uapi/asm/kvm.h linux-tools-3.16.7-ckt20/arch/powerpc/include/uapi/asm/kvm.h
--- linux-tools-3.16/arch/powerpc/include/uapi/asm/kvm.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/powerpc/include/uapi/asm/kvm.h	2015-11-18 10:08:46.000000000 +0000
@@ -548,6 +548,7 @@
 
 #define KVM_REG_PPC_VRSAVE	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4)
 #define KVM_REG_PPC_LPCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5)
+#define KVM_REG_PPC_LPCR_64	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb5)
 #define KVM_REG_PPC_PPR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb6)
 
 /* Architecture compatibility level */
diff -Nru linux-tools-3.16/arch/x86/include/asm/cpufeature.h linux-tools-3.16.7-ckt20/arch/x86/include/asm/cpufeature.h
--- linux-tools-3.16/arch/x86/include/asm/cpufeature.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/x86/include/asm/cpufeature.h	2015-11-18 10:08:46.000000000 +0000
@@ -203,6 +203,7 @@
 #define X86_FEATURE_DECODEASSISTS (8*32+12) /* AMD Decode Assists support */
 #define X86_FEATURE_PAUSEFILTER (8*32+13) /* AMD filtered pause intercept */
 #define X86_FEATURE_PFTHRESHOLD (8*32+14) /* AMD pause filter threshold */
+#define X86_FEATURE_VMMCALL     ( 8*32+15) /* Prefer vmmcall to vmcall */
 
 
 /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */
diff -Nru linux-tools-3.16/arch/x86/include/uapi/asm/ldt.h linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/ldt.h
--- linux-tools-3.16/arch/x86/include/uapi/asm/ldt.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/ldt.h	2015-11-18 10:08:46.000000000 +0000
@@ -28,6 +28,13 @@
 	unsigned int  seg_not_present:1;
 	unsigned int  useable:1;
 #ifdef __x86_64__
+	/*
+	 * Because this bit is not present in 32-bit user code, user
+	 * programs can pass uninitialized values here.  Therefore, in
+	 * any context in which a user_desc comes from a 32-bit program,
+	 * the kernel must act as though lm == 0, regardless of the
+	 * actual value.
+	 */
 	unsigned int  lm:1;
 #endif
 };
diff -Nru linux-tools-3.16/arch/x86/include/uapi/asm/msr-index.h linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/msr-index.h
--- linux-tools-3.16/arch/x86/include/uapi/asm/msr-index.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/msr-index.h	2015-11-18 10:08:46.000000000 +0000
@@ -232,6 +232,7 @@
 /* C1E active bits in int pending message */
 #define K8_INTP_C1E_ACTIVE_MASK		0x18000000
 #define MSR_K8_TSEG_ADDR		0xc0010112
+#define MSR_K8_TSEG_MASK		0xc0010113
 #define K8_MTRRFIXRANGE_DRAM_ENABLE	0x00040000 /* MtrrFixDramEn bit    */
 #define K8_MTRRFIXRANGE_DRAM_MODIFY	0x00080000 /* MtrrFixDramModEn bit */
 #define K8_MTRR_RDMEM_WRMEM_MASK	0x18181818 /* Mask: RdMem|WrMem    */
diff -Nru linux-tools-3.16/arch/x86/include/uapi/asm/vmx.h linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/vmx.h
--- linux-tools-3.16/arch/x86/include/uapi/asm/vmx.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/arch/x86/include/uapi/asm/vmx.h	2015-11-18 10:08:46.000000000 +0000
@@ -67,6 +67,7 @@
 #define EXIT_REASON_EPT_MISCONFIG       49
 #define EXIT_REASON_INVEPT              50
 #define EXIT_REASON_PREEMPTION_TIMER    52
+#define EXIT_REASON_INVVPID             53
 #define EXIT_REASON_WBINVD              54
 #define EXIT_REASON_XSETBV              55
 #define EXIT_REASON_APIC_WRITE          56
@@ -114,6 +115,7 @@
 	{ EXIT_REASON_EOI_INDUCED,           "EOI_INDUCED" }, \
 	{ EXIT_REASON_INVALID_STATE,         "INVALID_STATE" }, \
 	{ EXIT_REASON_INVD,                  "INVD" }, \
+	{ EXIT_REASON_INVVPID,               "INVVPID" }, \
 	{ EXIT_REASON_INVPCID,               "INVPCID" }
 
 #endif /* _UAPIVMX_H */
diff -Nru linux-tools-3.16/debian/build/tools/hv/Makefile linux-tools-3.16.7-ckt20/debian/build/tools/hv/Makefile
--- linux-tools-3.16/debian/build/tools/hv/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/build/tools/hv/Makefile	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1,15 @@
+PROGS = \
+	hv_fcopy_daemon \
+	hv_kvp_daemon \
+	hv_vss_daemon
+
+OUTDIR = tools/hv
+prefix = /usr/sbin
+
+include ../../Makefile.inc
+
+install-local-progs: $(PROGS)
+	@for p in $^; do \
+	  echo " install -m755 '$$p' '$(DESTDIR)/$(prefix)'"; \
+	  install -D -m755 "$$p" "$(DESTDIR)/$(prefix)/$$(basename $$p)"; \
+	done
diff -Nru linux-tools-3.16/debian/build/tools/Makefile linux-tools-3.16.7-ckt20/debian/build/tools/Makefile
--- linux-tools-3.16/debian/build/tools/Makefile	2014-09-08 23:32:53.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/build/tools/Makefile	2015-11-04 15:15:57.000000000 +0000
@@ -1,4 +1,5 @@
 SUBDIRS = \
+	hv \
 	perf
 
 include ../Makefile.inc
diff -Nru linux-tools-3.16/debian/changelog linux-tools-3.16.7-ckt20/debian/changelog
--- linux-tools-3.16/debian/changelog	2015-02-02 22:05:59.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/changelog	2015-11-22 19:28:02.000000000 +0000
@@ -1,3 +1,33 @@
+linux-tools (3.16.7-ckt20-1) jessie; urgency=medium
+
+  * New upstream stable update
+    - perf session: Do not fail on processing out of order event
+    - tools lib traceevent kbuffer: Remove extra update to data pointer in
+      PADDING
+    - kconfig: Fix warning "‘jump’ may be used uninitialized"
+    - scripts/sortextable: suppress warning: `relocs_size' may be used
+      uninitialized
+    - perf symbols: Store if there is a filter in place
+    - perf hists browser: Take the --comm, --dsos, etc filters into account
+    - perf hists: Update the column width for the "srcline" sort key
+    - perf stat: Get correct cpu id for print_aggr
+    - perf header: Fixup reading of HEADER_NRCPUS feature
+    - tools lib traceevent: Fix string handling in heterogeneous arch
+      environments
+    - perf tools: Fix copying of /proc/kcore
+
+  [ Ben Hutchings ]
+  * [x86] Add hyperv-daemons package, thanks to Hideki Yamane (closes: #782761)
+    - Apply upstream bug fixes up to Linux 4.1 inclusive
+  * Adjust for migration to git:
+    - Update .gitignore files
+    - debian/control: Update Vcs-* fields
+    - debian/rules: Exclude .git from maintainerclean rule
+  * debian/lib/python/debian_linux/debian.py: Change package version regexp
+    to match linux package
+
+ -- Ben Hutchings <ben@decadent.org.uk>  Sun, 22 Nov 2015 19:28:02 +0000
+
 linux-tools (3.16-3) unstable; urgency=medium
 
   * linux-tools: Fix build configuration to avoid linking perf with libbfd
diff -Nru linux-tools-3.16/debian/control linux-tools-3.16.7-ckt20/debian/control
--- linux-tools-3.16/debian/control	2015-02-02 22:14:26.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/control	2015-11-22 19:29:05.000000000 +0000
@@ -4,9 +4,9 @@
 Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
 Uploaders: Bastian Blank <waldi@debian.org>, Ben Hutchings <ben@decadent.org.uk>, Jonathan Nieder <jrnieder@gmail.com>
 Standards-Version: 3.9.4
-Build-Depends: debhelper (>> 7), python, asciidoc, bison, flex, libaudit-dev, libdw-dev, libelf-dev, libiberty-dev | binutils-dev (<< 2.23.91.20131123-1), libnewt-dev, libnuma-dev [amd64 arm64 i386 powerpc ppc64 ppc64el], libperl-dev, libunwind8-dev [amd64 arm64 i386], python-dev, xmlto, autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev
-Vcs-Svn: svn://svn.debian.org/svn/kernel/dists/trunk/linux-tools/
-Vcs-Browser: http://anonscm.debian.org/viewvc/kernel/dists/trunk/linux-tools/
+Build-Depends: debhelper (>> 7), python, asciidoc, bison, flex, libaudit-dev, libdw-dev, libelf-dev, libiberty-dev | binutils-dev (<< 2.23.91.20131123-1), libnewt-dev, libnuma-dev [amd64 arm64 i386 powerpc ppc64 ppc64el], libperl-dev, libunwind8-dev [amd64 arm64 i386], python-dev, xmlto, autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev, dh-systemd
+Vcs-Git: https://anonscm.debian.org/git/kernel/linux-tools.git
+Vcs-Browser: https://anonscm.debian.org/cgit/kernel/linux-tools.git
 
 Package: linux-kbuild-3.16
 Architecture: linux-any
@@ -60,3 +60,21 @@
  This package provides the server component 'usbipd' and the client tool
  'usbip'.
 
+Package: hyperv-daemons
+Architecture: amd64 i386
+Section: admin
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Support daemons for Linux running on Hyper-V
+ Suite of daemons for Linux guests running on Hyper-V, consisting of
+ hv_fcopy_daemon, hv_kvp_daemon and hv_vss_daemon.
+ .
+ hv_fcopy_daemon provides the file copy service, allowing the host to copy
+ files into the guest.
+ .
+ hv_kvp_daemon provides the key-value pair (KVP) service, allowing the host
+ to get and set the IP networking configuration of the guest.  (This
+ requires helper scripts which are not currently included.)
+ .
+ hv_vss_daemon provides the volume shadow copy service (VSS), allowing the
+ host to freeze the guest filesystems while taking a snapshot.
+
diff -Nru linux-tools-3.16/debian/control.md5sum linux-tools-3.16.7-ckt20/debian/control.md5sum
--- linux-tools-3.16/debian/control.md5sum	2015-02-02 22:14:26.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/control.md5sum	2015-11-22 19:29:05.000000000 +0000
@@ -1,4 +1,4 @@
 ac3acacf0cde6d2cc424f28241bb0857  debian/bin/gencontrol.py
-f7adbf2fbdf29c498d0d2b2e5bb92318  debian/changelog
-3e0489b52c23fb258aabf6d4a0bf56b9  debian/templates/control.main.in
-c4ea113bf69d902abbc5b22211e1c378  debian/templates/control.source.in
+eef3709fb75f82796d1c085de8127ee0  debian/changelog
+9f8ade84bdd5b03d8b735f236c9a2a9c  debian/templates/control.main.in
+cc1de72020178316d19ae111ac9c97e0  debian/templates/control.source.in
diff -Nru linux-tools-3.16/debian/hyperv-daemons.hv-fcopy-daemon.service linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-fcopy-daemon.service
--- linux-tools-3.16/debian/hyperv-daemons.hv-fcopy-daemon.service	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-fcopy-daemon.service	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1,10 @@
+[Unit]
+Description=Hyper-V file copy service (FCOPY) daemon
+ConditionVirtualization=microsoft
+ConditionPathExists=/dev/vmbus/hv_fcopy
+
+[Service]
+ExecStart=/usr/sbin/hv_fcopy_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff -Nru linux-tools-3.16/debian/hyperv-daemons.hv-kvp-daemon.service linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-kvp-daemon.service
--- linux-tools-3.16/debian/hyperv-daemons.hv-kvp-daemon.service	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-kvp-daemon.service	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1,9 @@
+[Unit]
+Description=Hyper-V key-value pair (KVP) daemon
+ConditionVirtualization=microsoft
+
+[Service]
+ExecStart=/usr/sbin/hv_kvp_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff -Nru linux-tools-3.16/debian/hyperv-daemons.hv-vss-daemon.service linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-vss-daemon.service
--- linux-tools-3.16/debian/hyperv-daemons.hv-vss-daemon.service	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/hyperv-daemons.hv-vss-daemon.service	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1,9 @@
+[Unit]
+Description=Hyper-V volume shadow copy service (VSS) daemon
+ConditionVirtualization=microsoft
+
+[Service]
+ExecStart=/usr/sbin/hv_vss_daemon -n
+
+[Install]
+WantedBy=multi-user.target
diff -Nru linux-tools-3.16/debian/hyperv-daemons.install linux-tools-3.16.7-ckt20/debian/hyperv-daemons.install
--- linux-tools-3.16/debian/hyperv-daemons.install	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/hyperv-daemons.install	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1 @@
+debian/hyperv-daemons.*.service	lib/systemd/system/
diff -Nru linux-tools-3.16/debian/hyperv-daemons.README.Debian linux-tools-3.16.7-ckt20/debian/hyperv-daemons.README.Debian
--- linux-tools-3.16/debian/hyperv-daemons.README.Debian	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/hyperv-daemons.README.Debian	2015-11-04 15:15:57.000000000 +0000
@@ -0,0 +1,14 @@
+hyperv-daemon for Debian
+------------------------
+
+ If you want to change screen resolution on Linux guest, 
+ plese update kernel parameter.
+
+  1. edit /etc/default/grub file
+     - add 'video=hyperv_fb:"horizontal"x"vertical"' to 
+       'GRUB_CMDLINE_LINUX_DEFAULT=' or 'GRUB_CMDLINE_LINUX=' line
+        (e.g. GRUB_CMDLINE_LINUX=video=hyperv_fb:1280x1024)
+  2. then, exec update-grub
+  3. reboot Linux guest
+
+ -- Hideki Yamane <henrich@debian.org>  Thu, 28 May 2015 10:23:52 +0900
diff -Nru linux-tools-3.16/debian/lib/python/debian_linux/debian.py linux-tools-3.16.7-ckt20/debian/lib/python/debian_linux/debian.py
--- linux-tools-3.16/debian/lib/python/debian_linux/debian.py	2014-09-08 23:32:53.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/lib/python/debian_linux/debian.py	2015-11-04 15:40:58.000000000 +0000
@@ -111,8 +111,9 @@
     \d+\.\d+
 )
 (?P<update>
-    \.\d+
-)?
+    (?:\.\d+)?
+    (?:-[a-z]+\d+)?
+)
 (?:
     ~
     (?P<modifier>
@@ -130,13 +131,20 @@
 (\.\d+)?
 (?:
     (?P<revision_experimental>
-        ~experimental\.\d+
+        ~exp\d+
     )
     |
+    (?P<revision_security>
+        [~+]deb\d+u\d+
+    )?
+    (?P<revision_backports>
+        ~bpo\d+\+\d+
+    )?
+    |
     (?P<revision_other>
         [^-]+
     )
-)?
+)
 $
 """
     _version_linux_re = re.compile(_version_linux_rules, re.X)
@@ -154,9 +162,11 @@
             self.linux_upstream = u'-'.join((d['version'], d['modifier']))
         else:
             self.linux_upstream = d['version']
-        self.linux_upstream_full = self.linux_upstream + (d['update'] or u'')
+        self.linux_upstream_full = self.linux_upstream + d['update']
         self.linux_dfsg = d['dfsg']
         self.linux_revision_experimental = match.group('revision_experimental') and True
+        self.linux_revision_security = match.group('revision_security') and True
+        self.linux_revision_backports = match.group('revision_backports') and True
         self.linux_revision_other = match.group('revision_other') and True
 
 
diff -Nru linux-tools-3.16/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch linux-tools-3.16.7-ckt20/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch
--- linux-tools-3.16/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,30 @@
+From: Yue Zhang <yuezha@microsoft.com>
+Date: Fri, 27 Jun 2014 18:19:48 -0700
+Subject: [01/14] Tools: hv: fix file overwriting of hv_fcopy_daemon
+Origin: https://git.kernel.org/linus/e013ac312c79379b26cf29012cfbb37c68f79283
+
+hv_fcopy_daemon fails to overwrite a file if the target file already
+exits.
+
+Add O_TRUNC flag on opening.
+
+Signed-off-by: Yue Zhang <yuezha@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index fba1c75..8f96b3e 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -88,7 +88,8 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+ 		}
+ 	}
+ 
+-	target_fd = open(target_fname, O_RDWR | O_CREAT | O_CLOEXEC, 0744);
++	target_fd = open(target_fname,
++			 O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, 0744);
+ 	if (target_fd == -1) {
+ 		syslog(LOG_INFO, "Open Failed: %s", strerror(errno));
+ 		goto done;
diff -Nru linux-tools-3.16/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch linux-tools-3.16.7-ckt20/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch
--- linux-tools-3.16/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,123 @@
+From: Dexuan Cui <decui@microsoft.com>
+Date: Thu, 25 Sep 2014 21:52:04 -0700
+Subject: [02/14] Tools: hv: vssdaemon: ignore the EBUSY on multiple freezing
+ the same partition
+Origin: https://git.kernel.org/linus/4f689190bb55d171d2f6614f8a6cbd4b868e48bd
+
+If a partition appears mounted more than once in /proc/mounts, vss_do_freeze()
+succeeds only for the first time and gets EBUSY (on freeze) or EINVAL (on
+thaw) for the second time. The patch ignores these to make the backup feature
+work.
+
+Also improved the error handling in case a freeze operation fails.
+
+Signed-off-by: Dexuan Cui <decui@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 48 ++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 40 insertions(+), 8 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 6a213b8..1db9430 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -44,21 +44,39 @@ static struct sockaddr_nl addr;
+ #endif
+ 
+ 
+-static int vss_do_freeze(char *dir, unsigned int cmd, char *fs_op)
++/* Don't use syslog() in the function since that can cause write to disk */
++static int vss_do_freeze(char *dir, unsigned int cmd)
+ {
+ 	int ret, fd = open(dir, O_RDONLY);
+ 
+ 	if (fd < 0)
+ 		return 1;
++
+ 	ret = ioctl(fd, cmd, 0);
+-	syslog(LOG_INFO, "VSS: %s of %s: %s\n", fs_op, dir, strerror(errno));
++
++	/*
++	 * If a partition is mounted more than once, only the first
++	 * FREEZE/THAW can succeed and the later ones will get
++	 * EBUSY/EINVAL respectively: there could be 2 cases:
++	 * 1) a user may mount the same partition to differnt directories
++	 *  by mistake or on purpose;
++	 * 2) The subvolume of btrfs appears to have the same partition
++	 * mounted more than once.
++	 */
++	if (ret) {
++		if ((cmd == FIFREEZE && errno == EBUSY) ||
++		    (cmd == FITHAW && errno == EINVAL)) {
++			close(fd);
++			return 0;
++		}
++	}
++
+ 	close(fd);
+ 	return !!ret;
+ }
+ 
+ static int vss_operate(int operation)
+ {
+-	char *fs_op;
+ 	char match[] = "/dev/";
+ 	FILE *mounts;
+ 	struct mntent *ent;
+@@ -68,11 +86,9 @@ static int vss_operate(int operation)
+ 	switch (operation) {
+ 	case VSS_OP_FREEZE:
+ 		cmd = FIFREEZE;
+-		fs_op = "freeze";
+ 		break;
+ 	case VSS_OP_THAW:
+ 		cmd = FITHAW;
+-		fs_op = "thaw";
+ 		break;
+ 	default:
+ 		return -1;
+@@ -93,15 +109,23 @@ static int vss_operate(int operation)
+ 			root_seen = 1;
+ 			continue;
+ 		}
+-		error |= vss_do_freeze(ent->mnt_dir, cmd, fs_op);
++		error |= vss_do_freeze(ent->mnt_dir, cmd);
++		if (error && operation == VSS_OP_FREEZE)
++			goto err;
+ 	}
+ 	endmntent(mounts);
+ 
+ 	if (root_seen) {
+-		error |= vss_do_freeze("/", cmd, fs_op);
++		error |= vss_do_freeze("/", cmd);
++		if (error && operation == VSS_OP_FREEZE)
++			goto err;
+ 	}
+ 
+ 	return error;
++err:
++	endmntent(mounts);
++	vss_operate(VSS_OP_THAW);
++	return error;
+ }
+ 
+ static int netlink_send(int fd, struct cn_msg *msg)
+@@ -249,8 +273,16 @@ int main(void)
+ 		case VSS_OP_FREEZE:
+ 		case VSS_OP_THAW:
+ 			error = vss_operate(op);
+-			if (error)
++			syslog(LOG_INFO, "VSS: op=%s: %s\n",
++				op == VSS_OP_FREEZE ? "FREEZE" : "THAW",
++				error ? "failed" : "succeeded");
++
++			if (error) {
+ 				error = HV_E_FAIL;
++				syslog(LOG_ERR, "op=%d failed!", op);
++				syslog(LOG_ERR, "report it with these files:");
++				syslog(LOG_ERR, "/etc/fstab and /proc/mounts");
++			}
+ 			break;
+ 		default:
+ 			syslog(LOG_ERR, "Illegal op:%d\n", op);
diff -Nru linux-tools-3.16/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch linux-tools-3.16.7-ckt20/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch
--- linux-tools-3.16/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,202 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Wed, 22 Oct 2014 18:07:11 +0200
+Subject: [03/14] tools: hv: introduce -n/--no-daemon option
+Origin: https://git.kernel.org/linus/170f4bea2008054e5098f99359e29823a7b4b1b9
+
+All tools/hv daemons do mandatory daemon() on startup. However, no pidfile
+is created, this make it difficult for an init system to track such daemons.
+Modern linux distros use systemd as their init system. It can handle the
+daemonizing by itself, however, it requires a daemon to stay in foreground
+for that. Some distros already carry distro-specific patch for hv tools
+which switches off daemon().
+
+Introduce -n/--no-daemon option for all 3 daemons in hv/tools. Parse options
+with getopt() to make this part easily expandable.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 33 +++++++++++++++++++++++++++++++--
+ tools/hv/hv_kvp_daemon.c   | 34 ++++++++++++++++++++++++++++++++--
+ tools/hv/hv_vss_daemon.c   | 33 +++++++++++++++++++++++++++++++--
+ 3 files changed, 94 insertions(+), 6 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index 8f96b3e..f437d73 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -33,6 +33,7 @@
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ #include <dirent.h>
++#include <getopt.h>
+ 
+ static int target_fd;
+ static char target_fname[W_MAX_PATH];
+@@ -126,15 +127,43 @@ static int hv_copy_cancel(void)
+ 
+ }
+ 
+-int main(void)
++void print_usage(char *argv[])
++{
++	fprintf(stderr, "Usage: %s [options]\n"
++		"Options are:\n"
++		"  -n, --no-daemon        stay in foreground, don't daemonize\n"
++		"  -h, --help             print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ 	int fd, fcopy_fd, len;
+ 	int error;
++	int daemonize = 1, long_index = 0, opt;
+ 	int version = FCOPY_CURRENT_VERSION;
+ 	char *buffer[4096 * 2];
+ 	struct hv_fcopy_hdr *in_msg;
+ 
+-	if (daemon(1, 0)) {
++	static struct option long_options[] = {
++		{"help",	no_argument,	   0,  'h' },
++		{"no-daemon",	no_argument,	   0,  'n' },
++		{0,		0,		   0,  0   }
++	};
++
++	while ((opt = getopt_long(argc, argv, "hn", long_options,
++				  &long_index)) != -1) {
++		switch (opt) {
++		case 'n':
++			daemonize = 0;
++			break;
++		case 'h':
++		default:
++			print_usage(argv);
++			exit(EXIT_FAILURE);
++		}
++	}
++
++	if (daemonize && daemon(1, 0)) {
+ 		syslog(LOG_ERR, "daemon() failed; error: %s", strerror(errno));
+ 		exit(EXIT_FAILURE);
+ 	}
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 4088b81..22b0764 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -43,6 +43,7 @@
+ #include <fcntl.h>
+ #include <dirent.h>
+ #include <net/if.h>
++#include <getopt.h>
+ 
+ /*
+  * KVP protocol: The user mode component first registers with the
+@@ -1417,7 +1418,15 @@ netlink_send(int fd, struct cn_msg *msg)
+ 	return sendmsg(fd, &message, 0);
+ }
+ 
+-int main(void)
++void print_usage(char *argv[])
++{
++	fprintf(stderr, "Usage: %s [options]\n"
++		"Options are:\n"
++		"  -n, --no-daemon        stay in foreground, don't daemonize\n"
++		"  -h, --help             print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ 	int fd, len, nl_group;
+ 	int error;
+@@ -1435,9 +1444,30 @@ int main(void)
+ 	struct hv_kvp_ipaddr_value *kvp_ip_val;
+ 	char *kvp_recv_buffer;
+ 	size_t kvp_recv_buffer_len;
++	int daemonize = 1, long_index = 0, opt;
++
++	static struct option long_options[] = {
++		{"help",	no_argument,	   0,  'h' },
++		{"no-daemon",	no_argument,	   0,  'n' },
++		{0,		0,		   0,  0   }
++	};
++
++	while ((opt = getopt_long(argc, argv, "hn", long_options,
++				  &long_index)) != -1) {
++		switch (opt) {
++		case 'n':
++			daemonize = 0;
++			break;
++		case 'h':
++		default:
++			print_usage(argv);
++			exit(EXIT_FAILURE);
++		}
++	}
+ 
+-	if (daemon(1, 0))
++	if (daemonize && daemon(1, 0))
+ 		return 1;
++
+ 	openlog("KVP", 0, LOG_USER);
+ 	syslog(LOG_INFO, "KVP starting; pid is:%d", getpid());
+ 
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 1db9430..b720d8f 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -36,6 +36,7 @@
+ #include <linux/hyperv.h>
+ #include <linux/netlink.h>
+ #include <syslog.h>
++#include <getopt.h>
+ 
+ static struct sockaddr_nl addr;
+ 
+@@ -155,7 +156,15 @@ static int netlink_send(int fd, struct cn_msg *msg)
+ 	return sendmsg(fd, &message, 0);
+ }
+ 
+-int main(void)
++void print_usage(char *argv[])
++{
++	fprintf(stderr, "Usage: %s [options]\n"
++		"Options are:\n"
++		"  -n, --no-daemon        stay in foreground, don't daemonize\n"
++		"  -h, --help             print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ 	int fd, len, nl_group;
+ 	int error;
+@@ -167,8 +176,28 @@ int main(void)
+ 	struct hv_vss_msg *vss_msg;
+ 	char *vss_recv_buffer;
+ 	size_t vss_recv_buffer_len;
++	int daemonize = 1, long_index = 0, opt;
++
++	static struct option long_options[] = {
++		{"help",	no_argument,	   0,  'h' },
++		{"no-daemon",	no_argument,	   0,  'n' },
++		{0,		0,		   0,  0   }
++	};
++
++	while ((opt = getopt_long(argc, argv, "hn", long_options,
++				  &long_index)) != -1) {
++		switch (opt) {
++		case 'n':
++			daemonize = 0;
++			break;
++		case 'h':
++		default:
++			print_usage(argv);
++			exit(EXIT_FAILURE);
++		}
++	}
+ 
+-	if (daemon(1, 0))
++	if (daemonize && daemon(1, 0))
+ 		return 1;
+ 
+ 	openlog("Hyper-V VSS", 0, LOG_USER);
diff -Nru linux-tools-3.16/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch linux-tools-3.16.7-ckt20/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch
--- linux-tools-3.16/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,70 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Mon, 10 Nov 2014 17:37:01 +0100
+Subject: [04/14] Tools: hv: vssdaemon: report freeze errors
+Origin: https://git.kernel.org/linus/7a401744d517864f8f2f2afba589e58a71d03aa6
+
+When ioctl(fd, FIFREEZE, 0) results in an error we cannot report it
+to syslog instantly since that can cause write to a frozen disk.
+However, the name of the filesystem which caused the error and errno
+are valuable and we would like to get a nice human-readable message
+in the log. Save errno before calling vss_operate(VSS_OP_THAW) and
+report the error right after.
+
+Unfortunately, FITHAW errors cannot be reported the same way as we
+need to finish thawing all filesystems before calling syslog().
+
+We should also avoid calling endmntent() for the second time in
+case we encountered an error during freezing of '/' as it usually
+results in SEGSEGV.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Acked-by: Dexuan Cui <decui@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index b720d8f..ee44f0d 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -82,7 +82,7 @@ static int vss_operate(int operation)
+ 	FILE *mounts;
+ 	struct mntent *ent;
+ 	unsigned int cmd;
+-	int error = 0, root_seen = 0;
++	int error = 0, root_seen = 0, save_errno = 0;
+ 
+ 	switch (operation) {
+ 	case VSS_OP_FREEZE:
+@@ -114,7 +114,6 @@ static int vss_operate(int operation)
+ 		if (error && operation == VSS_OP_FREEZE)
+ 			goto err;
+ 	}
+-	endmntent(mounts);
+ 
+ 	if (root_seen) {
+ 		error |= vss_do_freeze("/", cmd);
+@@ -122,10 +121,19 @@ static int vss_operate(int operation)
+ 			goto err;
+ 	}
+ 
+-	return error;
++	goto out;
+ err:
+-	endmntent(mounts);
++	save_errno = errno;
+ 	vss_operate(VSS_OP_THAW);
++	/* Call syslog after we thaw all filesystems */
++	if (ent)
++		syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
++		       ent->mnt_dir, save_errno, strerror(save_errno));
++	else
++		syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
++		       strerror(save_errno));
++out:
++	endmntent(mounts);
+ 	return error;
+ }
+ 
diff -Nru linux-tools-3.16/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch linux-tools-3.16.7-ckt20/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch
--- linux-tools-3.16/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,30 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Mon, 10 Nov 2014 17:37:02 +0100
+Subject: [05/14] Tools: hv: vssdaemon: skip all filesystems mounted readonly
+Origin: https://git.kernel.org/linus/9e5db05aae4657c7ade34ccc4b93f27ab647498e
+
+Instead of making a list of exceptions for readonly filesystems
+in addition to iso9660 we already have it is better to skip freeze
+operation for all readonly-mounted filesystems.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Acked-by: Dexuan Cui <decui@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index ee44f0d..5e63f70 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -102,7 +102,7 @@ static int vss_operate(int operation)
+ 	while ((ent = getmntent(mounts))) {
+ 		if (strncmp(ent->mnt_fsname, match, strlen(match)))
+ 			continue;
+-		if (strcmp(ent->mnt_type, "iso9660") == 0)
++		if (hasmntopt(ent, MNTOPT_RO) != NULL)
+ 			continue;
+ 		if (strcmp(ent->mnt_type, "vfat") == 0)
+ 			continue;
diff -Nru linux-tools-3.16/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch linux-tools-3.16.7-ckt20/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch
--- linux-tools-3.16/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,58 @@
+From: Dexuan Cui <decui@microsoft.com>
+Date: Wed, 19 Nov 2014 21:51:22 -0800
+Subject: [06/14] tools: hv: ignore ENOBUFS and ENOMEM in the KVP daemon
+Origin: https://git.kernel.org/linus/4300f26492b2438c4c1930552dfe83cb09c0ab31
+
+Under high memory pressure and very high KVP R/W test pressure, the netlink
+recvfrom() may transiently return ENOBUFS to the daemon -- we found this
+during a 2-week stress test.
+
+We'd better not terminate the daemon on the failure, because a typical KVP
+user will re-try the R/W and hopefully it will succeed next time.
+
+We can also ignore the errors on sending.
+
+Cc: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Dexuan Cui <decui@microsoft.com>
+Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 22b0764..6a6432a 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -1559,8 +1559,15 @@ int main(int argc, char *argv[])
+ 				addr_p, &addr_l);
+ 
+ 		if (len < 0) {
++			int saved_errno = errno;
+ 			syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
+ 					addr.nl_pid, errno, strerror(errno));
++
++			if (saved_errno == ENOBUFS) {
++				syslog(LOG_ERR, "receive error: ignored");
++				continue;
++			}
++
+ 			close(fd);
+ 			return -1;
+ 		}
+@@ -1763,8 +1770,15 @@ kvp_done:
+ 
+ 		len = netlink_send(fd, incoming_cn_msg);
+ 		if (len < 0) {
++			int saved_errno = errno;
+ 			syslog(LOG_ERR, "net_link send failed; error: %d %s", errno,
+ 					strerror(errno));
++
++			if (saved_errno == ENOMEM || saved_errno == ENOBUFS) {
++				syslog(LOG_ERR, "send error: ignored");
++				continue;
++			}
++
+ 			exit(EXIT_FAILURE);
+ 		}
+ 	}
diff -Nru linux-tools-3.16/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch linux-tools-3.16.7-ckt20/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch
--- linux-tools-3.16/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,30 @@
+From: Matej Muzila <mmuzila@gmail.com>
+Date: Sun, 28 Dec 2014 15:54:13 +0100
+Subject: [07/14] tools: hv: Makefile: Add hv_fcopy_daemon to Makefile
+Origin: https://git.kernel.org/linus/ca04455fba937eb2d85f437900cd1726166192e6
+
+hv_fcopy_daemon is not mentioned in Makefile so it must be built
+manually. Add hv_fcopy_daemon to Makefile.
+
+Signed-off-by: Matej Muzila <mmuzila@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/Makefile b/tools/hv/Makefile
+index bd22f78..99ffe61 100644
+--- a/tools/hv/Makefile
++++ b/tools/hv/Makefile
+@@ -5,9 +5,9 @@ PTHREAD_LIBS = -lpthread
+ WARNINGS = -Wall -Wextra
+ CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS)
+ 
+-all: hv_kvp_daemon hv_vss_daemon
++all: hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
+ %: %.c
+ 	$(CC) $(CFLAGS) -o $@ $^
+ 
+ clean:
+-	$(RM) hv_kvp_daemon hv_vss_daemon
++	$(RM) hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
diff -Nru linux-tools-3.16/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch linux-tools-3.16.7-ckt20/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch
--- linux-tools-3.16/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,52 @@
+From: Dexuan Cui <decui@microsoft.com>
+Date: Wed, 10 Dec 2014 03:33:20 -0800
+Subject: [08/14] tools: hv: kvp_daemon: make IPv6-only-injection work
+Origin: https://git.kernel.org/linus/787d61822525295399f97390bca3e1bb4ce7a6b3
+
+In the case the host only injects an IPv6 address, the dhcp_enabled flag is
+true (it's only for IPv4 according to Hyper-V host team), but we still need to
+proceed to parse the IPv6 information.
+
+Cc: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Dexuan Cui <decui@microsoft.com>
+Reviewed-By: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 6a6432a..4b3ee35 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -1308,16 +1308,17 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
+ 	if (error)
+ 		goto setval_error;
+ 
++	/*
++	 * The dhcp_enabled flag is only for IPv4. In the case the host only
++	 * injects an IPv6 address, the flag is true, but we still need to
++	 * proceed to parse and pass the IPv6 information to the
++	 * disto-specific script hv_set_ifconfig.
++	 */
+ 	if (new_val->dhcp_enabled) {
+ 		error = kvp_write_file(file, "BOOTPROTO", "", "dhcp");
+ 		if (error)
+ 			goto setval_error;
+ 
+-		/*
+-		 * We are done!.
+-		 */
+-		goto setval_done;
+-
+ 	} else {
+ 		error = kvp_write_file(file, "BOOTPROTO", "", "none");
+ 		if (error)
+@@ -1345,7 +1346,6 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
+ 	if (error)
+ 		goto setval_error;
+ 
+-setval_done:
+ 	fclose(file);
+ 
+ 	/*
diff -Nru linux-tools-3.16/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch linux-tools-3.16.7-ckt20/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch
--- linux-tools-3.16/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,41 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Fri, 9 Jan 2015 22:18:52 -0800
+Subject: [09/14] Tools: hv: remove unused bytes_written from kvp_update_file()
+Origin: https://git.kernel.org/linus/77ce247a8dbc587564dbfcb16fc6d09f6f85b31b
+
+fwrite() does not actually return the number of bytes written and
+this value is being ignored anyway and ferror() is being called to
+check for an error. As we assign to this variable and never use it
+we get the following compile-time warning:
+hv_kvp_daemon.c:149:9: warning: variable .bytes_written. set but not used [-Wunused-but-set-variable]
+Remove bytes_written completely.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 4b3ee35..fe79009 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -147,7 +147,6 @@ static void kvp_release_lock(int pool)
+ static void kvp_update_file(int pool)
+ {
+ 	FILE *filep;
+-	size_t bytes_written;
+ 
+ 	/*
+ 	 * We are going to write our in-memory registry out to
+@@ -163,8 +162,7 @@ static void kvp_update_file(int pool)
+ 		exit(EXIT_FAILURE);
+ 	}
+ 
+-	bytes_written = fwrite(kvp_file_info[pool].records,
+-				sizeof(struct kvp_record),
++	fwrite(kvp_file_info[pool].records, sizeof(struct kvp_record),
+ 				kvp_file_info[pool].num_records, filep);
+ 
+ 	if (ferror(filep) || fclose(filep)) {
diff -Nru linux-tools-3.16/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch linux-tools-3.16.7-ckt20/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch
--- linux-tools-3.16/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,116 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Fri, 9 Jan 2015 22:18:53 -0800
+Subject: [10/14] Tools: hv: address compiler warnings for hv_kvp_daemon.c
+Origin: https://git.kernel.org/linus/69258c058d0a7e0a6433dae7e336c316d28129fc
+
+This patch addresses two types of compiler warnings:
+... warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
+and
+... warning: pointer targets in passing argument N of .kvp_.... differ in signedness [-Wpointer-sign]
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index fe79009..408bb07 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -308,7 +308,7 @@ static int kvp_file_init(void)
+ 	return 0;
+ }
+ 
+-static int kvp_key_delete(int pool, const char *key, int key_size)
++static int kvp_key_delete(int pool, const __u8 *key, int key_size)
+ {
+ 	int i;
+ 	int j, k;
+@@ -351,8 +351,8 @@ static int kvp_key_delete(int pool, const char *key, int key_size)
+ 	return 1;
+ }
+ 
+-static int kvp_key_add_or_modify(int pool, const char *key, int key_size, const char *value,
+-			int value_size)
++static int kvp_key_add_or_modify(int pool, const __u8 *key, int key_size,
++				 const __u8 *value, int value_size)
+ {
+ 	int i;
+ 	int num_records;
+@@ -405,7 +405,7 @@ static int kvp_key_add_or_modify(int pool, const char *key, int key_size, const
+ 	return 0;
+ }
+ 
+-static int kvp_get_value(int pool, const char *key, int key_size, char *value,
++static int kvp_get_value(int pool, const __u8 *key, int key_size, __u8 *value,
+ 			int value_size)
+ {
+ 	int i;
+@@ -437,8 +437,8 @@ static int kvp_get_value(int pool, const char *key, int key_size, char *value,
+ 	return 1;
+ }
+ 
+-static int kvp_pool_enumerate(int pool, int index, char *key, int key_size,
+-				char *value, int value_size)
++static int kvp_pool_enumerate(int pool, int index, __u8 *key, int key_size,
++				__u8 *value, int value_size)
+ {
+ 	struct kvp_record *record;
+ 
+@@ -659,7 +659,7 @@ static char *kvp_if_name_to_mac(char *if_name)
+ 	char    *p, *x;
+ 	char    buf[256];
+ 	char addr_file[256];
+-	int i;
++	unsigned int i;
+ 	char *mac_addr = NULL;
+ 
+ 	snprintf(addr_file, sizeof(addr_file), "%s%s%s", "/sys/class/net/",
+@@ -698,7 +698,7 @@ static char *kvp_mac_to_if_name(char *mac)
+ 	char    buf[256];
+ 	char *kvp_net_dir = "/sys/class/net/";
+ 	char dev_id[256];
+-	int i;
++	unsigned int i;
+ 
+ 	dir = opendir(kvp_net_dir);
+ 	if (dir == NULL)
+@@ -748,7 +748,7 @@ static char *kvp_mac_to_if_name(char *mac)
+ 
+ 
+ static void kvp_process_ipconfig_file(char *cmd,
+-					char *config_buf, int len,
++					char *config_buf, unsigned int len,
+ 					int element_size, int offset)
+ {
+ 	char buf[256];
+@@ -766,7 +766,7 @@ static void kvp_process_ipconfig_file(char *cmd,
+ 	if (offset == 0)
+ 		memset(config_buf, 0, len);
+ 	while ((p = fgets(buf, sizeof(buf), file)) != NULL) {
+-		if ((len - strlen(config_buf)) < (element_size + 1))
++		if (len < strlen(config_buf) + element_size + 1)
+ 			break;
+ 
+ 		x = strchr(p, '\n');
+@@ -914,7 +914,7 @@ static int kvp_process_ip_address(void *addrp,
+ 
+ static int
+ kvp_get_ip_info(int family, char *if_name, int op,
+-		 void  *out_buffer, int length)
++		 void  *out_buffer, unsigned int length)
+ {
+ 	struct ifaddrs *ifap;
+ 	struct ifaddrs *curp;
+@@ -1017,8 +1017,7 @@ kvp_get_ip_info(int family, char *if_name, int op,
+ 					weight += hweight32(&w[i]);
+ 
+ 				sprintf(cidr_mask, "/%d", weight);
+-				if ((length - sn_offset) <
+-					(strlen(cidr_mask) + 1))
++				if (length < sn_offset + strlen(cidr_mask) + 1)
+ 					goto gather_ipaddr;
+ 
+ 				if (sn_offset == 0)
diff -Nru linux-tools-3.16/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch linux-tools-3.16.7-ckt20/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch
--- linux-tools-3.16/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,39 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Fri, 9 Jan 2015 22:18:54 -0800
+Subject: [11/14] Tools: hv: address compiler warnings for hv_fcopy_daemon.c
+Origin: https://git.kernel.org/linus/aba474b8185d60ca8cdbf3049fe6d655aa761e23
+
+This patch addresses two types of compiler warnings:
+... warning: unused variable .fd. [-Wunused-variable]
+and
+... warning: format .%s. expects argument of type .char *., but argument 5 has type .__u16 *. [-Wformat=]
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index f437d73..1a23872 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -51,7 +51,7 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+ 
+ 	p = (char *)smsg->path_name;
+ 	snprintf(target_fname, sizeof(target_fname), "%s/%s",
+-		(char *)smsg->path_name, smsg->file_name);
++		 (char *)smsg->path_name, (char *)smsg->file_name);
+ 
+ 	syslog(LOG_INFO, "Target file name: %s", target_fname);
+ 	/*
+@@ -137,7 +137,7 @@ void print_usage(char *argv[])
+ 
+ int main(int argc, char *argv[])
+ {
+-	int fd, fcopy_fd, len;
++	int fcopy_fd, len;
+ 	int error;
+ 	int daemonize = 1, long_index = 0, opt;
+ 	int version = FCOPY_CURRENT_VERSION;
diff -Nru linux-tools-3.16/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch linux-tools-3.16.7-ckt20/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch
--- linux-tools-3.16/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,32 @@
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+Date: Fri, 9 Jan 2015 22:18:55 -0800
+Subject: [12/14] Tools: hv: do not add redundant '/' in hv_start_fcopy()
+Origin: https://git.kernel.org/linus/c1136da62170465920eea1ae9ba9ce2234091f77
+
+We don't need to add additional '/' to smsg->path_name as snprintf("%s/%s")
+does the right thing. Without the patch we get doubled '//' in the log message.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index 1a23872..9445d8f 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -43,12 +43,6 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+ 	int error = HV_E_FAIL;
+ 	char *q, *p;
+ 
+-	/*
+-	 * If possile append a path seperator to the path.
+-	 */
+-	if (strlen((char *)smsg->path_name) < (W_MAX_PATH - 2))
+-		strcat((char *)smsg->path_name, "/");
+-
+ 	p = (char *)smsg->path_name;
+ 	snprintf(target_fname, sizeof(target_fname), "%s/%s",
+ 		 (char *)smsg->path_name, (char *)smsg->file_name);
diff -Nru linux-tools-3.16/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch linux-tools-3.16.7-ckt20/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch
--- linux-tools-3.16/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,33 @@
+From: Dexuan Cui <decui@microsoft.com>
+Date: Wed, 18 Mar 2015 12:29:26 -0700
+Subject: [13/14] tools: hv: fcopy_daemon: support >2GB files for x86_32 guest
+Origin: https://git.kernel.org/linus/b4affbbb7217e440f80c922b2b304795758d40bb
+
+Without this patch, hv_fcopy_daemon's hv_copy_data() -> pwrite()
+will fail for >2GB file offset.
+
+The current char-next branch is broken and this patch fixes
+the bug.
+
+Signed-off-by: Alex Ng <alexng@microsoft.com>
+Signed-off-by: Dexuan Cui <decui@microsoft.com>
+Cc: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hv/Makefile b/tools/hv/Makefile
+index 99ffe61..a8ab795 100644
+--- a/tools/hv/Makefile
++++ b/tools/hv/Makefile
+@@ -3,7 +3,7 @@
+ CC = $(CROSS_COMPILE)gcc
+ PTHREAD_LIBS = -lpthread
+ WARNINGS = -Wall -Wextra
+-CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS)
++CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS) $(shell getconf LFS_CFLAGS)
+ 
+ all: hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
+ %: %.c
diff -Nru linux-tools-3.16/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch linux-tools-3.16.7-ckt20/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch
--- linux-tools-3.16/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch	2015-11-04 15:39:57.000000000 +0000
@@ -0,0 +1,58 @@
+From: Vaughan Cao <vaughan.cao@oracle.com>
+Date: Wed, 18 Mar 2015 12:29:28 -0700
+Subject: [14/14] hv: hypervvssd: call endmntent before call setmntent again
+Origin: https://git.kernel.org/linus/4ce50e9491c5c92baf8bb7af85eb25398d3f70af
+
+If freeze fails, vss_operate will re-enter itself to thaw. But it forgets
+to call endmntent() before it recalls setmntent() again.
+
+Signed-off-by: Vaughan Cao <vaughan.cao@oracle.com>
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 5e63f70..506dd01 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -81,6 +81,7 @@ static int vss_operate(int operation)
+ 	char match[] = "/dev/";
+ 	FILE *mounts;
+ 	struct mntent *ent;
++	char errdir[1024] = {0};
+ 	unsigned int cmd;
+ 	int error = 0, root_seen = 0, save_errno = 0;
+ 
+@@ -115,6 +116,8 @@ static int vss_operate(int operation)
+ 			goto err;
+ 	}
+ 
++	endmntent(mounts);
++
+ 	if (root_seen) {
+ 		error |= vss_do_freeze("/", cmd);
+ 		if (error && operation == VSS_OP_FREEZE)
+@@ -124,16 +127,19 @@ static int vss_operate(int operation)
+ 	goto out;
+ err:
+ 	save_errno = errno;
++	if (ent) {
++		strncpy(errdir, ent->mnt_dir, sizeof(errdir)-1);
++		endmntent(mounts);
++	}
+ 	vss_operate(VSS_OP_THAW);
+ 	/* Call syslog after we thaw all filesystems */
+ 	if (ent)
+ 		syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
+-		       ent->mnt_dir, save_errno, strerror(save_errno));
++		       errdir, save_errno, strerror(save_errno));
+ 	else
+ 		syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
+ 		       strerror(save_errno));
+ out:
+-	endmntent(mounts);
+ 	return error;
+ }
+ 
diff -Nru linux-tools-3.16/debian/patches/gitignore.patch linux-tools-3.16.7-ckt20/debian/patches/gitignore.patch
--- linux-tools-3.16/debian/patches/gitignore.patch	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/patches/gitignore.patch	2015-11-04 15:40:43.000000000 +0000
@@ -0,0 +1,14 @@
+From: Ben Hutchings <ben@decadent.org.uk
+Date: Tue, 11 Aug 2015 18:52:03 +0200
+Subject: Add gitignore to account for upstream source not being checked in
+Forwarded: not-needed
+
+--- /dev/null
++++ b/.gitignore
+@@ -0,0 +1,6 @@
++#
++# Debian packaging: ignore everything at the top level, since it isn't
++# included in our repository
++#
++/*
++!/debian/
diff -Nru linux-tools-3.16/debian/patches/series linux-tools-3.16.7-ckt20/debian/patches/series
--- linux-tools-3.16/debian/patches/series	2015-01-31 15:34:13.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/patches/series	2015-11-04 15:40:43.000000000 +0000
@@ -1,6 +1,21 @@
+gitignore.patch
 modpost-symbol-prefix.patch
 tools-perf-version.patch
 tools-perf-install.patch
 usbip-document-tcp-wrappers.patch
 kbuild-fix-recordmcount-dependency.patch
 perf-tools-fix-arm64-build-error.patch
+0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch
+0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch
+0003-tools-hv-introduce-n-no-daemon-option.patch
+0004-Tools-hv-vssdaemon-report-freeze-errors.patch
+0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch
+0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch
+0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch
+0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch
+0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch
+0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch
+0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch
+0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch
+0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch
+0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch
diff -Nru linux-tools-3.16/debian/rules linux-tools-3.16.7-ckt20/debian/rules
--- linux-tools-3.16/debian/rules	2014-09-08 23:32:53.000000000 +0100
+++ linux-tools-3.16.7-ckt20/debian/rules	2015-11-04 15:40:58.000000000 +0000
@@ -41,7 +41,7 @@
 
 maintainerclean:
 	rm -f debian/control debian/control.md5sum debian/rules.gen
-	rm -rf $(filter-out debian .svk .svn, $(wildcard * .[^.]*))
+	rm -rf $(filter-out debian .svk .svn .git, $(wildcard * .[^.]*))
 
 clean: debian/control
 	dh_testdir
diff -Nru linux-tools-3.16/debian/rules.gen linux-tools-3.16.7-ckt20/debian/rules.gen
--- linux-tools-3.16/debian/rules.gen	2015-02-02 22:14:26.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/rules.gen	2015-11-22 19:29:05.000000000 +0000
@@ -1,5 +1,5 @@
 .NOTPARALLEL:
 binary-arch::
-	$(MAKE) -f debian/rules.real binary-arch UPSTREAMVERSION='3.16' VERSION='3.16' VERSION_DEBIAN='3.16-3'
+	$(MAKE) -f debian/rules.real binary-arch UPSTREAMVERSION='3.16' VERSION='3.16' VERSION_DEBIAN='3.16.7-ckt20-1'
 build::
-	$(MAKE) -f debian/rules.real build UPSTREAMVERSION='3.16' VERSION='3.16' VERSION_DEBIAN='3.16-3'
+	$(MAKE) -f debian/rules.real build UPSTREAMVERSION='3.16' VERSION='3.16' VERSION_DEBIAN='3.16.7-ckt20-1'
diff -Nru linux-tools-3.16/debian/rules.real linux-tools-3.16.7-ckt20/debian/rules.real
--- linux-tools-3.16/debian/rules.real	2015-01-31 15:35:11.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/rules.real	2015-11-04 15:15:57.000000000 +0000
@@ -12,6 +12,9 @@
 ifneq ($(filter alpha amd64 arm64 armel armhf hppa i386 powerpc ppc64 ppc64el s390 s390x sh4 sparc sparc64,$(DEB_BUILD_ARCH)),)
   binary-arch: install-tools
 endif
+ifneq ($(filter i386 amd64,$(DEB_BUILD_ARCH)),)
+  binary-arch: install-hyperv-daemons
+endif
 
 build: $(STAMPS_DIR)/build
 
@@ -47,7 +50,7 @@
 	dh_testdir
 	dh_testroot
 	dh_clean -k -d
-	$(MAKE) -C $(BUILD_DIR)/tools install top_srcdir=$(CURDIR) DESTDIR=$(DIR)
+	$(MAKE) -C $(BUILD_DIR)/tools/perf install top_srcdir=$(CURDIR) DESTDIR=$(DIR)
 	dh_perl /usr/share/perf_$(VERSION)-core/scripts/perl/Perf-Trace-Util/lib/
 	dh_python2 /usr/share/perf_$(VERSION)-core/scripts/python/Perf-Trace-Util/lib/
 	dh_installchangelogs
@@ -82,3 +85,26 @@
 	dh_gencontrol -- -v$(VERSION)+$(VERSION_DEBIAN_FULL)
 	dh_md5sums
 	dh_builddeb
+
+install-hyperv-daemons: PACKAGE_NAME = hyperv-daemons
+install-hyperv-daemons: DH_OPTIONS = -p$(PACKAGE_NAME)
+install-hyperv-daemons: DIR = $(CURDIR)/debian/$(PACKAGE_NAME)
+install-hyperv-daemons: $(STAMPS_DIR)/build
+	dh_testdir
+	dh_testroot
+	dh_clean -k -d
+	$(MAKE) -C $(BUILD_DIR)/tools/hv install top_srcdir=$(CURDIR) DESTDIR=$(DIR)
+	dh_install
+	dh_installchangelogs
+	dh_installdocs
+	dh_systemd_enable
+	dh_systemd_start
+	dh_lintian
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
diff -Nru linux-tools-3.16/debian/templates/control.main.in linux-tools-3.16.7-ckt20/debian/templates/control.main.in
--- linux-tools-3.16/debian/templates/control.main.in	2015-01-31 15:34:42.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/templates/control.main.in	2015-11-04 15:15:57.000000000 +0000
@@ -49,3 +49,21 @@
  .
  This package provides the server component 'usbipd' and the
  client tool 'usbip'.
+
+Package: hyperv-daemons
+Architecture: i386 amd64
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Section: admin
+Description: Support daemons for Linux running on Hyper-V
+ Suite of daemons for Linux guests running on Hyper-V, consisting of
+ hv_fcopy_daemon, hv_kvp_daemon and hv_vss_daemon.
+ .
+ hv_fcopy_daemon provides the file copy service, allowing the host to
+ copy files into the guest.
+ .
+ hv_kvp_daemon provides the key-value pair (KVP) service, allowing the
+ host to get and set the IP networking configuration of the guest.
+ (This requires helper scripts which are not currently included.)
+ .
+ hv_vss_daemon provides the volume shadow copy service (VSS), allowing
+ the host to freeze the guest filesystems while taking a snapshot.
diff -Nru linux-tools-3.16/debian/templates/control.source.in linux-tools-3.16.7-ckt20/debian/templates/control.source.in
--- linux-tools-3.16/debian/templates/control.source.in	2015-02-02 22:13:42.000000000 +0000
+++ linux-tools-3.16.7-ckt20/debian/templates/control.source.in	2015-11-04 15:40:58.000000000 +0000
@@ -7,6 +7,7 @@
 Build-Depends:
  debhelper (>> 7), python,
  asciidoc, bison, flex, libaudit-dev, libdw-dev, libelf-dev, libiberty-dev | binutils-dev (<< 2.23.91.20131123-1), libnewt-dev, libnuma-dev [amd64 arm64 i386 powerpc ppc64 ppc64el], libperl-dev, libunwind8-dev [amd64 arm64 i386], python-dev, xmlto,
- autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev
-Vcs-Svn: svn://svn.debian.org/svn/kernel/dists/trunk/linux-tools/
-Vcs-Browser: http://anonscm.debian.org/viewvc/kernel/dists/trunk/linux-tools/
+ autoconf, automake, libtool, libglib2.0-dev, libudev-dev, libwrap0-dev,
+ dh-systemd
+Vcs-Git: https://anonscm.debian.org/git/kernel/linux-tools.git
+Vcs-Browser: https://anonscm.debian.org/cgit/kernel/linux-tools.git
diff -Nru linux-tools-3.16/include/linux/compiler-gcc5.h linux-tools-3.16.7-ckt20/include/linux/compiler-gcc5.h
--- linux-tools-3.16/include/linux/compiler-gcc5.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/linux/compiler-gcc5.h	2015-11-18 10:08:46.000000000 +0000
@@ -0,0 +1,66 @@
+#ifndef __LINUX_COMPILER_H
+#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
+#endif
+
+#define __used				__attribute__((__used__))
+#define __must_check			__attribute__((warn_unused_result))
+#define __compiler_offsetof(a, b)	__builtin_offsetof(a, b)
+
+/* Mark functions as cold. gcc will assume any path leading to a call
+   to them will be unlikely.  This means a lot of manual unlikely()s
+   are unnecessary now for any paths leading to the usual suspects
+   like BUG(), printk(), panic() etc. [but let's keep them for now for
+   older compilers]
+
+   Early snapshots of gcc 4.3 don't support this and we can't detect this
+   in the preprocessor, but we can live with this because they're unreleased.
+   Maketime probing would be overkill here.
+
+   gcc also has a __attribute__((__hot__)) to move hot functions into
+   a special section, but I don't see any sense in this right now in
+   the kernel context */
+#define __cold			__attribute__((__cold__))
+
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
+
+#ifndef __CHECKER__
+# define __compiletime_warning(message) __attribute__((warning(message)))
+# define __compiletime_error(message) __attribute__((error(message)))
+#endif /* __CHECKER__ */
+
+/*
+ * Mark a position in code as unreachable.  This can be used to
+ * suppress control flow warnings after asm blocks that transfer
+ * control elsewhere.
+ *
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
+ * this in the preprocessor, but we can live with this because they're
+ * unreleased.  Really, we need to have autoconf for the kernel.
+ */
+#define unreachable() __builtin_unreachable()
+
+/* Mark a function definition as prohibited from being cloned. */
+#define __noclone	__attribute__((__noclone__))
+
+/*
+ * Tell the optimizer that something else uses this function or variable.
+ */
+#define __visible __attribute__((externally_visible))
+
+/*
+ * GCC 'asm goto' miscompiles certain code sequences:
+ *
+ *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
+ *
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
+ * Fixed in GCC 4.8.2 and later versions.
+ *
+ * (asm goto is automatically volatile - the naming reflects this.)
+ */
+#define asm_volatile_goto(x...)	do { asm goto(x); asm (""); } while (0)
+
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
+#define __HAVE_BUILTIN_BSWAP32__
+#define __HAVE_BUILTIN_BSWAP64__
+#define __HAVE_BUILTIN_BSWAP16__
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
diff -Nru linux-tools-3.16/include/linux/compiler.h linux-tools-3.16.7-ckt20/include/linux/compiler.h
--- linux-tools-3.16/include/linux/compiler.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/linux/compiler.h	2015-11-18 10:08:46.000000000 +0000
@@ -380,6 +380,21 @@
  */
 #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
 
+/**
+ * lockless_dereference() - safely load a pointer for later dereference
+ * @p: The pointer to load
+ *
+ * Similar to rcu_dereference(), but for situations where the pointed-to
+ * object's lifetime is managed by something other than RCU.  That
+ * "something other" might be reference counting or simple immortality.
+ */
+#define lockless_dereference(p) \
+({ \
+	typeof(p) _________p1 = ACCESS_ONCE(p); \
+	smp_read_barrier_depends(); /* Dependency order vs. p above. */ \
+	(_________p1); \
+})
+
 /* Ignore/forbid kprobes attach on very low level functions marked by this attribute: */
 #ifdef CONFIG_KPROBES
 # define __kprobes	__attribute__((__section__(".kprobes.text")))
diff -Nru linux-tools-3.16/include/uapi/linux/audit.h linux-tools-3.16.7-ckt20/include/uapi/linux/audit.h
--- linux-tools-3.16/include/uapi/linux/audit.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/audit.h	2015-11-18 10:08:46.000000000 +0000
@@ -363,7 +363,9 @@
 #define AUDIT_ARCH_PARISC	(EM_PARISC)
 #define AUDIT_ARCH_PARISC64	(EM_PARISC|__AUDIT_ARCH_64BIT)
 #define AUDIT_ARCH_PPC		(EM_PPC)
+/* do not define AUDIT_ARCH_PPCLE since it is not supported by audit */
 #define AUDIT_ARCH_PPC64	(EM_PPC64|__AUDIT_ARCH_64BIT)
+#define AUDIT_ARCH_PPC64LE	(EM_PPC64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
 #define AUDIT_ARCH_S390		(EM_S390)
 #define AUDIT_ARCH_S390X	(EM_S390|__AUDIT_ARCH_64BIT)
 #define AUDIT_ARCH_SH		(EM_SH)
diff -Nru linux-tools-3.16/include/uapi/linux/hyperv.h linux-tools-3.16.7-ckt20/include/uapi/linux/hyperv.h
--- linux-tools-3.16/include/uapi/linux/hyperv.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/hyperv.h	2015-11-18 10:08:46.000000000 +0000
@@ -134,10 +134,11 @@
 
 struct hv_do_fcopy {
 	struct hv_fcopy_hdr hdr;
+	__u32   pad;
 	__u64	offset;
 	__u32	size;
 	__u8	data[DATA_FRAGMENT];
-};
+} __attribute__((packed));
 
 /*
  * An implementation of HyperV key value pair (KVP) functionality for Linux.
diff -Nru linux-tools-3.16/include/uapi/linux/in6.h linux-tools-3.16.7-ckt20/include/uapi/linux/in6.h
--- linux-tools-3.16/include/uapi/linux/in6.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/in6.h	2015-11-18 10:08:46.000000000 +0000
@@ -149,7 +149,7 @@
 /*
  *	IPV6 socket options
  */
-
+#if __UAPI_DEF_IPV6_OPTIONS
 #define IPV6_ADDRFORM		1
 #define IPV6_2292PKTINFO	2
 #define IPV6_2292HOPOPTS	3
@@ -196,6 +196,7 @@
 
 #define IPV6_IPSEC_POLICY	34
 #define IPV6_XFRM_POLICY	35
+#endif
 
 /*
  * Multicast:
diff -Nru linux-tools-3.16/include/uapi/linux/input.h linux-tools-3.16.7-ckt20/include/uapi/linux/input.h
--- linux-tools-3.16/include/uapi/linux/input.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/input.h	2015-11-18 10:08:46.000000000 +0000
@@ -738,6 +738,13 @@
 #define KEY_BRIGHTNESS_MIN		0x250	/* Set Brightness to Minimum */
 #define KEY_BRIGHTNESS_MAX		0x251	/* Set Brightness to Maximum */
 
+#define KEY_KBDINPUTASSIST_PREV		0x260
+#define KEY_KBDINPUTASSIST_NEXT		0x261
+#define KEY_KBDINPUTASSIST_PREVGROUP		0x262
+#define KEY_KBDINPUTASSIST_NEXTGROUP		0x263
+#define KEY_KBDINPUTASSIST_ACCEPT		0x264
+#define KEY_KBDINPUTASSIST_CANCEL		0x265
+
 #define BTN_TRIGGER_HAPPY		0x2c0
 #define BTN_TRIGGER_HAPPY1		0x2c0
 #define BTN_TRIGGER_HAPPY2		0x2c1
diff -Nru linux-tools-3.16/include/uapi/linux/libc-compat.h linux-tools-3.16.7-ckt20/include/uapi/linux/libc-compat.h
--- linux-tools-3.16/include/uapi/linux/libc-compat.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/libc-compat.h	2015-11-18 10:08:46.000000000 +0000
@@ -69,6 +69,7 @@
 #define __UAPI_DEF_SOCKADDR_IN6		0
 #define __UAPI_DEF_IPV6_MREQ		0
 #define __UAPI_DEF_IPPROTO_V6		0
+#define __UAPI_DEF_IPV6_OPTIONS		0
 
 #else
 
@@ -82,6 +83,7 @@
 #define __UAPI_DEF_SOCKADDR_IN6		1
 #define __UAPI_DEF_IPV6_MREQ		1
 #define __UAPI_DEF_IPPROTO_V6		1
+#define __UAPI_DEF_IPV6_OPTIONS		1
 
 #endif /* _NETINET_IN_H */
 
@@ -103,6 +105,7 @@
 #define __UAPI_DEF_SOCKADDR_IN6		1
 #define __UAPI_DEF_IPV6_MREQ		1
 #define __UAPI_DEF_IPPROTO_V6		1
+#define __UAPI_DEF_IPV6_OPTIONS		1
 
 /* Definitions for xattr.h */
 #define __UAPI_DEF_XATTR		1
diff -Nru linux-tools-3.16/include/uapi/linux/netfilter/xt_bpf.h linux-tools-3.16.7-ckt20/include/uapi/linux/netfilter/xt_bpf.h
--- linux-tools-3.16/include/uapi/linux/netfilter/xt_bpf.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/netfilter/xt_bpf.h	2015-11-18 10:08:46.000000000 +0000
@@ -6,6 +6,8 @@
 
 #define XT_BPF_MAX_NUM_INSTR	64
 
+struct sk_filter;
+
 struct xt_bpf_info {
 	__u16 bpf_program_num_elem;
 	struct sock_filter bpf_program[XT_BPF_MAX_NUM_INSTR];
diff -Nru linux-tools-3.16/include/uapi/linux/pci_regs.h linux-tools-3.16.7-ckt20/include/uapi/linux/pci_regs.h
--- linux-tools-3.16/include/uapi/linux/pci_regs.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/pci_regs.h	2015-11-18 10:08:46.000000000 +0000
@@ -319,6 +319,7 @@
 #define PCI_MSIX_PBA		8	/* Pending Bit Array offset */
 #define  PCI_MSIX_PBA_BIR	0x00000007 /* BAR index */
 #define  PCI_MSIX_PBA_OFFSET	0xfffffff8 /* Offset into specified BAR */
+#define PCI_MSIX_FLAGS_BIRMASK	PCI_MSIX_PBA_BIR /* deprecated */
 #define PCI_CAP_MSIX_SIZEOF	12	/* size of MSIX registers */
 
 /* MSI-X Table entry format */
diff -Nru linux-tools-3.16/include/uapi/linux/usbdevice_fs.h linux-tools-3.16.7-ckt20/include/uapi/linux/usbdevice_fs.h
--- linux-tools-3.16/include/uapi/linux/usbdevice_fs.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/usbdevice_fs.h	2015-11-18 10:08:46.000000000 +0000
@@ -128,11 +128,12 @@
 	char port [127];	/* e.g. port 3 connects to device 27 */
 };
 
-/* Device capability flags */
+/* System and bus capability flags */
 #define USBDEVFS_CAP_ZERO_PACKET		0x01
 #define USBDEVFS_CAP_BULK_CONTINUATION		0x02
 #define USBDEVFS_CAP_NO_PACKET_SIZE_LIM		0x04
 #define USBDEVFS_CAP_BULK_SCATTER_GATHER	0x08
+#define USBDEVFS_CAP_REAP_AFTER_DISCONNECT	0x10
 
 /* USBDEVFS_DISCONNECT_CLAIM flags & struct */
 
diff -Nru linux-tools-3.16/include/uapi/linux/xattr.h linux-tools-3.16.7-ckt20/include/uapi/linux/xattr.h
--- linux-tools-3.16/include/uapi/linux/xattr.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/linux/xattr.h	2015-11-18 10:08:46.000000000 +0000
@@ -13,7 +13,7 @@
 #ifndef _UAPI_LINUX_XATTR_H
 #define _UAPI_LINUX_XATTR_H
 
-#ifdef __UAPI_DEF_XATTR
+#if __UAPI_DEF_XATTR
 #define __USE_KERNEL_XATTR_DEFS
 
 #define XATTR_CREATE	0x1	/* set value, fail if attr already exists */
diff -Nru linux-tools-3.16/include/uapi/rdma/rdma_user_cm.h linux-tools-3.16.7-ckt20/include/uapi/rdma/rdma_user_cm.h
--- linux-tools-3.16/include/uapi/rdma/rdma_user_cm.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/include/uapi/rdma/rdma_user_cm.h	2015-11-18 10:08:46.000000000 +0000
@@ -34,6 +34,7 @@
 #define RDMA_USER_CM_H
 
 #include <linux/types.h>
+#include <linux/socket.h>
 #include <linux/in6.h>
 #include <rdma/ib_user_verbs.h>
 #include <rdma/ib_user_sa.h>
diff -Nru linux-tools-3.16/Makefile linux-tools-3.16.7-ckt20/Makefile
--- linux-tools-3.16/Makefile	2014-08-24 01:53:13.000000000 +0100
+++ linux-tools-3.16.7-ckt20/Makefile	2015-11-22 19:27:08.000000000 +0000
@@ -1,8 +1,8 @@
 VERSION = 3
 PATCHLEVEL = 16
-SUBLEVEL = 0
-EXTRAVERSION =
-NAME = Shuffling Zombie Juror
+SUBLEVEL = 7
+EXTRAVERSION =-ckt20
+NAME = Museum of Fishiegoodies
 
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
@@ -303,7 +303,7 @@
 
 HOSTCC       = gcc
 HOSTCXX      = g++
-HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
+HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
 HOSTCXXFLAGS = -O2
 
 ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
@@ -406,7 +406,8 @@
 KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
 		   -fno-strict-aliasing -fno-common \
 		   -Werror-implicit-function-declaration \
-		   -Wno-format-security
+		   -Wno-format-security \
+		   -std=gnu89
 
 KBUILD_AFLAGS_KERNEL :=
 KBUILD_CFLAGS_KERNEL :=
@@ -754,10 +755,11 @@
 
 include $(srctree)/scripts/Makefile.extrawarn
 
-# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
-KBUILD_CPPFLAGS += $(KCPPFLAGS)
-KBUILD_AFLAGS += $(KAFLAGS)
-KBUILD_CFLAGS += $(KCFLAGS)
+# Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
+# last assignments
+KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS)
+KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(KAFLAGS)
+KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS)
 
 # Use --build-id when available.
 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
diff -Nru linux-tools-3.16/scripts/kconfig/menu.c linux-tools-3.16.7-ckt20/scripts/kconfig/menu.c
--- linux-tools-3.16/scripts/kconfig/menu.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/kconfig/menu.c	2015-11-18 10:08:46.000000000 +0000
@@ -548,7 +548,7 @@
 {
 	int i, j;
 	struct menu *submenu[8], *menu, *location = NULL;
-	struct jump_key *jump;
+	struct jump_key *jump = NULL;
 
 	str_printf(r, _("Prompt: %s\n"), _(prop->text));
 	menu = prop->menu->parent;
@@ -586,7 +586,7 @@
 		str_printf(r, _("  Location:\n"));
 		for (j = 4; --i >= 0; j += 2) {
 			menu = submenu[i];
-			if (head && location && menu == location)
+			if (jump && menu == location)
 				jump->offset = strlen(r->s);
 			str_printf(r, "%*c-> %s", j, ' ',
 				   _(menu_get_prompt(menu)));
diff -Nru linux-tools-3.16/scripts/kconfig/streamline_config.pl linux-tools-3.16.7-ckt20/scripts/kconfig/streamline_config.pl
--- linux-tools-3.16/scripts/kconfig/streamline_config.pl	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/kconfig/streamline_config.pl	2015-11-18 10:08:46.000000000 +0000
@@ -137,7 +137,7 @@
 my $kconfig = $ARGV[1];
 my $lsmod_file = $ENV{'LSMOD'};
 
-my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
+my @makefiles = `find $ksource -name Makefile -or -name Kbuild 2>/dev/null`;
 chomp @makefiles;
 
 my %depends;
diff -Nru linux-tools-3.16/scripts/kernel-doc linux-tools-3.16.7-ckt20/scripts/kernel-doc
--- linux-tools-3.16/scripts/kernel-doc	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/kernel-doc	2015-11-18 10:08:46.000000000 +0000
@@ -1753,7 +1753,7 @@
 	# strip kmemcheck_bitfield_{begin,end}.*;
 	$members =~ s/kmemcheck_bitfield_.*?;//gos;
 	# strip attributes
-	$members =~ s/__aligned\s*\(.+\)//gos;
+	$members =~ s/__aligned\s*\([^;]*\)//gos;
 
 	create_parameterlist($members, ';', $file);
 	check_sections($file, $declaration_name, "struct", $sectcheck, $struct_actual, $nested);
diff -Nru linux-tools-3.16/scripts/Makefile.clean linux-tools-3.16.7-ckt20/scripts/Makefile.clean
--- linux-tools-3.16/scripts/Makefile.clean	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/Makefile.clean	2015-11-18 10:08:46.000000000 +0000
@@ -47,19 +47,19 @@
 
 __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
 
-# as clean-files is given relative to the current directory, this adds
-# a $(obj) prefix, except for absolute paths
+# clean-files is given relative to the current directory, unless it
+# starts with $(objtree)/ (which means "./", so do not add "./" unless
+# you want to delete a file from the toplevel object directory).
 
 __clean-files   := $(wildcard                                               \
-                   $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \
-		   $(filter /%, $(__clean-files)))
+		   $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \
+		   $(filter $(objtree)/%, $(__clean-files)))
 
-# as clean-dirs is given relative to the current directory, this adds
-# a $(obj) prefix, except for absolute paths
+# same as clean-files
 
 __clean-dirs    := $(wildcard                                               \
-                   $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs)))    \
-		   $(filter /%, $(clean-dirs)))
+		   $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs)))    \
+		   $(filter $(objtree)/%, $(clean-dirs)))
 
 # ==========================================================================
 
diff -Nru linux-tools-3.16/scripts/package/builddeb linux-tools-3.16.7-ckt20/scripts/package/builddeb
--- linux-tools-3.16/scripts/package/builddeb	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/package/builddeb	2015-11-18 10:08:46.000000000 +0000
@@ -152,18 +152,16 @@
 		rmdir "$tmpdir/lib/modules/$version"
 	fi
 	if [ -n "$BUILD_DEBUG" ] ; then
-		(
-			cd $tmpdir
-			for module in $(find lib/modules/ -name *.ko); do
-				mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
-				# only keep debug symbols in the debug file
-				$OBJCOPY --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
-				# strip original module from debug symbols
-				$OBJCOPY --strip-debug $module
-				# then add a link to those
-				$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
-			done
-		)
+		for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
+			module=lib/modules/$module
+			mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
+			# only keep debug symbols in the debug file
+			$OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
+			# strip original module from debug symbols
+			$OBJCOPY --strip-debug $tmpdir/$module
+			# then add a link to those
+			$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
+		done
 	fi
 fi
 
diff -Nru linux-tools-3.16/scripts/recordmcount.pl linux-tools-3.16.7-ckt20/scripts/recordmcount.pl
--- linux-tools-3.16/scripts/recordmcount.pl	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/recordmcount.pl	2015-11-18 10:08:46.000000000 +0000
@@ -262,7 +262,6 @@
     # force flags for this arch
     $ld .= " -m shlelf_linux";
     $objcopy .= " -O elf32-sh-linux";
-    $cc .= " -m32";
 
 } elsif ($arch eq "powerpc") {
     $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)";
diff -Nru linux-tools-3.16/scripts/sortextable.h linux-tools-3.16.7-ckt20/scripts/sortextable.h
--- linux-tools-3.16/scripts/sortextable.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/scripts/sortextable.h	2015-11-18 10:08:46.000000000 +0000
@@ -103,7 +103,7 @@
 	Elf_Sym *sort_needed_sym;
 	Elf_Shdr *sort_needed_sec;
 	Elf_Rel *relocs = NULL;
-	int relocs_size;
+	int relocs_size = 0;
 	uint32_t *sort_done_location;
 	const char *secstrtab;
 	const char *strtab;
diff -Nru linux-tools-3.16/tools/lib/traceevent/event-parse.c linux-tools-3.16.7-ckt20/tools/lib/traceevent/event-parse.c
--- linux-tools-3.16/tools/lib/traceevent/event-parse.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/lib/traceevent/event-parse.c	2015-11-18 10:08:46.000000000 +0000
@@ -3658,7 +3658,7 @@
 	struct format_field *field;
 	struct printk_map *printk;
 	unsigned long long val, fval;
-	unsigned long addr;
+	unsigned long long addr;
 	char *str;
 	unsigned char *hex;
 	int print;
@@ -3691,13 +3691,30 @@
 		 */
 		if (!(field->flags & FIELD_IS_ARRAY) &&
 		    field->size == pevent->long_size) {
-			addr = *(unsigned long *)(data + field->offset);
+
+			/* Handle heterogeneous recording and processing
+			 * architectures
+			 *
+			 * CASE I:
+			 * Traces recorded on 32-bit devices (32-bit
+			 * addressing) and processed on 64-bit devices:
+			 * In this case, only 32 bits should be read.
+			 *
+			 * CASE II:
+			 * Traces recorded on 64 bit devices and processed
+			 * on 32-bit devices:
+			 * In this case, 64 bits must be read.
+			 */
+			addr = (pevent->long_size == 8) ?
+				*(unsigned long long *)(data + field->offset) :
+				(unsigned long long)*(unsigned int *)(data + field->offset);
+
 			/* Check if it matches a print format */
 			printk = find_printk(pevent, addr);
 			if (printk)
 				trace_seq_puts(s, printk->printk);
 			else
-				trace_seq_printf(s, "%lx", addr);
+				trace_seq_printf(s, "%llx", addr);
 			break;
 		}
 		str = malloc(len + 1);
diff -Nru linux-tools-3.16/tools/lib/traceevent/kbuffer-parse.c linux-tools-3.16.7-ckt20/tools/lib/traceevent/kbuffer-parse.c
--- linux-tools-3.16/tools/lib/traceevent/kbuffer-parse.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/lib/traceevent/kbuffer-parse.c	2015-11-18 10:08:46.000000000 +0000
@@ -372,7 +372,6 @@
 	switch (type_len) {
 	case KBUFFER_TYPE_PADDING:
 		*length = read_4(kbuf, data);
-		data += *length;
 		break;
 
 	case KBUFFER_TYPE_TIME_EXTEND:
diff -Nru linux-tools-3.16/tools/perf/builtin-stat.c linux-tools-3.16.7-ckt20/tools/perf/builtin-stat.c
--- linux-tools-3.16/tools/perf/builtin-stat.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/builtin-stat.c	2015-11-18 10:08:46.000000000 +0000
@@ -1115,7 +1115,7 @@
 static void print_aggr(char *prefix)
 {
 	struct perf_evsel *counter;
-	int cpu, cpu2, s, s2, id, nr;
+	int cpu, s, s2, id, nr;
 	double uval;
 	u64 ena, run, val;
 
@@ -1128,8 +1128,7 @@
 			val = ena = run = 0;
 			nr = 0;
 			for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
-				cpu2 = perf_evsel__cpus(counter)->map[cpu];
-				s2 = aggr_get_id(evsel_list->cpus, cpu2);
+				s2 = aggr_get_id(perf_evsel__cpus(counter), cpu);
 				if (s2 != id)
 					continue;
 				val += counter->counts->cpu[cpu].val;
diff -Nru linux-tools-3.16/tools/perf/ui/browsers/hists.c linux-tools-3.16.7-ckt20/tools/perf/ui/browsers/hists.c
--- linux-tools-3.16/tools/perf/ui/browsers/hists.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/ui/browsers/hists.c	2015-11-18 10:08:46.000000000 +0000
@@ -42,7 +42,7 @@
 
 static bool hist_browser__has_filter(struct hist_browser *hb)
 {
-	return hists__has_filter(hb->hists) || hb->min_pcnt;
+	return hists__has_filter(hb->hists) || hb->min_pcnt || symbol_conf.has_filter;
 }
 
 static u32 hist_browser__nr_entries(struct hist_browser *hb)
diff -Nru linux-tools-3.16/tools/perf/util/header.c linux-tools-3.16.7-ckt20/tools/perf/util/header.c
--- linux-tools-3.16/tools/perf/util/header.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/header.c	2015-11-18 10:08:46.000000000 +0000
@@ -1715,7 +1715,7 @@
 	if (ph->needs_swap)
 		nr = bswap_32(nr);
 
-	ph->env.nr_cpus_online = nr;
+	ph->env.nr_cpus_avail = nr;
 
 	ret = readn(fd, &nr, sizeof(nr));
 	if (ret != sizeof(nr))
@@ -1724,7 +1724,7 @@
 	if (ph->needs_swap)
 		nr = bswap_32(nr);
 
-	ph->env.nr_cpus_avail = nr;
+	ph->env.nr_cpus_online = nr;
 	return 0;
 }
 
diff -Nru linux-tools-3.16/tools/perf/util/hist.c linux-tools-3.16.7-ckt20/tools/perf/util/hist.c
--- linux-tools-3.16/tools/perf/util/hist.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/hist.c	2015-11-18 10:08:46.000000000 +0000
@@ -156,6 +156,9 @@
 	hists__new_col_len(hists, HISTC_LOCAL_WEIGHT, 12);
 	hists__new_col_len(hists, HISTC_GLOBAL_WEIGHT, 12);
 
+	if (h->srcline)
+		hists__new_col_len(hists, HISTC_SRCLINE, strlen(h->srcline));
+
 	if (h->transaction)
 		hists__new_col_len(hists, HISTC_TRANSACTION,
 				   hist_entry__transaction_len());
diff -Nru linux-tools-3.16/tools/perf/util/hist.h linux-tools-3.16.7-ckt20/tools/perf/util/hist.h
--- linux-tools-3.16/tools/perf/util/hist.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/hist.h	2015-11-18 10:08:46.000000000 +0000
@@ -47,6 +47,7 @@
 	u32 nr_invalid_chains;
 	u32 nr_unknown_id;
 	u32 nr_unprocessable_samples;
+	u32 nr_unordered_events;
 };
 
 enum hist_column {
diff -Nru linux-tools-3.16/tools/perf/util/session.c linux-tools-3.16.7-ckt20/tools/perf/util/session.c
--- linux-tools-3.16/tools/perf/util/session.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/session.c	2015-11-18 10:08:46.000000000 +0000
@@ -638,8 +638,7 @@
 		return -ETIME;
 
 	if (timestamp < s->ordered_samples.last_flush) {
-		printf("Warning: Timestamp below last timeslice flush\n");
-		return -EINVAL;
+		s->stats.nr_unordered_events++;
 	}
 
 	if (!list_empty(sc)) {
@@ -1136,6 +1135,9 @@
 			    "Do you have a KVM guest running and not using 'perf kvm'?\n",
 			    session->stats.nr_unprocessable_samples);
 	}
+
+	if (session->stats.nr_unordered_events != 0)
+		ui__warning("%u out of order events recorded.\n", session->stats.nr_unordered_events);
 }
 
 volatile int session_done;
diff -Nru linux-tools-3.16/tools/perf/util/symbol.c linux-tools-3.16.7-ckt20/tools/perf/util/symbol.c
--- linux-tools-3.16/tools/perf/util/symbol.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/symbol.c	2015-11-18 10:08:46.000000000 +0000
@@ -1786,6 +1786,8 @@
 		pr_err("problems parsing %s list\n", list_name);
 		return -1;
 	}
+
+	symbol_conf.has_filter = true;
 	return 0;
 }
 
diff -Nru linux-tools-3.16/tools/perf/util/symbol-elf.c linux-tools-3.16.7-ckt20/tools/perf/util/symbol-elf.c
--- linux-tools-3.16/tools/perf/util/symbol-elf.c	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/symbol-elf.c	2015-11-18 10:08:46.000000000 +0000
@@ -1104,8 +1104,6 @@
 static int kcore__init(struct kcore *kcore, char *filename, int elfclass,
 		       bool temp)
 {
-	GElf_Ehdr *ehdr;
-
 	kcore->elfclass = elfclass;
 
 	if (temp)
@@ -1122,9 +1120,7 @@
 	if (!gelf_newehdr(kcore->elf, elfclass))
 		goto out_end;
 
-	ehdr = gelf_getehdr(kcore->elf, &kcore->ehdr);
-	if (!ehdr)
-		goto out_end;
+	memset(&kcore->ehdr, 0, sizeof(GElf_Ehdr));
 
 	return 0;
 
@@ -1181,23 +1177,18 @@
 static int kcore__add_phdr(struct kcore *kcore, int idx, off_t offset,
 			   u64 addr, u64 len)
 {
-	GElf_Phdr gphdr;
-	GElf_Phdr *phdr;
-
-	phdr = gelf_getphdr(kcore->elf, idx, &gphdr);
-	if (!phdr)
-		return -1;
-
-	phdr->p_type	= PT_LOAD;
-	phdr->p_flags	= PF_R | PF_W | PF_X;
-	phdr->p_offset	= offset;
-	phdr->p_vaddr	= addr;
-	phdr->p_paddr	= 0;
-	phdr->p_filesz	= len;
-	phdr->p_memsz	= len;
-	phdr->p_align	= page_size;
+	GElf_Phdr phdr = {
+		.p_type		= PT_LOAD,
+		.p_flags	= PF_R | PF_W | PF_X,
+		.p_offset	= offset,
+		.p_vaddr	= addr,
+		.p_paddr	= 0,
+		.p_filesz	= len,
+		.p_memsz	= len,
+		.p_align	= page_size,
+	};
 
-	if (!gelf_update_phdr(kcore->elf, idx, phdr))
+	if (!gelf_update_phdr(kcore->elf, idx, &phdr))
 		return -1;
 
 	return 0;
diff -Nru linux-tools-3.16/tools/perf/util/symbol.h linux-tools-3.16.7-ckt20/tools/perf/util/symbol.h
--- linux-tools-3.16/tools/perf/util/symbol.h	2014-08-03 23:25:02.000000000 +0100
+++ linux-tools-3.16.7-ckt20/tools/perf/util/symbol.h	2015-11-18 10:08:46.000000000 +0000
@@ -118,7 +118,8 @@
 			annotate_src,
 			event_group,
 			demangle,
-			filter_relative;
+			filter_relative,
+			has_filter;
 	const char	*vmlinux_name,
 			*kallsyms_name,
 			*source_prefix,
--- END ---

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: i386 (x86_64)
Foreign Architectures: amd64

Kernel: Linux 4.2.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

--- End Message ---
--- Begin Message ---
Version: 8.3

Hi,

The updates referred to in these bugs were included in today's 8.3
Jessie point release.

Regards,

Adam

--- End Message ---

Reply to: