Linux 4.4.246
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.246 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/imx50-evk.dts | 2 arch/arm/boot/dts/imx6qdl-udoo.dtsi | 2 arch/arm64/kernel/psci.c | 5 - arch/mips/alchemy/common/clock.c | 9 ++- arch/mips/kernel/genex.S | 3 - arch/powerpc/kernel/ppc_ksyms.c | 4 - arch/s390/kernel/perf_cpum_sf.c | 2 arch/x86/kernel/cpu/microcode/intel.c | 49 ------------------ arch/xtensa/mm/cache.c | 14 +++++ drivers/atm/nicstar.c | 2 drivers/input/misc/adxl34x.c | 2 drivers/net/can/dev.c | 2 drivers/net/can/m_can/m_can.c | 4 - drivers/net/can/usb/peak_usb/pcan_usb_core.c | 4 - drivers/net/ethernet/broadcom/b44.c | 3 - drivers/net/ethernet/mellanox/mlx4/fw.c | 6 +- drivers/net/ethernet/mellanox/mlx4/fw.h | 4 - drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 3 - drivers/net/usb/qmi_wwan.c | 2 drivers/pinctrl/pinctrl-rockchip.c | 2 drivers/regulator/ti-abb-regulator.c | 12 ++++ drivers/tty/serial/imx.c | 20 +------ fs/efivarfs/super.c | 1 fs/ext4/ext4.h | 3 - fs/libfs.c | 6 +- include/net/mac80211.h | 6 ++ net/bridge/br_device.c | 1 net/core/netpoll.c | 22 ++++++-- net/ipv6/ah6.c | 3 - net/mac80211/debugfs.c | 1 net/mac80211/rc80211_minstrel.c | 27 +-------- net/mac80211/rc80211_minstrel.h | 1 net/mac80211/sta_info.c | 32 +++++++---- net/netlabel/netlabel_unlabeled.c | 17 ++++-- net/sctp/input.c | 4 - net/sctp/sm_sideeffect.c | 4 - net/sctp/transport.c | 2 net/x25/af_x25.c | 1 sound/core/control.c | 2 sound/pci/mixart/mixart_core.c | 5 - tools/perf/builtin-lock.c | 2 42 files changed, 148 insertions(+), 150 deletions(-)
Alejandro Concepcion Rodriguez (1):
can: dev: can_restart(): post buffer from the right context
Aya Levin (1):
net/mlx4_core: Fix init_hca fields offset
Chen Yu (1):
x86/microcode/intel: Check patch signature before saving microcode for early loading
Colin Ian King (1):
can: peak_usb: fix potential integer overflow on shift of a int
Dan Carpenter (1):
Input: adxl34x - clean up a data type in adxl34x_probe()
Daniel Axtens (1):
powerpc/uaccess-flush: fix corenet64_smp_defconfig build
Fabio Estevam (1):
ARM: dts: imx50-evk: Fix the chip select 1 IOMUX
Felix Fietkau (2):
mac80211: minstrel: remove deferred sampling code
mac80211: minstrel: fix tx status processing corner case
Filip Moc (1):
net: usb: qmi_wwan: Set DTR quirk for MR400
Florian Fainelli (1):
net: Have netpoll bring-up DSA management interface
Fugang Duan (1):
tty: serial: imx: keep console clocks always on
Greg Kroah-Hartman (1):
Linux 4.4.246
Heiner Kallweit (1):
net: bridge: add missing counters to ndo_get_stats64 callback
Jan Kara (1):
ext4: fix bogus warning in ext4_update_dx_flag()
Jianqun Xu (1):
pinctrl: rockchip: enable gpio pclk for rockchip_gpio_to_irq
Johannes Berg (2):
mac80211: allow driver to prevent two stations w/ same address
mac80211: free sta in sta_info_insert_finish() on errors
Leo Yan (1):
perf lock: Don't free "lock_seq_stat" if read_count isn't zero
Max Filippov (1):
xtensa: disable preemption around cache alias management calls
Nishanth Menon (1):
regulator: ti-abb: Fix array out of bound read access on the first transition
Paul Burton (1):
MIPS: Fix BUILD_ROLLBACK_PROLOGUE for microMIPS
Paul Moore (2):
netlabel: fix our progress tracking in netlbl_unlabel_staticlist()
netlabel: fix an uninitialized warning in netlbl_unlabel_staticlist()
Sebastian Andrzej Siewior (1):
atm: nicstar: Unmap DMA on send error
Sergey Matyukevich (1):
arm: dts: imx6qdl-udoo: fix rgmii phy-mode for ksz9031 phy
Takashi Iwai (1):
ALSA: mixart: Fix mutex deadlock
Takashi Sakamoto (1):
ALSA: ctl: fix error path at adding user-defined element set
Thomas Richter (1):
s390/cpum_sf.c: fix file permission for cpum_sfb_size
Vamshi K Sthambamkadi (1):
efivarfs: fix memory leak in efivarfs_create()
Will Deacon (1):
arm64: psci: Avoid printing in cpu_psci_cpu_die()
Wu Bo (1):
can: m_can: m_can_handle_state_change(): fix state change
Xie He (1):
net: x25: Increase refcnt of "struct x25_neigh" in x25_rx_call_request
Xin Long (1):
sctp: change to hold/put transport for proto_unreach_timer
Yicong Yang (1):
libfs: fix error cast of negative value in simple_attr_write()
Zhang Changzhong (3):
ah6: fix error return code in ah6_input()
net: b44: fix error return code in b44_init_one()
qlcnic: fix error return code in qlcnic_83xx_restart_hw()
Zhang Qilong (1):
MIPS: Alchemy: Fix memleak in alchemy_clk_setup_cpu
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 245 +SUBLEVEL = 246 EXTRAVERSION = NAME = Blurry Fish Butt
arch/arm/boot/dts/imx50-evk.dts +1 -1
@@ -66,7 +66,7 @@ MX50_PAD_CSPI_MISO__CSPI_MISO 0x00 MX50_PAD_CSPI_MOSI__CSPI_MOSI 0x00 MX50_PAD_CSPI_SS0__GPIO4_11 0xc4 - MX50_PAD_ECSPI1_MOSI__CSPI_SS1 0xf4 + MX50_PAD_ECSPI1_MOSI__GPIO4_13 0x84 >; };
arch/arm/boot/dts/imx6qdl-udoo.dtsi +1 -1
@@ -39,7 +39,7 @@ &fec { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_enet>; - phy-mode = "rgmii"; + phy-mode = "rgmii-id"; status = "okay"; };
arch/arm64/kernel/psci.c +1 -4
@@ -136,7 +136,6 @@ static int cpu_psci_cpu_disable(unsigned int cpu)static void cpu_psci_cpu_die (unsigned int cpu) { -int ret;/* * There are no known implementations of PSCI actually using the * power state field, pass a sensible default for now.
@@ -144,9 +143,7 @@ static void cpu_psci_cpu_die(unsigned int cpu)u32 state =PSCI_POWER_STATE_TYPE_POWER_DOWN <<PSCI_0_2_POWER_STATE_TYPE_SHIFT ; - ret = psci_ops.cpu_off (state); - -pr_crit ("unable to power off CPU%u (%d)\n" , cpu, ret); + psci_ops.cpu_off (state); }static int cpu_psci_cpu_kill (unsigned int cpu)
arch/mips/alchemy/common/clock.c +8 -1
@@ -151,6 +151,7 @@ static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name, {struct clk_init_data id;struct clk_hw *h; +struct clk *clk; h =kzalloc (sizeof (*h),GFP_KERNEL );if (!h)
@@ -163,7 +164,13 @@ static struct clk __init *alchemy_clk_setup_cpu(const char *parent_name, id.ops = &alchemy_clkops_cpu; h->init = &id; -return clk_register (NULL , h); + clk =clk_register (NULL , h); +if (IS_ERR (clk)) { +pr_err ("failed to register clock\n" ); +kfree (h); + } + +return clk; }/* AUXPLLs ************************************************************/
arch/mips/kernel/genex.S +1 -2
@@ -142,9 +142,8 @@ LEAF(__r4k_wait) PTR_LA k1, __r4k_wait ori k0, 0x1f /* 32 byte rollback region */ xori k0, 0x1f - bne k0, k1, 9f + bne k0, k1, \handler MTC0 k0, CP0_EPC -9: .set pop .endm
arch/powerpc/kernel/ppc_ksyms.c +2 -2
@@ -6,7 +6,7 @@#include <asm/cacheflush.h> #include <asm/epapr_hcalls.h> #include <asm/uaccess.h> -#ifdef CONFIG_PPC64 +#ifdef CONFIG_PPC_BOOK3S_64 #include <asm/book3s/64/kup-radix.h> #endif
@@ -50,6 +50,6 @@ EXPORT_SYMBOL(current_stack_pointer);EXPORT_SYMBOL (__arch_clear_user); -#ifdef CONFIG_PPC64 +#ifdef CONFIG_PPC_BOOK3S_64 EXPORT_SYMBOL (do_uaccess_flush);#endif
arch/s390/kernel/perf_cpum_sf.c +1 -1
@@ -1666,4 +1666,4 @@ out:return err; }arch_initcall (init_cpum_sampling_pmu); -core_param (cpum_sfb_size,CPUM_SF_MAX_SDB , sfb_size,0640 ); +core_param (cpum_sfb_size,CPUM_SF_MAX_SDB , sfb_size,0644 );
arch/x86/kernel/cpu/microcode/intel.c +2 -47
61 lines not on this page · raw message
arch/xtensa/mm/cache.c +14 -0
@@ -74,8 +74,10 @@ static inline void kmap_invalidate_coherent(struct page *page, kvaddr =TLBTEMP_BASE_1 + (page_to_phys (page) &DCACHE_ALIAS_MASK ); +preempt_disable ();__invalidate_dcache_page_alias (kvaddr,page_to_phys (page)); +preempt_enable (); } } }
@@ -162,6 +164,7 @@ void flush_dcache_page(struct page *page)if (!alias && !mapping)return ; +preempt_disable (); virt =TLBTEMP_BASE_1 + (phys &DCACHE_ALIAS_MASK );__flush_invalidate_dcache_page_alias (virt, phys);
@@ -172,6 +175,7 @@ void flush_dcache_page(struct page *page)if (mapping)__invalidate_icache_page_alias (virt, phys); +preempt_enable (); }/* There shouldn't be an entry in the cache for this page anymore. */
@@ -204,8 +208,10 @@ void local_flush_cache_page(struct vm_area_struct *vma, unsigned long address,unsigned long phys =page_to_phys (pfn_to_page (pfn));unsigned long virt =TLBTEMP_BASE_1 + (address &DCACHE_ALIAS_MASK ); +preempt_disable ();__flush_invalidate_dcache_page_alias (virt, phys);__invalidate_icache_page_alias (virt, phys); + preempt_enable(); }#endif
@@ -231,11 +237,13 @@ update_mmu_cache(struct vm_area_struct * vma, unsigned long addr, pte_t *ptep)unsigned long phys =page_to_phys (page);unsigned long tmp; +preempt_disable (); tmp =TLBTEMP_BASE_1 + (phys &DCACHE_ALIAS_MASK );__flush_invalidate_dcache_page_alias (tmp, phys); tmp =TLBTEMP_BASE_1 + (addr &DCACHE_ALIAS_MASK );__flush_invalidate_dcache_page_alias (tmp, phys);__invalidate_icache_page_alias (tmp, phys); +preempt_enable ();clear_bit (PG_arch_1, &page->flags); }
@@ -269,7 +277,9 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page,if (alias) {unsigned long t =TLBTEMP_BASE_1 + (vaddr &DCACHE_ALIAS_MASK ); +preempt_disable ();__flush_invalidate_dcache_page_alias (t, phys); +preempt_enable (); }/* Copy data */
@@ -284,9 +294,11 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page,if (alias) {unsigned long t =TLBTEMP_BASE_1 + (vaddr &DCACHE_ALIAS_MASK ); +preempt_disable ();__flush_invalidate_dcache_range ((unsigned long ) dst, len);if ((vma->vm_flags &VM_EXEC ) !=0 )__invalidate_icache_page_alias (t, phys); +preempt_enable (); }else if ((vma->vm_flags &VM_EXEC ) !=0 ) {__flush_dcache_range ((unsigned long )dst,len);
@@ -308,7 +320,9 @@ extern void copy_from_user_page(struct vm_area_struct *vma, struct page *page,if (alias) {unsigned long t =TLBTEMP_BASE_1 + (vaddr &DCACHE_ALIAS_MASK ); +preempt_disable ();__flush_invalidate_dcache_page_alias (t, phys); +preempt_enable (); }memcpy (dst, src, len);
drivers/atm/nicstar.c +2 -0
@@ -1704,6 +1704,8 @@ static int ns_send(struct atm_vcc *vcc, struct sk_buff *skb)if (push_scqe (card, vc, scq, &scqe, skb) !=0 ) {atomic_inc (&vcc->stats->tx_err); +dma_unmap_single (&card->pcidev->dev,NS_PRV_DMA (skb), skb->len, +DMA_TO_DEVICE );dev_kfree_skb_any (skb);return -EIO ; }
drivers/input/misc/adxl34x.c +1 -1
@@ -696,7 +696,7 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,struct input_dev *input_dev;const struct adxl34x_platform_data *pdata;int err, range, i; -unsigned char revid; +int revid;if (!irq) {dev_err (dev,"no IRQ?\n" );
drivers/net/can/dev.c +1 -1
@@ -525,7 +525,7 @@ static void can_restart(struct net_device *dev) } cf->can_id |=CAN_ERR_RESTARTED ; -netif_rx (skb); +netif_rx_ni (skb); stats->rx_packets++; stats->rx_bytes += cf->can_dlc;
drivers/net/can/m_can/m_can.c +2 -2
@@ -572,7 +572,7 @@ static int m_can_handle_state_change(struct net_device *dev,unsigned int ecr;switch (new_state) { -case CAN_STATE_ERROR_ACTIVE : +case CAN_STATE_ERROR_WARNING :/* error warning state */ priv->can.can_stats.error_warning++; priv->can.state =CAN_STATE_ERROR_WARNING ;
@@ -601,7 +601,7 @@ static int m_can_handle_state_change(struct net_device *dev,__m_can_get_berr_counter (dev, &bec);switch (new_state) { -case CAN_STATE_ERROR_ACTIVE : +case CAN_STATE_ERROR_WARNING :/* error warning state */ cf->can_id |=CAN_ERR_CRTL ; cf->data[1] = (bec.txerr > bec.rxerr) ?
drivers/net/can/usb/peak_usb/pcan_usb_core.c +2 -2
@@ -176,7 +176,7 @@ void peak_usb_get_ts_tv(struct peak_time_ref *time_ref, u32 ts,if (time_ref->ts_dev_1 < time_ref->ts_dev_2) {/* case when event time (tsw) wraps */ if (ts < time_ref->ts_dev_1) - delta_ts =1 << time_ref->adapter->ts_used_bits; + delta_ts =BIT_ULL (time_ref->adapter->ts_used_bits);/* Otherwise, sync time counter (ts_dev_2) has wrapped: * handle case when event time (tsn) hasn't.
@@ -188,7 +188,7 @@ void peak_usb_get_ts_tv(struct peak_time_ref *time_ref, u32 ts,* tsn ts */ }else if (time_ref->ts_dev_1 < ts) { - delta_ts = -(1 << time_ref->adapter->ts_used_bits); + delta_ts = -BIT_ULL (time_ref->adapter->ts_used_bits); }/* add delay between last sync and event timestamps */
drivers/net/ethernet/broadcom/b44.c +2 -1
@@ -2393,7 +2393,8 @@ static int b44_init_one(struct ssb_device *sdev, goto err_out_free_dev; } -if (dma_set_mask_and_coherent (sdev->dma_dev,DMA_BIT_MASK (30 ))) { + err =dma_set_mask_and_coherent (sdev->dma_dev,DMA_BIT_MASK (30 )); +if (err) {dev_err (sdev->dev,"Required 30BIT DMA mask unsupported by the system\n" ); goto err_out_powerdown;
drivers/net/ethernet/mellanox/mlx4/fw.c +3 -3
@@ -1711,14 +1711,14 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)#define INIT_HCA_LOG_RD_OFFSET (INIT_HCA_QPC_OFFSET + 0x77)#define INIT_HCA_MCAST_OFFSET 0x0c0#define INIT_HCA_MC_BASE_OFFSET (INIT_HCA_MCAST_OFFSET + 0x00) -#define INIT_HCA_LOG_MC_ENTRY_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x12) -#define INIT_HCA_LOG_MC_HASH_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x16) +#define INIT_HCA_LOG_MC_ENTRY_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x13) +#define INIT_HCA_LOG_MC_HASH_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x17)#define INIT_HCA_UC_STEERING_OFFSET (INIT_HCA_MCAST_OFFSET + 0x18)#define INIT_HCA_LOG_MC_TABLE_SZ_OFFSET (INIT_HCA_MCAST_OFFSET + 0x1b)#define INIT_HCA_DEVICE_MANAGED_FLOW_STEERING_EN 0x6#define INIT_HCA_FS_PARAM_OFFSET 0x1d0#define INIT_HCA_FS_BASE_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x00) -#define INIT_HCA_FS_LOG_ENTRY_SZ_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x12) +#define INIT_HCA_FS_LOG_ENTRY_SZ_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x13)#define INIT_HCA_FS_A0_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x18)#define INIT_HCA_FS_LOG_TABLE_SZ_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x1b)#define INIT_HCA_FS_ETH_BITS_OFFSET (INIT_HCA_FS_PARAM_OFFSET + 0x21)
drivers/net/ethernet/mellanox/mlx4/fw.h +2 -2
@@ -184,8 +184,8 @@ struct mlx4_init_hca_param {u64 cmpt_base;u64 mtt_base;u64 global_caps; -u16 log_mc_entry_sz; -u16 log_mc_hash_sz; +u8 log_mc_entry_sz; +u8 log_mc_hash_sz;u16 hca_core_clock;/* Internal Clock Frequency (in MHz) */ u8 log_num_qps;u8 log_num_srqs;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +2 -1
@@ -2255,7 +2255,8 @@ static int qlcnic_83xx_restart_hw(struct qlcnic_adapter *adapter)/* Boot either flash image or firmware image from host file system */ if (qlcnic_load_fw_file ==1 ) { -if (qlcnic_83xx_load_fw_image_from_host (adapter)) + err =qlcnic_83xx_load_fw_image_from_host (adapter); +if (err)return err; }else { QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID,
drivers/net/usb/qmi_wwan.c +1 -1
@@ -702,7 +702,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x05c6, 0x9011, 4)}, {QMI_FIXED_INTF(0x05c6, 0x9021, 1)}, {QMI_FIXED_INTF(0x05c6, 0x9022, 2)}, - {QMI_FIXED_INTF(0x05c6, 0x9025, 4)}, /* Alcatel-sbell ASB TL131 TDD LTE (China Mobile) */ + {QMI_QUIRK_SET_DTR(0x05c6, 0x9025, 4)}, /* Alcatel-sbell ASB TL131 TDD LTE (China Mobile) */ {QMI_FIXED_INTF(0x05c6, 0x9026, 3)}, {QMI_FIXED_INTF(0x05c6, 0x902e, 5)}, {QMI_FIXED_INTF(0x05c6, 0x9031, 5)},
drivers/pinctrl/pinctrl-rockchip.c +2 -0
@@ -1445,7 +1445,9 @@ static int rockchip_gpio_to_irq(struct gpio_chip *gc, unsigned offset)if (!bank->domain)return -ENXIO ; +clk_enable (bank->clk); virq =irq_create_mapping (bank->domain, offset); +clk_disable (bank->clk);return (virq) ? : -ENXIO ; }
drivers/regulator/ti-abb-regulator.c +11 -1
@@ -342,8 +342,17 @@ static int ti_abb_set_voltage_sel(struct regulator_dev *rdev, unsigned sel)return ret; } -/* If data is exactly the same, then just update index, no change */ info = &abb->info[sel]; +/* +* When Linux kernel is starting up, we are'nt sure of the +* Bias configuration that bootloader has configured. +* So, we get to know the actual setting the first time +* we are asked to transition. +*/ +if (abb->current_info_idx == -EINVAL ) + goto just_set_abb; + +/* If data is exactly the same, then just update index, no change */ oinfo = &abb->info[abb->current_info_idx];if (!memcmp (info, oinfo,sizeof (*info))) { dev_dbg(dev, "%s: Same data new idx=%d, old idx=%d\n", __func__,
@@ -351,6 +360,7 @@ static int ti_abb_set_voltage_sel(struct regulator_dev *rdev, unsigned sel) goto out; } +just_set_abb: ret =ti_abb_set_opp (rdev, abb, info); out:
drivers/tty/serial/imx.c +3 -17
@@ -1628,16 +1628,6 @@ imx_console_write(struct console *co, const char *s, unsigned int count)unsigned int ucr1;unsigned long flags =0 ;int locked =1 ; -int retval; - - retval =clk_enable (sport->clk_per); -if (retval) -return ; - retval =clk_enable (sport->clk_ipg); -if (retval) { -clk_disable (sport->clk_per); -return ; - }if (sport->port.sysrq) locked =0 ;
@@ -1673,9 +1663,6 @@ imx_console_write(struct console *co, const char *s, unsigned int count)if (locked)spin_unlock_irqrestore (&sport->port.lock, flags); - -clk_disable (sport->clk_ipg); -clk_disable (sport->clk_per); }/*
@@ -1776,15 +1763,14 @@ imx_console_setup(struct console *co, char *options) retval =uart_set_options (&sport->port, co, baud, parity, bits, flow); -clk_disable (sport->clk_ipg);if (retval) { -clk_unprepare (sport->clk_ipg); +clk_disable_unprepare (sport->clk_ipg); goto error_console; } - retval =clk_prepare (sport->clk_per); + retval =clk_prepare_enable (sport->clk_per);if (retval) -clk_unprepare (sport->clk_ipg); +clk_disable_unprepare (sport->clk_ipg); error_console:return retval;
fs/efivarfs/super.c +1 -0
@@ -23,6 +23,7 @@ LIST_HEAD(efivarfs_list);static void efivarfs_evict_inode (struct inode *inode) {clear_inode (inode); +kfree (inode->i_private); }static const struct super_operations efivarfs_ops = {
fs/ext4/ext4.h +2 -1
@@ -2398,7 +2398,8 @@ int ext4_insert_dentry(struct inode *dir, struct ext4_filename *fname);static inline void ext4_update_dx_flag (struct inode *inode) { -if (!ext4_has_feature_dir_index (inode->i_sb)) { +if (!ext4_has_feature_dir_index (inode->i_sb) && +ext4_test_inode_flag (inode,EXT4_INODE_INDEX )) {/* ext4_iget() should have caught this... */ WARN_ON_ONCE (ext4_has_feature_metadata_csum (inode->i_sb));ext4_clear_inode_flag (inode,EXT4_INODE_INDEX );
fs/libfs.c +4 -2
@@ -827,7 +827,7 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf, size_t len, loff_t *ppos) { struct simple_attr *attr; -u64 val; +unsigned long long val;size_t size;ssize_t ret;
@@ -845,7 +845,9 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf, goto out; attr->set_buf[size] ='\0' ; - val =simple_strtoll (attr->set_buf,NULL ,0 ); + ret =kstrtoull (attr->set_buf,0 , &val); +if (ret) + goto out; ret = attr->set (attr->data, val);if (ret ==0 ) ret = len;/* on success, claim we got the whole input */
include/net/mac80211.h +6 -0
@@ -1915,6 +1915,11 @@ struct ieee80211_txq {* @IEEE80211_HW_BEACON_TX_STATUS: The device/driver provides TX status * for sent beacons. * +* @IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR: Hardware (or driver) requires that each +* station has a unique address, i.e. each station entry can be identified +* by just its MAC address; this prevents, for example, the same station +* from connecting to two virtual AP interfaces at the same time. +* * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays */ enum ieee80211_hw_flags {
@@ -1950,6 +1955,7 @@ enum ieee80211_hw_flags {IEEE80211_HW_TDLS_WIDER_BW ,IEEE80211_HW_SUPPORTS_AMSDU_IN_AMPDU ,IEEE80211_HW_BEACON_TX_STATUS , +IEEE80211_HW_NEEDS_UNIQUE_STA_ADDR ,/* keep last, obviously */ NUM_IEEE80211_HW_FLAGS
net/bridge/br_device.c +1 -0
@@ -166,6 +166,7 @@ static struct rtnl_link_stats64 *br_get_stats64(struct net_device *dev, sum.rx_packets += tmp.rx_packets; } +netdev_stats_to_stats64 (stats, &dev->stats); stats->tx_bytes = sum.tx_bytes; stats->tx_packets = sum.tx_packets; stats->rx_bytes = sum.rx_bytes;
net/core/netpoll.c +18 -4
@@ -28,6 +28,7 @@#include <linux/slab.h> #include <linux/export.h> #include <linux/if_vlan.h> +#include <net/dsa.h> #include <net/tcp.h> #include <net/udp.h> #include <net/addrconf.h>
@@ -661,15 +662,15 @@ EXPORT_SYMBOL_GPL(__netpoll_setup);int netpoll_setup (struct netpoll *np) { -struct net_device *ndev =NULL ; +struct net_device *ndev =NULL , *dev =NULL ; +struct net *net = current->nsproxy->net_ns;struct in_device *in_dev;int err;rtnl_lock (); -if (np->dev_name) { -struct net *net = current->nsproxy->net_ns; +if (np->dev_name) ndev =__dev_get_by_name (net, np->dev_name); - } +if (!ndev) {np_err (np,"%s doesn't exist, aborting\n" , np->dev_name); err = -ENODEV ;
@@ -677,6 +678,19 @@ int netpoll_setup(struct netpoll *np) }dev_hold (ndev); +/* bring up DSA management network devices up first */ +for_each_netdev (net, dev) { +if (!netdev_uses_dsa (dev)) +continue ; + + err =dev_change_flags (dev, dev->flags |IFF_UP ); +if (err <0 ) { +np_err (np,"%s failed to open %s\n" , + np->dev_name, dev->name); + goto put; + } + } +if (netdev_master_upper_dev_get (ndev)) {np_err (np,"%s is a slave device, aborting\n" , np->dev_name); err = -EBUSY ;
net/ipv6/ah6.c +2 -1
@@ -595,7 +595,8 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)memcpy (auth_data, ah->auth_data, ahp->icv_trunc_len);memset (ah->auth_data,0 , ahp->icv_trunc_len); -if (ipv6_clear_mutable_options (ip6h, hdr_len,XFRM_POLICY_IN )) + err =ipv6_clear_mutable_options (ip6h, hdr_len,XFRM_POLICY_IN ); +if (err) goto out_free; ip6h->priority =0 ;
net/mac80211/debugfs.c +1 -0
@@ -125,6 +125,7 @@ static const char *hw_flag_names[] = {FLAG (TDLS_WIDER_BW ),FLAG (SUPPORTS_AMSDU_IN_AMPDU ),FLAG (BEACON_TX_STATUS ), +FLAG (NEEDS_UNIQUE_STA_ADDR ), #undef FLAG };
net/mac80211/rc80211_minstrel.c +5 -22
@@ -274,7 +274,7 @@ minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband, success = !!(info->flags &IEEE80211_TX_STAT_ACK );for (i =0 ; i <IEEE80211_TX_MAX_RATES ; i++) { -if (ar[i].idx <0 ) +if (ar[i].idx <0 || !ar[i].count)break ; ndx =rix_to_ndx (mi, ar[i].idx);
@@ -287,12 +287,6 @@ minstrel_tx_status(void *priv, struct ieee80211_supported_band *sband, mi->r[ndx].stats.success += success; } -if ((info->flags &IEEE80211_TX_CTL_RATE_CTRL_PROBE ) && (i >=0 )) - mi->sample_packets++; - -if (mi->sample_deferred >0 ) - mi->sample_deferred--; -if (time_after (jiffies, mi->last_stats_update + (mp->update_interval *HZ ) /1000 ))minstrel_update_stats (mp, mi);
@@ -366,7 +360,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,#endif delta = (mi->total_packets * sampling_ratio /100 ) - - (mi->sample_packets + mi->sample_deferred /2 ); + mi->sample_packets;/* delta < 0: no sampling required */ prev_sample = mi->prev_sample;
@@ -375,7 +369,6 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,return ;if (mi->total_packets >=10000 ) { - mi->sample_deferred =0 ; mi->sample_packets =0 ; mi->total_packets =0 ; }else if (delta > mi->n_rates *2 ) {
@@ -400,19 +393,8 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,* rate sampling method should be used. * Respect such rates that are not sampled for 20 interations. */ -if (mrr_capable && - msr->perfect_tx_time > mr->perfect_tx_time && - msr->stats.sample_skipped <20 ) { -/* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to mark -* packets that have the sampling rate deferred to the -* second MRR stage. Increase the sample counter only -* if the deferred sample rate was actually used. -* Use the sample_deferred counter to make sure that -* the sampling is not done in large bursts */ - info->flags |=IEEE80211_TX_CTL_RATE_CTRL_PROBE ; - rate++; - mi->sample_deferred++; - }else { +if (msr->perfect_tx_time < mr->perfect_tx_time || + msr->stats.sample_skipped >=20 ) {if (!msr->sample_limit)return ;
@@ -432,6 +414,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta, rate->idx = mi->r[ndx].rix; rate->count =minstrel_get_retry_count (&mi->r[ndx], info); + info->flags |=IEEE80211_TX_CTL_RATE_CTRL_PROBE ; }
net/mac80211/rc80211_minstrel.h +0 -1
@@ -105,7 +105,6 @@ struct minstrel_sta_info {u8 max_prob_rate;unsigned int total_packets;unsigned int sample_packets; -int sample_deferred;unsigned int sample_row;unsigned int sample_column;
net/mac80211/sta_info.c +20 -12
@@ -457,6 +457,19 @@ static int sta_info_insert_check(struct sta_info *sta) is_multicast_ether_addr(sta->sta.addr)))return -EINVAL ; +/* Strictly speaking this isn't necessary as we hold the mutex, but +* the rhashtable code can't really deal with that distinction. We +* do require the mutex for correctness though. +*/ +rcu_read_lock (); +lockdep_assert_held (&sdata->local->sta_mtx); +if (ieee80211_hw_check (&sdata->local->hw,NEEDS_UNIQUE_STA_ADDR ) && +ieee80211_find_sta_by_ifaddr (&sdata->local->hw, sta->addr,NULL )) { +rcu_read_unlock (); +return -ENOTUNIQ ; + } +rcu_read_unlock (); +return 0 ; }
@@ -570,7 +583,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU) out_drop_sta: local->num_sta--;synchronize_net (); -__cleanup_single_sta (sta); +cleanup_single_sta (sta); out_err:mutex_unlock (&local->sta_mtx);kfree (sinfo);
@@ -585,22 +598,17 @@ int sta_info_insert_rcu(struct sta_info *sta) __acquires(RCU)might_sleep (); +mutex_lock (&local->sta_mtx); + err =sta_info_insert_check (sta);if (err) { +sta_info_free (local, sta); +mutex_unlock (&local->sta_mtx);rcu_read_lock (); - goto out_free; +return err; } -mutex_lock (&local->sta_mtx); - - err =sta_info_insert_finish (sta); -if (err) - goto out_free; - -return 0 ; - out_free: -sta_info_free (local, sta); -return err; +return sta_info_insert_finish (sta); }int sta_info_insert (struct sta_info *sta)
net/netlabel/netlabel_unlabeled.c +12 -5
@@ -1185,12 +1185,13 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,struct netlbl_unlhsh_walk_arg cb_arg;u32 skip_bkt = cb->args[0 ];u32 skip_chain = cb->args[1 ]; -u32 iter_bkt; -u32 iter_chain =0 , iter_addr4 =0 , iter_addr6 =0 ; +u32 skip_addr4 = cb->args[2 ]; +u32 iter_bkt, iter_chain =0 , iter_addr4 =0 , iter_addr6 =0 ;struct netlbl_unlhsh_iface *iface;struct list_head *iter_list;struct netlbl_af4list *addr4;#if IS_ENABLED (CONFIG_IPV6 ) +u32 skip_addr6 = cb->args[3 ];struct netlbl_af6list *addr6;#endif
@@ -1201,7 +1202,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,rcu_read_lock ();for (iter_bkt = skip_bkt; iter_bkt <rcu_dereference (netlbl_unlhsh)->size; - iter_bkt++, iter_chain =0 , iter_addr4 =0 , iter_addr6 =0 ) { + iter_bkt++) { iter_list = &rcu_dereference (netlbl_unlhsh)->tbl[iter_bkt];list_for_each_entry_rcu (iface, iter_list, list) { if (!iface->valid ||
@@ -1209,7 +1210,7 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb,continue ;netlbl_af4list_foreach_rcu (addr4, &iface->addr4_list) { -if (iter_addr4++ < cb->args[2 ]) +if (iter_addr4++ < skip_addr4)continue ; if (netlbl_unlabel_staticlist_gen( NLBL_UNLABEL_C_STATICLIST,
@@ -1222,10 +1223,12 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, goto unlabel_staticlist_return; } } + iter_addr4 =0 ; + skip_addr4 =0 ;#if IS_ENABLED (CONFIG_IPV6 )netlbl_af6list_foreach_rcu (addr6, &iface->addr6_list) { -if (iter_addr6++ < cb->args[3 ]) +if (iter_addr6++ < skip_addr6)continue ; if (netlbl_unlabel_staticlist_gen( NLBL_UNLABEL_C_STATICLIST,
@@ -1238,8 +1241,12 @@ static int netlbl_unlabel_staticlist(struct sk_buff *skb, goto unlabel_staticlist_return; } } + iter_addr6 =0 ; + skip_addr6 =0 ;#endif /* IPv6 */ } + iter_chain =0 ; + skip_chain =0 ; } unlabel_staticlist_return:
net/sctp/input.c +2 -2
@@ -448,7 +448,7 @@ void sctp_icmp_proto_unreachable(struct sock *sk,else {if (!mod_timer (&t->proto_unreach_timer, jiffies + (HZ /20 ))) -sctp_association_hold (asoc); +sctp_transport_hold (t); } }else {struct net *net =sock_net (sk);
@@ -457,7 +457,7 @@ void sctp_icmp_proto_unreachable(struct sock *sk, "encountered!\n", __func__);if (del_timer (&t->proto_unreach_timer)) -sctp_association_put (asoc); +sctp_transport_put (t); sctp_do_sm(net, SCTP_EVENT_T_OTHER, SCTP_ST_OTHER(SCTP_EVENT_ICMP_PROTO_UNREACH),
net/sctp/sm_sideeffect.c +2 -2
@@ -416,7 +416,7 @@ void sctp_generate_proto_unreach_event(unsigned long data)/* Try again later. */ if (!mod_timer (&transport->proto_unreach_timer, jiffies + (HZ /20 ))) -sctp_association_hold (asoc); +sctp_transport_hold (transport); goto out_unlock; }
@@ -432,7 +432,7 @@ void sctp_generate_proto_unreach_event(unsigned long data) out_unlock:bh_unlock_sock (sk); -sctp_association_put (asoc); +sctp_transport_put (transport); }
net/sctp/transport.c +1 -1
@@ -148,7 +148,7 @@ void sctp_transport_free(struct sctp_transport *transport)/* Delete the ICMP proto unreachable timer if it's active. */ if (del_timer (&transport->proto_unreach_timer)) -sctp_association_put (transport->asoc); +sctp_transport_put (transport);sctp_transport_put (transport); }
net/x25/af_x25.c +1 -0
@@ -1047,6 +1047,7 @@ int x25_rx_call_request(struct sk_buff *skb, struct x25_neigh *nb, makex25->lci = lci; makex25->dest_addr = dest_addr; makex25->source_addr = source_addr; +x25_neigh_hold (nb); makex25->neighbour = nb; makex25->facilities = facilities; makex25->dte_facilities= dte_facilities;
sound/core/control.c +1 -1
@@ -1349,7 +1349,7 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file, unlock:up_write (&card->controls_rwsem); -return 0 ; +return err; } static int snd_ctl_elem_add_user(struct snd_ctl_file *file,
sound/pci/mixart/mixart_core.c +2 -3
@@ -83,7 +83,6 @@ static int get_msg(struct mixart_mgr *mgr, struct mixart_msg *resp,unsigned int i;#endif -mutex_lock (&mgr->msg_lock); err =0 ;/* copy message descriptor from miXart to driver */
@@ -132,8 +131,6 @@ static int get_msg(struct mixart_mgr *mgr, struct mixart_msg *resp,writel_be (headptr,MIXART_MEM (mgr,MSG_OUTBOUND_FREE_HEAD )); _clean_exit: -mutex_unlock (&mgr->msg_lock); -return err; }
@@ -271,7 +268,9 @@ int snd_mixart_send_msg(struct mixart_mgr *mgr, struct mixart_msg *request, int resp.data = resp_data; resp.size = max_resp_size; +mutex_lock (&mgr->msg_lock); err =get_msg (mgr, &resp, msg_frame); +mutex_unlock (&mgr->msg_lock);if ( request->message_id != resp.message_id )dev_err (&mgr->pci->dev,"RESPONSE ERROR!\n" );
tools/perf/builtin-lock.c +1 -1
@@ -616,7 +616,7 @@ static int report_lock_release_event(struct perf_evsel *evsel,case SEQ_STATE_READ_ACQUIRED : seq->read_count--;BUG_ON (seq->read_count <0 ); -if (!seq->read_count) { +if (seq->read_count) { ls->nr_release++; goto end; }