Merge 4.19.259 into android-4.19-stable
Changes in 4.19.259 drm/msm/rd: Fix FIFO-full deadlock HID: ishtp-hid-clientHID: ishtp-hid-client: Fix comment typo tg3: Disable tg3 device on system reboot to avoid triggering AER ieee802154: cc2520: add rc code in cc2520_tx() Input: iforce - add support for Boeder Force Feedback Wheel perf/arm_pmu_platform: fix tests for platform_get_irq() failure platform/x86: acer-wmi: Acer Aspire One AOD270/Packard Bell Dot keymap fixes usb: storage: Add ASUS <0x0b05:0x1932> to IGNORE_UAS mm: Fix TLB flush for not-first PFNMAP mappings in unmap_region() net: dp83822: disable rx error interrupt tracefs: Only clobber mode/uid/gid on remount if asked Linux 4.19.259 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I4dd44713b06f34580e64c574fc5b09a3fe132880
This commit is contained in:
commit
e544583503
13 changed files with 61 additions and 18 deletions
|
@ -517,6 +517,7 @@ All I-Force devices are supported by the iforce module. This includes:
|
||||||
* AVB Mag Turbo Force
|
* AVB Mag Turbo Force
|
||||||
* AVB Top Shot Pegasus
|
* AVB Top Shot Pegasus
|
||||||
* AVB Top Shot Force Feedback Racing Wheel
|
* AVB Top Shot Force Feedback Racing Wheel
|
||||||
|
* Boeder Force Feedback Wheel
|
||||||
* Logitech WingMan Force
|
* Logitech WingMan Force
|
||||||
* Logitech WingMan Force Wheel
|
* Logitech WingMan Force Wheel
|
||||||
* Guillemot Race Leader Force Feedback
|
* Guillemot Race Leader Force Feedback
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 19
|
PATCHLEVEL = 19
|
||||||
SUBLEVEL = 258
|
SUBLEVEL = 259
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = "People's Front"
|
NAME = "People's Front"
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,9 @@ static int rd_open(struct inode *inode, struct file *file)
|
||||||
file->private_data = rd;
|
file->private_data = rd;
|
||||||
rd->open = true;
|
rd->open = true;
|
||||||
|
|
||||||
|
/* Reset fifo to clear any previously unread data: */
|
||||||
|
rd->fifo.head = rd->fifo.tail = 0;
|
||||||
|
|
||||||
/* the parsing tools need to know gpu-id to know which
|
/* the parsing tools need to know gpu-id to know which
|
||||||
* register database to load.
|
* register database to load.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -118,7 +118,7 @@ struct report_list {
|
||||||
* @multi_packet_cnt: Count of fragmented packet count
|
* @multi_packet_cnt: Count of fragmented packet count
|
||||||
*
|
*
|
||||||
* This structure is used to store completion flags and per client data like
|
* This structure is used to store completion flags and per client data like
|
||||||
* like report description, number of HID devices etc.
|
* report description, number of HID devices etc.
|
||||||
*/
|
*/
|
||||||
struct ishtp_cl_data {
|
struct ishtp_cl_data {
|
||||||
/* completion flags */
|
/* completion flags */
|
||||||
|
|
|
@ -64,6 +64,7 @@ static struct iforce_device iforce_device[] = {
|
||||||
{ 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce },
|
{ 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce },
|
||||||
{ 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce },
|
{ 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce },
|
||||||
{ 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce },
|
{ 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce },
|
||||||
|
{ 0x05ef, 0x8886, "Boeder Force Feedback Wheel", btn_wheel, abs_wheel, ff_iforce },
|
||||||
{ 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //?
|
{ 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //?
|
||||||
{ 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //?
|
{ 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //?
|
||||||
{ 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce },
|
{ 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce },
|
||||||
|
|
|
@ -18207,16 +18207,20 @@ static void tg3_shutdown(struct pci_dev *pdev)
|
||||||
struct net_device *dev = pci_get_drvdata(pdev);
|
struct net_device *dev = pci_get_drvdata(pdev);
|
||||||
struct tg3 *tp = netdev_priv(dev);
|
struct tg3 *tp = netdev_priv(dev);
|
||||||
|
|
||||||
|
tg3_reset_task_cancel(tp);
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
||||||
netif_device_detach(dev);
|
netif_device_detach(dev);
|
||||||
|
|
||||||
if (netif_running(dev))
|
if (netif_running(dev))
|
||||||
dev_close(dev);
|
dev_close(dev);
|
||||||
|
|
||||||
if (system_state == SYSTEM_POWER_OFF)
|
tg3_power_down(tp);
|
||||||
tg3_power_down(tp);
|
|
||||||
|
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
|
||||||
|
pci_disable_device(pdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -512,6 +512,7 @@ cc2520_tx(struct ieee802154_hw *hw, struct sk_buff *skb)
|
||||||
goto err_tx;
|
goto err_tx;
|
||||||
|
|
||||||
if (status & CC2520_STATUS_TX_UNDERFLOW) {
|
if (status & CC2520_STATUS_TX_UNDERFLOW) {
|
||||||
|
rc = -EINVAL;
|
||||||
dev_err(&priv->spi->dev, "cc2520 tx underflow exception\n");
|
dev_err(&priv->spi->dev, "cc2520 tx underflow exception\n");
|
||||||
goto err_tx;
|
goto err_tx;
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,8 +203,7 @@ static int dp83822_config_intr(struct phy_device *phydev)
|
||||||
if (misr_status < 0)
|
if (misr_status < 0)
|
||||||
return misr_status;
|
return misr_status;
|
||||||
|
|
||||||
misr_status |= (DP83822_RX_ERR_HF_INT_EN |
|
misr_status |= (DP83822_ANEG_COMPLETE_INT_EN |
|
||||||
DP83822_ANEG_COMPLETE_INT_EN |
|
|
||||||
DP83822_DUP_MODE_CHANGE_INT_EN |
|
DP83822_DUP_MODE_CHANGE_INT_EN |
|
||||||
DP83822_SPEED_CHANGED_INT_EN |
|
DP83822_SPEED_CHANGED_INT_EN |
|
||||||
DP83822_LINK_STAT_INT_EN |
|
DP83822_LINK_STAT_INT_EN |
|
||||||
|
|
|
@ -118,7 +118,7 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)
|
||||||
|
|
||||||
if (num_irqs == 1) {
|
if (num_irqs == 1) {
|
||||||
int irq = platform_get_irq(pdev, 0);
|
int irq = platform_get_irq(pdev, 0);
|
||||||
if (irq && irq_is_percpu_devid(irq))
|
if ((irq > 0) && irq_is_percpu_devid(irq))
|
||||||
return pmu_parse_percpu_irq(pmu, irq);
|
return pmu_parse_percpu_irq(pmu, irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = {
|
||||||
{KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */
|
{KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */
|
||||||
{KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */
|
{KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */
|
||||||
{KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */
|
{KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */
|
||||||
|
{KE_KEY, 0x27, {KEY_HELP} },
|
||||||
{KE_KEY, 0x29, {KEY_PROG3} }, /* P_Key for TM8372 */
|
{KE_KEY, 0x29, {KEY_PROG3} }, /* P_Key for TM8372 */
|
||||||
{KE_IGNORE, 0x41, {KEY_MUTE} },
|
{KE_IGNORE, 0x41, {KEY_MUTE} },
|
||||||
{KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
|
{KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
|
||||||
|
@ -119,7 +120,13 @@ static const struct key_entry acer_wmi_keymap[] __initconst = {
|
||||||
{KE_IGNORE, 0x48, {KEY_VOLUMEUP} },
|
{KE_IGNORE, 0x48, {KEY_VOLUMEUP} },
|
||||||
{KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} },
|
{KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} },
|
||||||
{KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} },
|
{KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} },
|
||||||
{KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} },
|
/*
|
||||||
|
* 0x61 is KEY_SWITCHVIDEOMODE. Usually this is a duplicate input event
|
||||||
|
* with the "Video Bus" input device events. But sometimes it is not
|
||||||
|
* a dup. Map it to KEY_UNKNOWN instead of using KE_IGNORE so that
|
||||||
|
* udev/hwdb can override it on systems where it is not a dup.
|
||||||
|
*/
|
||||||
|
{KE_KEY, 0x61, {KEY_UNKNOWN} },
|
||||||
{KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} },
|
{KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} },
|
||||||
{KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
|
{KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
|
||||||
{KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
|
{KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
|
||||||
|
|
|
@ -62,6 +62,13 @@ UNUSUAL_DEV(0x0984, 0x0301, 0x0128, 0x0128,
|
||||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
US_FL_IGNORE_UAS),
|
US_FL_IGNORE_UAS),
|
||||||
|
|
||||||
|
/* Reported-by: Tom Hu <huxiaoying@kylinos.cn> */
|
||||||
|
UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999,
|
||||||
|
"ASUS",
|
||||||
|
"External HDD",
|
||||||
|
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||||
|
US_FL_IGNORE_UAS),
|
||||||
|
|
||||||
/* Reported-by: David Webb <djw@noc.ac.uk> */
|
/* Reported-by: David Webb <djw@noc.ac.uk> */
|
||||||
UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
|
UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
|
||||||
"Seagate",
|
"Seagate",
|
||||||
|
|
|
@ -142,6 +142,8 @@ struct tracefs_mount_opts {
|
||||||
kuid_t uid;
|
kuid_t uid;
|
||||||
kgid_t gid;
|
kgid_t gid;
|
||||||
umode_t mode;
|
umode_t mode;
|
||||||
|
/* Opt_* bitfield. */
|
||||||
|
unsigned int opts;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -242,6 +244,7 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts)
|
||||||
kgid_t gid;
|
kgid_t gid;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
opts->opts = 0;
|
||||||
opts->mode = TRACEFS_DEFAULT_MODE;
|
opts->mode = TRACEFS_DEFAULT_MODE;
|
||||||
|
|
||||||
while ((p = strsep(&data, ",")) != NULL) {
|
while ((p = strsep(&data, ",")) != NULL) {
|
||||||
|
@ -276,24 +279,36 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts)
|
||||||
* but traditionally tracefs has ignored all mount options
|
* but traditionally tracefs has ignored all mount options
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opts->opts |= BIT(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tracefs_apply_options(struct super_block *sb)
|
static int tracefs_apply_options(struct super_block *sb, bool remount)
|
||||||
{
|
{
|
||||||
struct tracefs_fs_info *fsi = sb->s_fs_info;
|
struct tracefs_fs_info *fsi = sb->s_fs_info;
|
||||||
struct inode *inode = sb->s_root->d_inode;
|
struct inode *inode = sb->s_root->d_inode;
|
||||||
struct tracefs_mount_opts *opts = &fsi->mount_opts;
|
struct tracefs_mount_opts *opts = &fsi->mount_opts;
|
||||||
|
|
||||||
inode->i_mode &= ~S_IALLUGO;
|
/*
|
||||||
inode->i_mode |= opts->mode;
|
* On remount, only reset mode/uid/gid if they were provided as mount
|
||||||
|
* options.
|
||||||
|
*/
|
||||||
|
|
||||||
inode->i_uid = opts->uid;
|
if (!remount || opts->opts & BIT(Opt_mode)) {
|
||||||
|
inode->i_mode &= ~S_IALLUGO;
|
||||||
|
inode->i_mode |= opts->mode;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set all the group ids to the mount option */
|
if (!remount || opts->opts & BIT(Opt_uid))
|
||||||
set_gid(sb->s_root, opts->gid);
|
inode->i_uid = opts->uid;
|
||||||
|
|
||||||
|
if (!remount || opts->opts & BIT(Opt_gid)) {
|
||||||
|
/* Set all the group ids to the mount option */
|
||||||
|
set_gid(sb->s_root, opts->gid);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -308,7 +323,7 @@ static int tracefs_remount(struct super_block *sb, int *flags, char *data)
|
||||||
if (err)
|
if (err)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
tracefs_apply_options(sb);
|
tracefs_apply_options(sb, true);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
return err;
|
return err;
|
||||||
|
@ -360,7 +375,7 @@ static int trace_fill_super(struct super_block *sb, void *data, int silent)
|
||||||
|
|
||||||
sb->s_op = &tracefs_super_operations;
|
sb->s_op = &tracefs_super_operations;
|
||||||
|
|
||||||
tracefs_apply_options(sb);
|
tracefs_apply_options(sb, false);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -2581,6 +2581,7 @@ static void unmap_region(struct mm_struct *mm,
|
||||||
{
|
{
|
||||||
struct vm_area_struct *next = prev ? prev->vm_next : mm->mmap;
|
struct vm_area_struct *next = prev ? prev->vm_next : mm->mmap;
|
||||||
struct mmu_gather tlb;
|
struct mmu_gather tlb;
|
||||||
|
struct vm_area_struct *cur_vma;
|
||||||
|
|
||||||
lru_add_drain();
|
lru_add_drain();
|
||||||
tlb_gather_mmu(&tlb, mm, start, end);
|
tlb_gather_mmu(&tlb, mm, start, end);
|
||||||
|
@ -2595,8 +2596,12 @@ static void unmap_region(struct mm_struct *mm,
|
||||||
* concurrent flush in this region has to be coming through the rmap,
|
* concurrent flush in this region has to be coming through the rmap,
|
||||||
* and we synchronize against that using the rmap lock.
|
* and we synchronize against that using the rmap lock.
|
||||||
*/
|
*/
|
||||||
if ((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0)
|
for (cur_vma = vma; cur_vma; cur_vma = cur_vma->vm_next) {
|
||||||
tlb_flush_mmu(&tlb);
|
if ((cur_vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) != 0) {
|
||||||
|
tlb_flush_mmu(&tlb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
|
free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
|
||||||
next ? next->vm_start : USER_PGTABLES_CEILING);
|
next ? next->vm_start : USER_PGTABLES_CEILING);
|
||||||
|
|
Loading…
Reference in a new issue