This is the 4.4.117 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAlqO124ACgkQONu9yGCS aT6nuxAA1X5s4WZ9q6rth4motnyeP1NKaMjjUXJ8JfF4wqEO/RteuYB5gkVFM0zN WwykxB+WwsBACNujQWJi2fv7cHmv6DquwuEedgLfwUENGZk7sgvjsSH6fi1Ekghn XSE/6z5E0Ho/nG2fpn/JoY2MNI6dr147t1co2K3Qd/Fleu1qL0AR7ngUhMBo4Iz+ ufKuxuokRS0uZKriaasjXOkX39rrX5YqFn6Fj5fHoXUtsl4UT7hZ0HG6pkM3mAuv M0IIqImrv8e9KKVXsQIj3cDdU/jjKFn/Cv1Ge1UAEXAAGbrZHFpP7/ayYgWnMUYY Dk2+hHRiDDTJqM4jWMHCJY/hshYgiVpapGeu5zbQhAm2tHNRk+2khHmibdhksCSu HcjUVsQbX480Jw0qGj3RHF3+em2a8fNI6KI+LNcOWjPVSz1AsJS5qRNFbs3hXFfa DsmJ9129brEM0UAzolan2SuBzxlg6py2bITgB9NhFpEOnIi+HNWW53wKF/tLb2cJ gu8/P25osK21ZeI2FTV5A4VQgeKZEkPQ1uz/nqAEAetRDy7GYj+vKUybTQeMra/e xEwQ0HW41uSxpgccfXv5Vsdr/kZMzlKADwfjacHjQ+oT6YPT/isgxT1vhWF+YgJg cl0ulNKB/R+CCx7ac4u7XRjTyjbyR7ZUh9vKUAw0o3NZ4XG/o9Y= =917Z -----END PGP SIGNATURE----- Merge 4.4.117 into android-4.4 Changes in 4.4.117 IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports PM / devfreq: Propagate error from devfreq_add_device() s390: fix handling of -1 in set{,fs}[gu]id16 syscalls ARM: dts: STi: Add gpio polarity for "hdmi,hpd-gpio" property arm: spear600: Add missing interrupt-parent of rtc arm: spear13xx: Fix dmas cells arm: spear13xx: Fix spics gpio controller's warning ALSA: seq: Fix regression by incorrect ioctl_mutex usages KVM/x86: Reduce retpoline performance impact in slot_handle_level_range(), by always inlining iterator helper methods x86/cpu: Change type of x86_cache_size variable to unsigned int drm/radeon: adjust tested variable rtc-opal: Fix handling of firmware error codes, prevent busy loops ext4: save error to disk in __ext4_grp_locked_error() ext4: correct documentation for grpid mount option mm: hide a #warning for COMPILE_TEST video: fbdev: atmel_lcdfb: fix display-timings lookup console/dummy: leave .con_font_get set to NULL rtlwifi: rtl8821ae: Fix connection lost problem correctly Btrfs: fix deadlock in run_delalloc_nocow Btrfs: fix crash due to not cleaning up tree log block's dirty bits Btrfs: fix unexpected -EEXIST when creating new inode ALSA: hda - Fix headset mic detection problem for two Dell machines ALSA: usb-audio: Fix UAC2 get_ctl request with a RANGE attribute ALSA: hda/realtek: PCI quirk for Fujitsu U7x7 ALSA: usb-audio: add implicit fb quirk for Behringer UFX1204 ALSA: seq: Fix racy pool initializations mvpp2: fix multicast address filter dm: correctly handle chained bios in dec_pending() x86: fix build warnign with 32-bit PAE vfs: don't do RCU lookup of empty pathnames ARM: pxa/tosa-bt: add MODULE_LICENSE tag ARM: dts: s5pv210: add interrupt-parent for ohci media: r820t: fix r820t_write_reg for KASAN Linux 4.4.117 Change-Id: Id192d691d19a99889dc5d36711f18576f48f2981 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
4ec3656576
39 changed files with 180 additions and 70 deletions
|
@ -58,6 +58,6 @@ Example:
|
||||||
interrupts = <0 35 0x4>;
|
interrupts = <0 35 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
dmas = <&dmahost 12 0 1>,
|
dmas = <&dmahost 12 0 1>,
|
||||||
<&dmahost 13 0 1 0>;
|
<&dmahost 13 1 0>;
|
||||||
dma-names = "rx", "rx";
|
dma-names = "rx", "rx";
|
||||||
};
|
};
|
||||||
|
|
|
@ -233,7 +233,7 @@ data_err=ignore(*) Just print an error message if an error occurs
|
||||||
data_err=abort Abort the journal if an error occurs in a file
|
data_err=abort Abort the journal if an error occurs in a file
|
||||||
data buffer in ordered mode.
|
data buffer in ordered mode.
|
||||||
|
|
||||||
grpid Give objects the same group ID as their creator.
|
grpid New objects have the group ID of their parent.
|
||||||
bsdgroups
|
bsdgroups
|
||||||
|
|
||||||
nogrpid (*) New objects have the group ID of their creator.
|
nogrpid (*) New objects have the group ID of their creator.
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 116
|
SUBLEVEL = 117
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Blurry Fish Butt
|
NAME = Blurry Fish Butt
|
||||||
|
|
||||||
|
|
|
@ -461,6 +461,7 @@
|
||||||
compatible = "samsung,exynos4210-ohci";
|
compatible = "samsung,exynos4210-ohci";
|
||||||
reg = <0xec300000 0x100>;
|
reg = <0xec300000 0x100>;
|
||||||
interrupts = <23>;
|
interrupts = <23>;
|
||||||
|
interrupt-parent = <&vic1>;
|
||||||
clocks = <&clocks CLK_USB_HOST>;
|
clocks = <&clocks CLK_USB_HOST>;
|
||||||
clock-names = "usbhost";
|
clock-names = "usbhost";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
|
|
|
@ -349,7 +349,7 @@
|
||||||
spi0: spi@e0100000 {
|
spi0: spi@e0100000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
num-cs = <3>;
|
num-cs = <3>;
|
||||||
cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>;
|
cs-gpios = <&gpio1 7 0>, <&spics 0 0>, <&spics 1 0>;
|
||||||
|
|
||||||
stmpe610@0 {
|
stmpe610@0 {
|
||||||
compatible = "st,stmpe610";
|
compatible = "st,stmpe610";
|
||||||
|
|
|
@ -141,8 +141,8 @@
|
||||||
reg = <0xb4100000 0x1000>;
|
reg = <0xb4100000 0x1000>;
|
||||||
interrupts = <0 105 0x4>;
|
interrupts = <0 105 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
dmas = <&dwdma0 0x600 0 0 1>, /* 0xC << 11 */
|
dmas = <&dwdma0 12 0 1>,
|
||||||
<&dwdma0 0x680 0 1 0>; /* 0xD << 7 */
|
<&dwdma0 13 1 0>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@
|
||||||
reg = <0xb2800000 0x1000>;
|
reg = <0xb2800000 0x1000>;
|
||||||
interrupts = <0 29 0x4>;
|
interrupts = <0 29 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
dmas = <&dwdma0 0 0 0 0>;
|
dmas = <&dwdma0 0 0 0>;
|
||||||
dma-names = "data";
|
dma-names = "data";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -288,8 +288,8 @@
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
interrupts = <0 31 0x4>;
|
interrupts = <0 31 0x4>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
dmas = <&dwdma0 0x2000 0 0 0>, /* 0x4 << 11 */
|
dmas = <&dwdma0 4 0 0>,
|
||||||
<&dwdma0 0x0280 0 0 0>; /* 0x5 << 7 */
|
<&dwdma0 5 0 0>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -194,6 +194,7 @@
|
||||||
rtc@fc900000 {
|
rtc@fc900000 {
|
||||||
compatible = "st,spear600-rtc";
|
compatible = "st,spear600-rtc";
|
||||||
reg = <0xfc900000 0x1000>;
|
reg = <0xfc900000 0x1000>;
|
||||||
|
interrupt-parent = <&vic0>;
|
||||||
interrupts = <10>;
|
interrupts = <10>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
#include "stih407-clock.dtsi"
|
#include "stih407-clock.dtsi"
|
||||||
#include "stih407-family.dtsi"
|
#include "stih407-family.dtsi"
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
/ {
|
/ {
|
||||||
soc {
|
soc {
|
||||||
sti-display-subsystem {
|
sti-display-subsystem {
|
||||||
|
@ -112,7 +113,7 @@
|
||||||
<&clk_s_d2_quadfs 0>,
|
<&clk_s_d2_quadfs 0>,
|
||||||
<&clk_s_d2_quadfs 1>;
|
<&clk_s_d2_quadfs 1>;
|
||||||
|
|
||||||
hdmi,hpd-gpio = <&pio5 3>;
|
hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
|
||||||
reset-names = "hdmi";
|
reset-names = "hdmi";
|
||||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||||
ddc = <&hdmiddc>;
|
ddc = <&hdmiddc>;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "stih410-clock.dtsi"
|
#include "stih410-clock.dtsi"
|
||||||
#include "stih407-family.dtsi"
|
#include "stih407-family.dtsi"
|
||||||
#include "stih410-pinctrl.dtsi"
|
#include "stih410-pinctrl.dtsi"
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
/ {
|
/ {
|
||||||
aliases {
|
aliases {
|
||||||
bdisp0 = &bdisp0;
|
bdisp0 = &bdisp0;
|
||||||
|
@ -203,7 +204,7 @@
|
||||||
<&clk_s_d2_quadfs 0>,
|
<&clk_s_d2_quadfs 0>,
|
||||||
<&clk_s_d2_quadfs 1>;
|
<&clk_s_d2_quadfs 1>;
|
||||||
|
|
||||||
hdmi,hpd-gpio = <&pio5 3>;
|
hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
|
||||||
reset-names = "hdmi";
|
reset-names = "hdmi";
|
||||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||||
ddc = <&hdmiddc>;
|
ddc = <&hdmiddc>;
|
||||||
|
|
|
@ -132,3 +132,7 @@ static struct platform_driver tosa_bt_driver = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
module_platform_driver(tosa_bt_driver);
|
module_platform_driver(tosa_bt_driver);
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_AUTHOR("Dmitry Baryshkov");
|
||||||
|
MODULE_DESCRIPTION("Bluetooth built-in chip control");
|
||||||
|
|
|
@ -110,7 +110,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setregid16, u16, rgid, u16, egid)
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid)
|
COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid)
|
||||||
{
|
{
|
||||||
return sys_setgid((gid_t)gid);
|
return sys_setgid(low2highgid(gid));
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
|
COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
|
||||||
|
@ -120,7 +120,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid)
|
COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid)
|
||||||
{
|
{
|
||||||
return sys_setuid((uid_t)uid);
|
return sys_setuid(low2highuid(uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid)
|
COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid)
|
||||||
|
@ -173,12 +173,12 @@ COMPAT_SYSCALL_DEFINE3(s390_getresgid16, u16 __user *, rgidp,
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid)
|
COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid)
|
||||||
{
|
{
|
||||||
return sys_setfsuid((uid_t)uid);
|
return sys_setfsuid(low2highuid(uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid)
|
COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid)
|
||||||
{
|
{
|
||||||
return sys_setfsgid((gid_t)gid);
|
return sys_setfsgid(low2highgid(gid));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
|
static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
|
||||||
|
|
|
@ -113,7 +113,7 @@ struct cpuinfo_x86 {
|
||||||
char x86_vendor_id[16];
|
char x86_vendor_id[16];
|
||||||
char x86_model_id[64];
|
char x86_model_id[64];
|
||||||
/* in KB - valid for CPUS which support this call: */
|
/* in KB - valid for CPUS which support this call: */
|
||||||
int x86_cache_size;
|
unsigned int x86_cache_size;
|
||||||
int x86_cache_alignment; /* In bytes */
|
int x86_cache_alignment; /* In bytes */
|
||||||
/* Cache QoS architectural values: */
|
/* Cache QoS architectural values: */
|
||||||
int x86_cache_max_rmid; /* max index */
|
int x86_cache_max_rmid; /* max index */
|
||||||
|
|
|
@ -955,7 +955,7 @@ static void identify_cpu(struct cpuinfo_x86 *c)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
c->loops_per_jiffy = loops_per_jiffy;
|
c->loops_per_jiffy = loops_per_jiffy;
|
||||||
c->x86_cache_size = -1;
|
c->x86_cache_size = 0;
|
||||||
c->x86_vendor = X86_VENDOR_UNKNOWN;
|
c->x86_vendor = X86_VENDOR_UNKNOWN;
|
||||||
c->x86_model = c->x86_mask = 0; /* So far unknown... */
|
c->x86_model = c->x86_mask = 0; /* So far unknown... */
|
||||||
c->x86_vendor_id[0] = '\0'; /* Unset */
|
c->x86_vendor_id[0] = '\0'; /* Unset */
|
||||||
|
|
|
@ -1075,7 +1075,7 @@ static struct microcode_ops microcode_intel_ops = {
|
||||||
|
|
||||||
static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
|
static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
|
||||||
{
|
{
|
||||||
u64 llc_size = c->x86_cache_size * 1024;
|
u64 llc_size = c->x86_cache_size * 1024ULL;
|
||||||
|
|
||||||
do_div(llc_size, c->x86_max_cores);
|
do_div(llc_size, c->x86_max_cores);
|
||||||
|
|
||||||
|
|
|
@ -87,8 +87,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cache size */
|
/* Cache size */
|
||||||
if (c->x86_cache_size >= 0)
|
if (c->x86_cache_size)
|
||||||
seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
|
seq_printf(m, "cache size\t: %u KB\n", c->x86_cache_size);
|
||||||
|
|
||||||
show_cpuinfo_core(m, c, cpu);
|
show_cpuinfo_core(m, c, cpu);
|
||||||
show_cpuinfo_misc(m, c);
|
show_cpuinfo_misc(m, c);
|
||||||
|
|
|
@ -4503,7 +4503,7 @@ void kvm_mmu_setup(struct kvm_vcpu *vcpu)
|
||||||
typedef bool (*slot_level_handler) (struct kvm *kvm, unsigned long *rmap);
|
typedef bool (*slot_level_handler) (struct kvm *kvm, unsigned long *rmap);
|
||||||
|
|
||||||
/* The caller should hold mmu-lock before calling this function. */
|
/* The caller should hold mmu-lock before calling this function. */
|
||||||
static bool
|
static __always_inline bool
|
||||||
slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
slot_level_handler fn, int start_level, int end_level,
|
slot_level_handler fn, int start_level, int end_level,
|
||||||
gfn_t start_gfn, gfn_t end_gfn, bool lock_flush_tlb)
|
gfn_t start_gfn, gfn_t end_gfn, bool lock_flush_tlb)
|
||||||
|
@ -4533,7 +4533,7 @@ slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
return flush;
|
return flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static __always_inline bool
|
||||||
slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
slot_level_handler fn, int start_level, int end_level,
|
slot_level_handler fn, int start_level, int end_level,
|
||||||
bool lock_flush_tlb)
|
bool lock_flush_tlb)
|
||||||
|
@ -4544,7 +4544,7 @@ slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
lock_flush_tlb);
|
lock_flush_tlb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static __always_inline bool
|
||||||
slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
slot_level_handler fn, bool lock_flush_tlb)
|
slot_level_handler fn, bool lock_flush_tlb)
|
||||||
{
|
{
|
||||||
|
@ -4552,7 +4552,7 @@ slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static __always_inline bool
|
||||||
slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
slot_level_handler fn, bool lock_flush_tlb)
|
slot_level_handler fn, bool lock_flush_tlb)
|
||||||
{
|
{
|
||||||
|
@ -4560,7 +4560,7 @@ slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static __always_inline bool
|
||||||
slot_handle_leaf(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
slot_handle_leaf(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||||
slot_level_handler fn, bool lock_flush_tlb)
|
slot_level_handler fn, bool lock_flush_tlb)
|
||||||
{
|
{
|
||||||
|
|
|
@ -583,7 +583,7 @@ struct devfreq *devm_devfreq_add_device(struct device *dev,
|
||||||
devfreq = devfreq_add_device(dev, profile, governor_name, data);
|
devfreq = devfreq_add_device(dev, profile, governor_name, data);
|
||||||
if (IS_ERR(devfreq)) {
|
if (IS_ERR(devfreq)) {
|
||||||
devres_free(ptr);
|
devres_free(ptr);
|
||||||
return ERR_PTR(-ENOMEM);
|
return devfreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ptr = devfreq;
|
*ptr = devfreq;
|
||||||
|
|
|
@ -946,7 +946,7 @@ int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
|
||||||
/* calc dclk divider with current vco freq */
|
/* calc dclk divider with current vco freq */
|
||||||
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
||||||
pd_min, pd_even);
|
pd_min, pd_even);
|
||||||
if (vclk_div > pd_max)
|
if (dclk_div > pd_max)
|
||||||
break; /* vco is too big, it has to stop */
|
break; /* vco is too big, it has to stop */
|
||||||
|
|
||||||
/* calc score with current vco freq */
|
/* calc score with current vco freq */
|
||||||
|
|
|
@ -2483,9 +2483,8 @@ err_steer_free_bitmap:
|
||||||
kfree(ibdev->ib_uc_qpns_bitmap);
|
kfree(ibdev->ib_uc_qpns_bitmap);
|
||||||
|
|
||||||
err_steer_qp_release:
|
err_steer_qp_release:
|
||||||
if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED)
|
mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||||
mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
ibdev->steer_qpn_count);
|
||||||
ibdev->steer_qpn_count);
|
|
||||||
err_counter:
|
err_counter:
|
||||||
for (i = 0; i < ibdev->num_ports; ++i)
|
for (i = 0; i < ibdev->num_ports; ++i)
|
||||||
mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[i]);
|
mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[i]);
|
||||||
|
@ -2586,11 +2585,9 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
|
||||||
ibdev->iboe.nb.notifier_call = NULL;
|
ibdev->iboe.nb.notifier_call = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED) {
|
mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||||
mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
ibdev->steer_qpn_count);
|
||||||
ibdev->steer_qpn_count);
|
kfree(ibdev->ib_uc_qpns_bitmap);
|
||||||
kfree(ibdev->ib_uc_qpns_bitmap);
|
|
||||||
}
|
|
||||||
|
|
||||||
iounmap(ibdev->uar_map);
|
iounmap(ibdev->uar_map);
|
||||||
for (p = 0; p < ibdev->num_ports; ++p)
|
for (p = 0; p < ibdev->num_ports; ++p)
|
||||||
|
|
|
@ -974,7 +974,8 @@ static void dec_pending(struct dm_io *io, int error)
|
||||||
} else {
|
} else {
|
||||||
/* done with normal IO or empty flush */
|
/* done with normal IO or empty flush */
|
||||||
trace_block_bio_complete(md->queue, bio, io_error);
|
trace_block_bio_complete(md->queue, bio, io_error);
|
||||||
bio->bi_error = io_error;
|
if (io_error)
|
||||||
|
bio->bi_error = io_error;
|
||||||
bio_endio(bio);
|
bio_endio(bio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -410,9 +410,11 @@ static int r820t_write(struct r820t_priv *priv, u8 reg, const u8 *val,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
|
static inline int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
|
||||||
{
|
{
|
||||||
return r820t_write(priv, reg, &val, 1);
|
u8 tmp = val; /* work around GCC PR81715 with asan-stack=1 */
|
||||||
|
|
||||||
|
return r820t_write(priv, reg, &tmp, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
|
static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
|
||||||
|
@ -425,17 +427,18 @@ static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
|
static inline int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
|
||||||
u8 bit_mask)
|
u8 bit_mask)
|
||||||
{
|
{
|
||||||
|
u8 tmp = val;
|
||||||
int rc = r820t_read_cache_reg(priv, reg);
|
int rc = r820t_read_cache_reg(priv, reg);
|
||||||
|
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
val = (rc & ~bit_mask) | (val & bit_mask);
|
tmp = (rc & ~bit_mask) | (tmp & bit_mask);
|
||||||
|
|
||||||
return r820t_write(priv, reg, &val, 1);
|
return r820t_write(priv, reg, &tmp, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int r820t_read(struct r820t_priv *priv, u8 reg, u8 *val, int len)
|
static int r820t_read(struct r820t_priv *priv, u8 reg, u8 *val, int len)
|
||||||
|
|
|
@ -5666,6 +5666,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
||||||
int id = port->id;
|
int id = port->id;
|
||||||
bool allmulti = dev->flags & IFF_ALLMULTI;
|
bool allmulti = dev->flags & IFF_ALLMULTI;
|
||||||
|
|
||||||
|
retry:
|
||||||
mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
|
mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
|
||||||
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
|
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
|
||||||
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
|
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
|
||||||
|
@ -5673,9 +5674,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
||||||
/* Remove all port->id's mcast enries */
|
/* Remove all port->id's mcast enries */
|
||||||
mvpp2_prs_mcast_del_all(priv, id);
|
mvpp2_prs_mcast_del_all(priv, id);
|
||||||
|
|
||||||
if (allmulti && !netdev_mc_empty(dev)) {
|
if (!allmulti) {
|
||||||
netdev_for_each_mc_addr(ha, dev)
|
netdev_for_each_mc_addr(ha, dev) {
|
||||||
mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
|
if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
|
||||||
|
allmulti = true;
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -280,6 +280,9 @@ void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
|
||||||
u64 in_param = 0;
|
u64 in_param = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (!cnt)
|
||||||
|
return;
|
||||||
|
|
||||||
if (mlx4_is_mfunc(dev)) {
|
if (mlx4_is_mfunc(dev)) {
|
||||||
set_param_l(&in_param, base_qpn);
|
set_param_l(&in_param, base_qpn);
|
||||||
set_param_h(&in_param, cnt);
|
set_param_h(&in_param, cnt);
|
||||||
|
|
|
@ -1127,7 +1127,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl_priv *rtlpriv, u16 addr)
|
||||||
}
|
}
|
||||||
if (0 == tmp) {
|
if (0 == tmp) {
|
||||||
read_addr = REG_DBI_RDATA + addr % 4;
|
read_addr = REG_DBI_RDATA + addr % 4;
|
||||||
ret = rtl_read_word(rtlpriv, read_addr);
|
ret = rtl_read_byte(rtlpriv, read_addr);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1169,7 +1169,8 @@ static void _rtl8821ae_enable_aspm_back_door(struct ieee80211_hw *hw)
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x70f);
|
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x70f);
|
||||||
_rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7));
|
_rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7) |
|
||||||
|
ASPM_L1_LATENCY << 3);
|
||||||
|
|
||||||
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x719);
|
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x719);
|
||||||
_rtl8821ae_dbi_write(rtlpriv, 0x719, tmp | BIT(3) | BIT(4));
|
_rtl8821ae_dbi_write(rtlpriv, 0x719, tmp | BIT(3) | BIT(4));
|
||||||
|
|
|
@ -99,6 +99,7 @@
|
||||||
#define RTL_USB_MAX_RX_COUNT 100
|
#define RTL_USB_MAX_RX_COUNT 100
|
||||||
#define QBSS_LOAD_SIZE 5
|
#define QBSS_LOAD_SIZE 5
|
||||||
#define MAX_WMMELE_LENGTH 64
|
#define MAX_WMMELE_LENGTH 64
|
||||||
|
#define ASPM_L1_LATENCY 7
|
||||||
|
|
||||||
#define TOTAL_CAM_ENTRY 32
|
#define TOTAL_CAM_ENTRY 32
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,7 @@ static void tm_to_opal(struct rtc_time *tm, u32 *y_m_d, u64 *h_m_s_ms)
|
||||||
static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||||
{
|
{
|
||||||
long rc = OPAL_BUSY;
|
long rc = OPAL_BUSY;
|
||||||
|
int retries = 10;
|
||||||
u32 y_m_d;
|
u32 y_m_d;
|
||||||
u64 h_m_s_ms;
|
u64 h_m_s_ms;
|
||||||
__be32 __y_m_d;
|
__be32 __y_m_d;
|
||||||
|
@ -67,8 +68,11 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||||
rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
|
rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
|
||||||
if (rc == OPAL_BUSY_EVENT)
|
if (rc == OPAL_BUSY_EVENT)
|
||||||
opal_poll_events(NULL);
|
opal_poll_events(NULL);
|
||||||
else
|
else if (retries-- && (rc == OPAL_HARDWARE
|
||||||
|
|| rc == OPAL_INTERNAL_ERROR))
|
||||||
msleep(10);
|
msleep(10);
|
||||||
|
else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc != OPAL_SUCCESS)
|
if (rc != OPAL_SUCCESS)
|
||||||
|
@ -84,6 +88,7 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||||
static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
|
static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||||
{
|
{
|
||||||
long rc = OPAL_BUSY;
|
long rc = OPAL_BUSY;
|
||||||
|
int retries = 10;
|
||||||
u32 y_m_d = 0;
|
u32 y_m_d = 0;
|
||||||
u64 h_m_s_ms = 0;
|
u64 h_m_s_ms = 0;
|
||||||
|
|
||||||
|
@ -92,8 +97,11 @@ static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||||
rc = opal_rtc_write(y_m_d, h_m_s_ms);
|
rc = opal_rtc_write(y_m_d, h_m_s_ms);
|
||||||
if (rc == OPAL_BUSY_EVENT)
|
if (rc == OPAL_BUSY_EVENT)
|
||||||
opal_poll_events(NULL);
|
opal_poll_events(NULL);
|
||||||
else
|
else if (retries-- && (rc == OPAL_HARDWARE
|
||||||
|
|| rc == OPAL_INTERNAL_ERROR))
|
||||||
msleep(10);
|
msleep(10);
|
||||||
|
else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc == OPAL_SUCCESS ? 0 : -EIO;
|
return rc == OPAL_SUCCESS ? 0 : -EIO;
|
||||||
|
|
|
@ -68,7 +68,6 @@ const struct consw dummy_con = {
|
||||||
.con_switch = DUMMY,
|
.con_switch = DUMMY,
|
||||||
.con_blank = DUMMY,
|
.con_blank = DUMMY,
|
||||||
.con_font_set = DUMMY,
|
.con_font_set = DUMMY,
|
||||||
.con_font_get = DUMMY,
|
|
||||||
.con_font_default = DUMMY,
|
.con_font_default = DUMMY,
|
||||||
.con_font_copy = DUMMY,
|
.con_font_copy = DUMMY,
|
||||||
.con_set_palette = DUMMY,
|
.con_set_palette = DUMMY,
|
||||||
|
|
|
@ -1120,7 +1120,7 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
||||||
goto put_display_node;
|
goto put_display_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
timings_np = of_find_node_by_name(display_np, "display-timings");
|
timings_np = of_get_child_by_name(display_np, "display-timings");
|
||||||
if (!timings_np) {
|
if (!timings_np) {
|
||||||
dev_err(dev, "failed to find display-timings node\n");
|
dev_err(dev, "failed to find display-timings node\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
|
@ -1141,6 +1141,12 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
||||||
fb_add_videomode(&fb_vm, &info->modelist);
|
fb_add_videomode(&fb_vm, &info->modelist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: Make sure we are not referencing any fields in display_np
|
||||||
|
* and timings_np and drop our references to them before returning to
|
||||||
|
* avoid leaking the nodes on probe deferral and driver unbind.
|
||||||
|
*/
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
put_timings_node:
|
put_timings_node:
|
||||||
|
|
|
@ -1292,8 +1292,11 @@ next_slot:
|
||||||
leaf = path->nodes[0];
|
leaf = path->nodes[0];
|
||||||
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
|
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
|
||||||
ret = btrfs_next_leaf(root, path);
|
ret = btrfs_next_leaf(root, path);
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
|
if (cow_start != (u64)-1)
|
||||||
|
cur_offset = cow_start;
|
||||||
goto error;
|
goto error;
|
||||||
|
}
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
break;
|
break;
|
||||||
leaf = path->nodes[0];
|
leaf = path->nodes[0];
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "print-tree.h"
|
#include "print-tree.h"
|
||||||
#include "backref.h"
|
#include "backref.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
#include "inode-map.h"
|
||||||
|
|
||||||
/* magic values for the inode_only field in btrfs_log_inode:
|
/* magic values for the inode_only field in btrfs_log_inode:
|
||||||
*
|
*
|
||||||
|
@ -2445,6 +2446,9 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
|
||||||
next);
|
next);
|
||||||
btrfs_wait_tree_block_writeback(next);
|
btrfs_wait_tree_block_writeback(next);
|
||||||
btrfs_tree_unlock(next);
|
btrfs_tree_unlock(next);
|
||||||
|
} else {
|
||||||
|
if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||||
|
clear_extent_buffer_dirty(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_ON(root_owner !=
|
WARN_ON(root_owner !=
|
||||||
|
@ -2524,6 +2528,9 @@ static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
|
||||||
next);
|
next);
|
||||||
btrfs_wait_tree_block_writeback(next);
|
btrfs_wait_tree_block_writeback(next);
|
||||||
btrfs_tree_unlock(next);
|
btrfs_tree_unlock(next);
|
||||||
|
} else {
|
||||||
|
if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||||
|
clear_extent_buffer_dirty(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
|
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
|
||||||
|
@ -2600,6 +2607,9 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,
|
||||||
clean_tree_block(trans, log->fs_info, next);
|
clean_tree_block(trans, log->fs_info, next);
|
||||||
btrfs_wait_tree_block_writeback(next);
|
btrfs_wait_tree_block_writeback(next);
|
||||||
btrfs_tree_unlock(next);
|
btrfs_tree_unlock(next);
|
||||||
|
} else {
|
||||||
|
if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||||
|
clear_extent_buffer_dirty(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN_ON(log->root_key.objectid !=
|
WARN_ON(log->root_key.objectid !=
|
||||||
|
@ -5514,6 +5524,23 @@ again:
|
||||||
path);
|
path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
|
||||||
|
struct btrfs_root *root = wc.replay_dest;
|
||||||
|
|
||||||
|
btrfs_release_path(path);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have just replayed everything, and the highest
|
||||||
|
* objectid of fs roots probably has changed in case
|
||||||
|
* some inode_item's got replayed.
|
||||||
|
*
|
||||||
|
* root->objectid_mutex is not acquired as log replay
|
||||||
|
* could only happen during mount.
|
||||||
|
*/
|
||||||
|
ret = btrfs_find_highest_objectid(root,
|
||||||
|
&root->highest_objectid);
|
||||||
|
}
|
||||||
|
|
||||||
key.offset = found_key.offset - 1;
|
key.offset = found_key.offset - 1;
|
||||||
wc.replay_dest->log_root = NULL;
|
wc.replay_dest->log_root = NULL;
|
||||||
free_extent_buffer(log->node);
|
free_extent_buffer(log->node);
|
||||||
|
|
|
@ -688,6 +688,7 @@ __acquires(bitlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
ext4_unlock_group(sb, grp);
|
ext4_unlock_group(sb, grp);
|
||||||
|
ext4_commit_super(sb, 1);
|
||||||
ext4_handle_error(sb);
|
ext4_handle_error(sb);
|
||||||
/*
|
/*
|
||||||
* We only get here in the ERRORS_RO case; relocking the group
|
* We only get here in the ERRORS_RO case; relocking the group
|
||||||
|
|
|
@ -2015,6 +2015,9 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
const char *s = nd->name->name;
|
const char *s = nd->name->name;
|
||||||
|
|
||||||
|
if (!*s)
|
||||||
|
flags &= ~LOOKUP_RCU;
|
||||||
|
|
||||||
nd->last_type = LAST_ROOT; /* if there are only slashes... */
|
nd->last_type = LAST_ROOT; /* if there are only slashes... */
|
||||||
nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
|
nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
|
||||||
nd->depth = 0;
|
nd->depth = 0;
|
||||||
|
|
|
@ -32,7 +32,7 @@ static inline void kaiser_init(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
static inline int kaiser_add_mapping(unsigned long addr,
|
static inline int kaiser_add_mapping(unsigned long addr,
|
||||||
unsigned long size, unsigned long flags)
|
unsigned long size, u64 flags)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS
|
#if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST)
|
||||||
#warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
|
#warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1012,7 +1012,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
||||||
{
|
{
|
||||||
struct snd_seq_client *client = file->private_data;
|
struct snd_seq_client *client = file->private_data;
|
||||||
int written = 0, len;
|
int written = 0, len;
|
||||||
int err = -EINVAL;
|
int err;
|
||||||
struct snd_seq_event event;
|
struct snd_seq_event event;
|
||||||
|
|
||||||
if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
|
if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
|
||||||
|
@ -1027,11 +1027,15 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
||||||
|
|
||||||
/* allocate the pool now if the pool is not allocated yet */
|
/* allocate the pool now if the pool is not allocated yet */
|
||||||
if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
|
if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
|
||||||
if (snd_seq_pool_init(client->pool) < 0)
|
mutex_lock(&client->ioctl_mutex);
|
||||||
|
err = snd_seq_pool_init(client->pool);
|
||||||
|
mutex_unlock(&client->ioctl_mutex);
|
||||||
|
if (err < 0)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* only process whole events */
|
/* only process whole events */
|
||||||
|
err = -EINVAL;
|
||||||
while (count >= sizeof(struct snd_seq_event)) {
|
while (count >= sizeof(struct snd_seq_event)) {
|
||||||
/* Read in the event header from the user */
|
/* Read in the event header from the user */
|
||||||
len = sizeof(event);
|
len = sizeof(event);
|
||||||
|
@ -2196,7 +2200,6 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||||
void __user *arg)
|
void __user *arg)
|
||||||
{
|
{
|
||||||
struct seq_ioctl_table *p;
|
struct seq_ioctl_table *p;
|
||||||
int ret;
|
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case SNDRV_SEQ_IOCTL_PVERSION:
|
case SNDRV_SEQ_IOCTL_PVERSION:
|
||||||
|
@ -2210,12 +2213,8 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||||
if (! arg)
|
if (! arg)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
for (p = ioctl_tables; p->cmd; p++) {
|
for (p = ioctl_tables; p->cmd; p++) {
|
||||||
if (p->cmd == cmd) {
|
if (p->cmd == cmd)
|
||||||
mutex_lock(&client->ioctl_mutex);
|
return p->func(client, arg);
|
||||||
ret = p->func(client, arg);
|
|
||||||
mutex_unlock(&client->ioctl_mutex);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pr_debug("ALSA: seq unknown ioctl() 0x%x (type='%c', number=0x%02x)\n",
|
pr_debug("ALSA: seq unknown ioctl() 0x%x (type='%c', number=0x%02x)\n",
|
||||||
cmd, _IOC_TYPE(cmd), _IOC_NR(cmd));
|
cmd, _IOC_TYPE(cmd), _IOC_NR(cmd));
|
||||||
|
@ -2226,11 +2225,15 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||||
static long snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
static long snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
struct snd_seq_client *client = file->private_data;
|
struct snd_seq_client *client = file->private_data;
|
||||||
|
long ret;
|
||||||
|
|
||||||
if (snd_BUG_ON(!client))
|
if (snd_BUG_ON(!client))
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
||||||
return snd_seq_do_ioctl(client, cmd, (void __user *) arg);
|
mutex_lock(&client->ioctl_mutex);
|
||||||
|
ret = snd_seq_do_ioctl(client, cmd, (void __user *) arg);
|
||||||
|
mutex_unlock(&client->ioctl_mutex);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
|
@ -3130,6 +3130,19 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
|
||||||
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix,
|
||||||
|
int action)
|
||||||
|
{
|
||||||
|
unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
|
||||||
|
unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
|
||||||
|
|
||||||
|
if (cfg_headphone && cfg_headset_mic == 0x411111f0)
|
||||||
|
snd_hda_codec_set_pincfg(codec, 0x19,
|
||||||
|
(cfg_headphone & ~AC_DEFCFG_DEVICE) |
|
||||||
|
(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
|
||||||
|
}
|
||||||
|
|
||||||
static void alc269_fixup_hweq(struct hda_codec *codec,
|
static void alc269_fixup_hweq(struct hda_codec *codec,
|
||||||
const struct hda_fixup *fix, int action)
|
const struct hda_fixup *fix, int action)
|
||||||
{
|
{
|
||||||
|
@ -4782,6 +4795,7 @@ enum {
|
||||||
ALC269_FIXUP_LIFEBOOK_EXTMIC,
|
ALC269_FIXUP_LIFEBOOK_EXTMIC,
|
||||||
ALC269_FIXUP_LIFEBOOK_HP_PIN,
|
ALC269_FIXUP_LIFEBOOK_HP_PIN,
|
||||||
ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
|
ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
|
||||||
|
ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
|
||||||
ALC269_FIXUP_AMIC,
|
ALC269_FIXUP_AMIC,
|
||||||
ALC269_FIXUP_DMIC,
|
ALC269_FIXUP_DMIC,
|
||||||
ALC269VB_FIXUP_AMIC,
|
ALC269VB_FIXUP_AMIC,
|
||||||
|
@ -4972,6 +4986,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||||
.type = HDA_FIXUP_FUNC,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
|
.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
|
||||||
},
|
},
|
||||||
|
[ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
|
||||||
|
.type = HDA_FIXUP_FUNC,
|
||||||
|
.v.func = alc269_fixup_pincfg_U7x7_headset_mic,
|
||||||
|
},
|
||||||
[ALC269_FIXUP_AMIC] = {
|
[ALC269_FIXUP_AMIC] = {
|
||||||
.type = HDA_FIXUP_PINS,
|
.type = HDA_FIXUP_PINS,
|
||||||
.v.pins = (const struct hda_pintbl[]) {
|
.v.pins = (const struct hda_pintbl[]) {
|
||||||
|
@ -5687,6 +5705,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
|
SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
|
||||||
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||||
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||||
|
SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
|
||||||
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
||||||
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
||||||
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
|
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
|
||||||
|
@ -5975,6 +5994,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||||
{0x12, 0xb7a60130},
|
{0x12, 0xb7a60130},
|
||||||
{0x14, 0x90170110},
|
{0x14, 0x90170110},
|
||||||
{0x21, 0x02211020}),
|
{0x21, 0x02211020}),
|
||||||
|
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||||
|
{0x12, 0x90a60130},
|
||||||
|
{0x14, 0x90170110},
|
||||||
|
{0x14, 0x01011020},
|
||||||
|
{0x21, 0x0221101f}),
|
||||||
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||||
ALC256_STANDARD_PINS),
|
ALC256_STANDARD_PINS),
|
||||||
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
|
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
|
||||||
|
@ -6031,6 +6055,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||||
{0x12, 0x90a60120},
|
{0x12, 0x90a60120},
|
||||||
{0x14, 0x90170110},
|
{0x14, 0x90170110},
|
||||||
{0x21, 0x0321101f}),
|
{0x21, 0x0321101f}),
|
||||||
|
SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||||
|
{0x12, 0xb7a60130},
|
||||||
|
{0x14, 0x90170110},
|
||||||
|
{0x21, 0x04211020}),
|
||||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||||
ALC290_STANDARD_PINS,
|
ALC290_STANDARD_PINS,
|
||||||
{0x15, 0x04211040},
|
{0x15, 0x04211040},
|
||||||
|
|
|
@ -343,17 +343,20 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
|
||||||
int validx, int *value_ret)
|
int validx, int *value_ret)
|
||||||
{
|
{
|
||||||
struct snd_usb_audio *chip = cval->head.mixer->chip;
|
struct snd_usb_audio *chip = cval->head.mixer->chip;
|
||||||
unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
|
/* enough space for one range */
|
||||||
|
unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
|
||||||
unsigned char *val;
|
unsigned char *val;
|
||||||
int idx = 0, ret, size;
|
int idx = 0, ret, val_size, size;
|
||||||
__u8 bRequest;
|
__u8 bRequest;
|
||||||
|
|
||||||
|
val_size = uac2_ctl_value_size(cval->val_type);
|
||||||
|
|
||||||
if (request == UAC_GET_CUR) {
|
if (request == UAC_GET_CUR) {
|
||||||
bRequest = UAC2_CS_CUR;
|
bRequest = UAC2_CS_CUR;
|
||||||
size = uac2_ctl_value_size(cval->val_type);
|
size = val_size;
|
||||||
} else {
|
} else {
|
||||||
bRequest = UAC2_CS_RANGE;
|
bRequest = UAC2_CS_RANGE;
|
||||||
size = sizeof(buf);
|
size = sizeof(__u16) + 3 * val_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
|
@ -386,16 +389,17 @@ error:
|
||||||
val = buf + sizeof(__u16);
|
val = buf + sizeof(__u16);
|
||||||
break;
|
break;
|
||||||
case UAC_GET_MAX:
|
case UAC_GET_MAX:
|
||||||
val = buf + sizeof(__u16) * 2;
|
val = buf + sizeof(__u16) + val_size;
|
||||||
break;
|
break;
|
||||||
case UAC_GET_RES:
|
case UAC_GET_RES:
|
||||||
val = buf + sizeof(__u16) * 3;
|
val = buf + sizeof(__u16) + val_size * 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
|
*value_ret = convert_signed_value(cval,
|
||||||
|
snd_usb_combine_bytes(val, val_size));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,6 +343,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
|
||||||
ep = 0x81;
|
ep = 0x81;
|
||||||
iface = usb_ifnum_to_if(dev, 2);
|
iface = usb_ifnum_to_if(dev, 2);
|
||||||
|
|
||||||
|
if (!iface || iface->num_altsetting == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
alts = &iface->altsetting[1];
|
||||||
|
goto add_sync_ep;
|
||||||
|
case USB_ID(0x1397, 0x0002):
|
||||||
|
ep = 0x81;
|
||||||
|
iface = usb_ifnum_to_if(dev, 1);
|
||||||
|
|
||||||
if (!iface || iface->num_altsetting == 0)
|
if (!iface || iface->num_altsetting == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue