466 lines
16 KiB
Diff
466 lines
16 KiB
Diff
|
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt
|
||
|
index 57f52cdce32e4..07b53b2b13df8 100644
|
||
|
--- a/Documentation/networking/bonding.txt
|
||
|
+++ b/Documentation/networking/bonding.txt
|
||
|
@@ -191,11 +191,12 @@ ad_actor_sys_prio
|
||
|
ad_actor_system
|
||
|
|
||
|
In an AD system, this specifies the mac-address for the actor in
|
||
|
- protocol packet exchanges (LACPDUs). The value cannot be NULL or
|
||
|
- multicast. It is preferred to have the local-admin bit set for this
|
||
|
- mac but driver does not enforce it. If the value is not given then
|
||
|
- system defaults to using the masters' mac address as actors' system
|
||
|
- address.
|
||
|
+ protocol packet exchanges (LACPDUs). The value cannot be a multicast
|
||
|
+ address. If the all-zeroes MAC is specified, bonding will internally
|
||
|
+ use the MAC of the bond itself. It is preferred to have the
|
||
|
+ local-admin bit set for this mac but driver does not enforce it. If
|
||
|
+ the value is not given then system defaults to using the masters'
|
||
|
+ mac address as actors' system address.
|
||
|
|
||
|
This parameter has effect only in 802.3ad mode and is available through
|
||
|
SysFs interface.
|
||
|
diff --git a/Makefile b/Makefile
|
||
|
index 6f3b4e1e9a144..b5afdb8a75219 100644
|
||
|
--- a/Makefile
|
||
|
+++ b/Makefile
|
||
|
@@ -1,6 +1,6 @@
|
||
|
VERSION = 4
|
||
|
PATCHLEVEL = 9
|
||
|
-SUBLEVEL = 294
|
||
|
+SUBLEVEL = 295
|
||
|
EXTRAVERSION =
|
||
|
NAME = Roaring Lionus
|
||
|
|
||
|
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
|
||
|
index 9f157e7c51e75..2cac25a69a85d 100644
|
||
|
--- a/arch/arm/kernel/entry-armv.S
|
||
|
+++ b/arch/arm/kernel/entry-armv.S
|
||
|
@@ -631,11 +631,9 @@ call_fpe:
|
||
|
tstne r0, #0x04000000 @ bit 26 set on both ARM and Thumb-2
|
||
|
reteq lr
|
||
|
and r8, r0, #0x00000f00 @ mask out CP number
|
||
|
- THUMB( lsr r8, r8, #8 )
|
||
|
mov r7, #1
|
||
|
- add r6, r10, #TI_USED_CP
|
||
|
- ARM( strb r7, [r6, r8, lsr #8] ) @ set appropriate used_cp[]
|
||
|
- THUMB( strb r7, [r6, r8] ) @ set appropriate used_cp[]
|
||
|
+ add r6, r10, r8, lsr #8 @ add used_cp[] array offset first
|
||
|
+ strb r7, [r6, #TI_USED_CP] @ set appropriate used_cp[]
|
||
|
#ifdef CONFIG_IWMMXT
|
||
|
@ Test if we need to give access to iWMMXt coprocessors
|
||
|
ldr r5, [r10, #TI_FLAGS]
|
||
|
@@ -644,7 +642,7 @@ call_fpe:
|
||
|
bcs iwmmxt_task_enable
|
||
|
#endif
|
||
|
ARM( add pc, pc, r8, lsr #6 )
|
||
|
- THUMB( lsl r8, r8, #2 )
|
||
|
+ THUMB( lsr r8, r8, #6 )
|
||
|
THUMB( add pc, r8 )
|
||
|
nop
|
||
|
|
||
|
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
|
||
|
index e638e3bc3cb8a..6c40afcfe5b16 100644
|
||
|
--- a/arch/x86/include/asm/pgtable.h
|
||
|
+++ b/arch/x86/include/asm/pgtable.h
|
||
|
@@ -1028,8 +1028,8 @@ static inline pte_t pte_swp_clear_soft_dirty(pte_t pte)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
-#define PKRU_AD_BIT 0x1
|
||
|
-#define PKRU_WD_BIT 0x2
|
||
|
+#define PKRU_AD_BIT 0x1u
|
||
|
+#define PKRU_WD_BIT 0x2u
|
||
|
#define PKRU_BITS_PER_PKEY 2
|
||
|
|
||
|
static inline bool __pkru_allows_read(u32 pkru, u16 pkey)
|
||
|
diff --git a/drivers/hid/hid-holtek-mouse.c b/drivers/hid/hid-holtek-mouse.c
|
||
|
index 27c08ddab0e1a..96db7e96fcea9 100644
|
||
|
--- a/drivers/hid/hid-holtek-mouse.c
|
||
|
+++ b/drivers/hid/hid-holtek-mouse.c
|
||
|
@@ -68,8 +68,23 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||
|
static int holtek_mouse_probe(struct hid_device *hdev,
|
||
|
const struct hid_device_id *id)
|
||
|
{
|
||
|
+ int ret;
|
||
|
+
|
||
|
if (!hid_is_usb(hdev))
|
||
|
return -EINVAL;
|
||
|
+
|
||
|
+ ret = hid_parse(hdev);
|
||
|
+ if (ret) {
|
||
|
+ hid_err(hdev, "hid parse failed: %d\n", ret);
|
||
|
+ return ret;
|
||
|
+ }
|
||
|
+
|
||
|
+ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
|
||
|
+ if (ret) {
|
||
|
+ hid_err(hdev, "hw start failed: %d\n", ret);
|
||
|
+ return ret;
|
||
|
+ }
|
||
|
+
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
|
||
|
index 293d1184976b3..1e9f029a328a6 100644
|
||
|
--- a/drivers/hwmon/lm90.c
|
||
|
+++ b/drivers/hwmon/lm90.c
|
||
|
@@ -196,6 +196,7 @@ enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
|
||
|
#define LM90_STATUS_RHIGH (1 << 4) /* remote high temp limit tripped */
|
||
|
#define LM90_STATUS_LLOW (1 << 5) /* local low temp limit tripped */
|
||
|
#define LM90_STATUS_LHIGH (1 << 6) /* local high temp limit tripped */
|
||
|
+#define LM90_STATUS_BUSY (1 << 7) /* conversion is ongoing */
|
||
|
|
||
|
#define MAX6696_STATUS2_R2THRM (1 << 1) /* remote2 THERM limit tripped */
|
||
|
#define MAX6696_STATUS2_R2OPEN (1 << 2) /* remote2 is an open circuit */
|
||
|
@@ -692,7 +693,7 @@ static int lm90_update_device(struct device *dev)
|
||
|
val = lm90_read_reg(client, LM90_REG_R_STATUS);
|
||
|
if (val < 0)
|
||
|
return val;
|
||
|
- data->alarms = val; /* lower 8 bit of alarms */
|
||
|
+ data->alarms = val & ~LM90_STATUS_BUSY;
|
||
|
|
||
|
if (data->kind == max6696) {
|
||
|
val = lm90_select_remote_channel(client, data, 1);
|
||
|
@@ -1345,12 +1346,11 @@ static int lm90_detect(struct i2c_client *client,
|
||
|
if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0)
|
||
|
return -ENODEV;
|
||
|
|
||
|
- if (man_id == 0x01 || man_id == 0x5C || man_id == 0x41) {
|
||
|
+ if (man_id == 0x01 || man_id == 0x5C || man_id == 0xA1) {
|
||
|
config2 = i2c_smbus_read_byte_data(client, LM90_REG_R_CONFIG2);
|
||
|
if (config2 < 0)
|
||
|
return -ENODEV;
|
||
|
- } else
|
||
|
- config2 = 0; /* Make compiler happy */
|
||
|
+ }
|
||
|
|
||
|
if ((address == 0x4C || address == 0x4D)
|
||
|
&& man_id == 0x01) { /* National Semiconductor */
|
||
|
diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband/hw/qib/qib_user_sdma.c
|
||
|
index 0dc15f95e7626..2d0b992579d6f 100644
|
||
|
--- a/drivers/infiniband/hw/qib/qib_user_sdma.c
|
||
|
+++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
|
||
|
@@ -946,7 +946,7 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
|
||
|
&addrlimit) ||
|
||
|
addrlimit > type_max(typeof(pkt->addrlimit))) {
|
||
|
ret = -EINVAL;
|
||
|
- goto free_pbc;
|
||
|
+ goto free_pkt;
|
||
|
}
|
||
|
pkt->addrlimit = addrlimit;
|
||
|
|
||
|
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
|
||
|
index 258cb3999b0e3..5c6a962363096 100644
|
||
|
--- a/drivers/net/bonding/bond_options.c
|
||
|
+++ b/drivers/net/bonding/bond_options.c
|
||
|
@@ -1408,7 +1408,7 @@ static int bond_option_ad_actor_system_set(struct bonding *bond,
|
||
|
mac = (u8 *)&newval->value;
|
||
|
}
|
||
|
|
||
|
- if (!is_valid_ether_addr(mac))
|
||
|
+ if (is_multicast_ether_addr(mac))
|
||
|
goto err;
|
||
|
|
||
|
netdev_info(bond->dev, "Setting ad_actor_system to %pM\n", mac);
|
||
|
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
|
||
|
index 792a1afabf5d1..5ab088d02fbad 100644
|
||
|
--- a/drivers/net/can/usb/kvaser_usb.c
|
||
|
+++ b/drivers/net/can/usb/kvaser_usb.c
|
||
|
@@ -31,7 +31,10 @@
|
||
|
#define USB_SEND_TIMEOUT 1000 /* msecs */
|
||
|
#define USB_RECV_TIMEOUT 1000 /* msecs */
|
||
|
#define RX_BUFFER_SIZE 3072
|
||
|
-#define CAN_USB_CLOCK 8000000
|
||
|
+#define KVASER_USB_CAN_CLOCK_8MHZ 8000000
|
||
|
+#define KVASER_USB_CAN_CLOCK_16MHZ 16000000
|
||
|
+#define KVASER_USB_CAN_CLOCK_24MHZ 24000000
|
||
|
+#define KVASER_USB_CAN_CLOCK_32MHZ 32000000
|
||
|
#define MAX_NET_DEVICES 3
|
||
|
#define MAX_USBCAN_NET_DEVICES 2
|
||
|
|
||
|
@@ -142,6 +145,12 @@ static inline bool kvaser_is_usbcan(const struct usb_device_id *id)
|
||
|
#define CMD_LEAF_USB_THROTTLE 77
|
||
|
#define CMD_LEAF_LOG_MESSAGE 106
|
||
|
|
||
|
+/* Leaf frequency options */
|
||
|
+#define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
|
||
|
+#define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
|
||
|
+#define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
|
||
|
+#define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
|
||
|
+
|
||
|
/* error factors */
|
||
|
#define M16C_EF_ACKE BIT(0)
|
||
|
#define M16C_EF_CRCE BIT(1)
|
||
|
@@ -472,6 +481,8 @@ struct kvaser_usb {
|
||
|
bool rxinitdone;
|
||
|
void *rxbuf[MAX_RX_URBS];
|
||
|
dma_addr_t rxbuf_dma[MAX_RX_URBS];
|
||
|
+
|
||
|
+ struct can_clock clock;
|
||
|
};
|
||
|
|
||
|
struct kvaser_usb_net_priv {
|
||
|
@@ -652,6 +663,27 @@ static int kvaser_usb_send_simple_msg(const struct kvaser_usb *dev,
|
||
|
return rc;
|
||
|
}
|
||
|
|
||
|
+static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev,
|
||
|
+ const struct leaf_msg_softinfo *softinfo)
|
||
|
+{
|
||
|
+ u32 sw_options = le32_to_cpu(softinfo->sw_options);
|
||
|
+
|
||
|
+ dev->fw_version = le32_to_cpu(softinfo->fw_version);
|
||
|
+ dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
|
||
|
+
|
||
|
+ switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
|
||
|
+ case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
|
||
|
+ dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ;
|
||
|
+ break;
|
||
|
+ case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
|
||
|
+ dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ;
|
||
|
+ break;
|
||
|
+ case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
|
||
|
+ dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ;
|
||
|
+ break;
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
|
||
|
{
|
||
|
struct kvaser_msg msg;
|
||
|
@@ -667,14 +699,13 @@ static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
|
||
|
|
||
|
switch (dev->family) {
|
||
|
case KVASER_LEAF:
|
||
|
- dev->fw_version = le32_to_cpu(msg.u.leaf.softinfo.fw_version);
|
||
|
- dev->max_tx_urbs =
|
||
|
- le16_to_cpu(msg.u.leaf.softinfo.max_outstanding_tx);
|
||
|
+ kvaser_usb_get_software_info_leaf(dev, &msg.u.leaf.softinfo);
|
||
|
break;
|
||
|
case KVASER_USBCAN:
|
||
|
dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version);
|
||
|
dev->max_tx_urbs =
|
||
|
le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx);
|
||
|
+ dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
@@ -1926,7 +1957,7 @@ static int kvaser_usb_init_one(struct usb_interface *intf,
|
||
|
kvaser_usb_reset_tx_urb_contexts(priv);
|
||
|
|
||
|
priv->can.state = CAN_STATE_STOPPED;
|
||
|
- priv->can.clock.freq = CAN_USB_CLOCK;
|
||
|
+ priv->can.clock.freq = dev->clock.freq;
|
||
|
priv->can.bittiming_const = &kvaser_usb_bittiming_const;
|
||
|
priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
|
||
|
priv->can.do_set_mode = kvaser_usb_set_mode;
|
||
|
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
|
||
|
index 5f327659efa7a..85b688f60b876 100644
|
||
|
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
|
||
|
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h
|
||
|
@@ -202,7 +202,7 @@ int qlcnic_sriov_get_vf_vport_info(struct qlcnic_adapter *,
|
||
|
struct qlcnic_info *, u16);
|
||
|
int qlcnic_sriov_cfg_vf_guest_vlan(struct qlcnic_adapter *, u16, u8);
|
||
|
void qlcnic_sriov_free_vlans(struct qlcnic_adapter *);
|
||
|
-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
|
||
|
+int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *);
|
||
|
bool qlcnic_sriov_check_any_vlan(struct qlcnic_vf_info *);
|
||
|
void qlcnic_sriov_del_vlan_id(struct qlcnic_sriov *,
|
||
|
struct qlcnic_vf_info *, u16);
|
||
|
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
|
||
|
index c58180f408448..44caa7c2077ec 100644
|
||
|
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
|
||
|
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
|
||
|
@@ -433,7 +433,7 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,
|
||
|
struct qlcnic_cmd_args *cmd)
|
||
|
{
|
||
|
struct qlcnic_sriov *sriov = adapter->ahw->sriov;
|
||
|
- int i, num_vlans;
|
||
|
+ int i, num_vlans, ret;
|
||
|
u16 *vlans;
|
||
|
|
||
|
if (sriov->allowed_vlans)
|
||
|
@@ -444,7 +444,9 @@ static int qlcnic_sriov_set_guest_vlan_mode(struct qlcnic_adapter *adapter,
|
||
|
dev_info(&adapter->pdev->dev, "Number of allowed Guest VLANs = %d\n",
|
||
|
sriov->num_allowed_vlans);
|
||
|
|
||
|
- qlcnic_sriov_alloc_vlans(adapter);
|
||
|
+ ret = qlcnic_sriov_alloc_vlans(adapter);
|
||
|
+ if (ret)
|
||
|
+ return ret;
|
||
|
|
||
|
if (!sriov->any_vlan)
|
||
|
return 0;
|
||
|
@@ -2164,7 +2166,7 @@ static int qlcnic_sriov_vf_resume(struct qlcnic_adapter *adapter)
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
-void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
|
||
|
+int qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
|
||
|
{
|
||
|
struct qlcnic_sriov *sriov = adapter->ahw->sriov;
|
||
|
struct qlcnic_vf_info *vf;
|
||
|
@@ -2174,7 +2176,11 @@ void qlcnic_sriov_alloc_vlans(struct qlcnic_adapter *adapter)
|
||
|
vf = &sriov->vf_info[i];
|
||
|
vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans,
|
||
|
sizeof(*vf->sriov_vlans), GFP_KERNEL);
|
||
|
+ if (!vf->sriov_vlans)
|
||
|
+ return -ENOMEM;
|
||
|
}
|
||
|
+
|
||
|
+ return 0;
|
||
|
}
|
||
|
|
||
|
void qlcnic_sriov_free_vlans(struct qlcnic_adapter *adapter)
|
||
|
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
|
||
|
index 50eaafa3eaba3..c9f2cd2462230 100644
|
||
|
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
|
||
|
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c
|
||
|
@@ -598,7 +598,9 @@ static int __qlcnic_pci_sriov_enable(struct qlcnic_adapter *adapter,
|
||
|
if (err)
|
||
|
goto del_flr_queue;
|
||
|
|
||
|
- qlcnic_sriov_alloc_vlans(adapter);
|
||
|
+ err = qlcnic_sriov_alloc_vlans(adapter);
|
||
|
+ if (err)
|
||
|
+ goto del_flr_queue;
|
||
|
|
||
|
return err;
|
||
|
|
||
|
diff --git a/drivers/net/ethernet/smsc/smc911x.c b/drivers/net/ethernet/smsc/smc911x.c
|
||
|
index d0cf971aa4ebe..4237bd311e0e6 100644
|
||
|
--- a/drivers/net/ethernet/smsc/smc911x.c
|
||
|
+++ b/drivers/net/ethernet/smsc/smc911x.c
|
||
|
@@ -2088,6 +2088,11 @@ static int smc911x_drv_probe(struct platform_device *pdev)
|
||
|
|
||
|
ndev->dma = (unsigned char)-1;
|
||
|
ndev->irq = platform_get_irq(pdev, 0);
|
||
|
+ if (ndev->irq < 0) {
|
||
|
+ ret = ndev->irq;
|
||
|
+ goto release_both;
|
||
|
+ }
|
||
|
+
|
||
|
lp = netdev_priv(ndev);
|
||
|
lp->netdev = ndev;
|
||
|
#ifdef SMC_DYNAMIC_BUS_CONFIG
|
||
|
diff --git a/drivers/net/fjes/fjes_main.c b/drivers/net/fjes/fjes_main.c
|
||
|
index 440047a239f57..26bb43a675131 100644
|
||
|
--- a/drivers/net/fjes/fjes_main.c
|
||
|
+++ b/drivers/net/fjes/fjes_main.c
|
||
|
@@ -1219,6 +1219,11 @@ static int fjes_probe(struct platform_device *plat_dev)
|
||
|
hw->hw_res.start = res->start;
|
||
|
hw->hw_res.size = resource_size(res);
|
||
|
hw->hw_res.irq = platform_get_irq(plat_dev, 0);
|
||
|
+ if (hw->hw_res.irq < 0) {
|
||
|
+ err = hw->hw_res.irq;
|
||
|
+ goto err_free_control_wq;
|
||
|
+ }
|
||
|
+
|
||
|
err = fjes_hw_init(&adapter->hw);
|
||
|
if (err)
|
||
|
goto err_free_control_wq;
|
||
|
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
|
||
|
index 76340bc3cf445..8d85cedb4bf5b 100644
|
||
|
--- a/drivers/net/hamradio/mkiss.c
|
||
|
+++ b/drivers/net/hamradio/mkiss.c
|
||
|
@@ -803,13 +803,14 @@ static void mkiss_close(struct tty_struct *tty)
|
||
|
*/
|
||
|
netif_stop_queue(ax->dev);
|
||
|
|
||
|
- /* Free all AX25 frame buffers. */
|
||
|
+ unregister_netdev(ax->dev);
|
||
|
+
|
||
|
+ /* Free all AX25 frame buffers after unreg. */
|
||
|
kfree(ax->rbuff);
|
||
|
kfree(ax->xbuff);
|
||
|
|
||
|
ax->tty = NULL;
|
||
|
|
||
|
- unregister_netdev(ax->dev);
|
||
|
free_netdev(ax->dev);
|
||
|
}
|
||
|
|
||
|
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
|
||
|
index 7752cc09a1da5..580c1e7666a45 100644
|
||
|
--- a/drivers/net/usb/lan78xx.c
|
||
|
+++ b/drivers/net/usb/lan78xx.c
|
||
|
@@ -67,6 +67,8 @@
|
||
|
#define LAN7850_USB_PRODUCT_ID (0x7850)
|
||
|
#define LAN78XX_EEPROM_MAGIC (0x78A5)
|
||
|
#define LAN78XX_OTP_MAGIC (0x78F3)
|
||
|
+#define AT29M2AF_USB_VENDOR_ID (0x07C9)
|
||
|
+#define AT29M2AF_USB_PRODUCT_ID (0x0012)
|
||
|
|
||
|
#define MII_READ 1
|
||
|
#define MII_WRITE 0
|
||
|
@@ -3756,6 +3758,10 @@ static const struct usb_device_id products[] = {
|
||
|
/* LAN7850 USB Gigabit Ethernet Device */
|
||
|
USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID),
|
||
|
},
|
||
|
+ {
|
||
|
+ /* ATM2-AF USB Gigabit Ethernet Device */
|
||
|
+ USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID),
|
||
|
+ },
|
||
|
{},
|
||
|
};
|
||
|
MODULE_DEVICE_TABLE(usb, products);
|
||
|
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
|
||
|
index 64fede18aa33f..f4c8567e91b38 100644
|
||
|
--- a/net/ax25/af_ax25.c
|
||
|
+++ b/net/ax25/af_ax25.c
|
||
|
@@ -88,8 +88,10 @@ static void ax25_kill_by_device(struct net_device *dev)
|
||
|
again:
|
||
|
ax25_for_each(s, &ax25_list) {
|
||
|
if (s->ax25_dev == ax25_dev) {
|
||
|
- s->ax25_dev = NULL;
|
||
|
spin_unlock_bh(&ax25_list_lock);
|
||
|
+ lock_sock(s->sk);
|
||
|
+ s->ax25_dev = NULL;
|
||
|
+ release_sock(s->sk);
|
||
|
ax25_disconnect(s, ENETUNREACH);
|
||
|
spin_lock_bh(&ax25_list_lock);
|
||
|
|
||
|
diff --git a/net/phonet/pep.c b/net/phonet/pep.c
|
||
|
index f6aa532bcbf64..1e7945df39928 100644
|
||
|
--- a/net/phonet/pep.c
|
||
|
+++ b/net/phonet/pep.c
|
||
|
@@ -956,6 +956,8 @@ static int pep_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
||
|
ret = -EBUSY;
|
||
|
else if (sk->sk_state == TCP_ESTABLISHED)
|
||
|
ret = -EISCONN;
|
||
|
+ else if (!pn->pn_sk.sobject)
|
||
|
+ ret = -EADDRNOTAVAIL;
|
||
|
else
|
||
|
ret = pep_sock_enable(sk, NULL, 0);
|
||
|
release_sock(sk);
|
||
|
diff --git a/sound/core/jack.c b/sound/core/jack.c
|
||
|
index f652e90efd7e7..5ddf81f091fa9 100644
|
||
|
--- a/sound/core/jack.c
|
||
|
+++ b/sound/core/jack.c
|
||
|
@@ -234,6 +234,10 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
|
||
|
return -ENOMEM;
|
||
|
|
||
|
jack->id = kstrdup(id, GFP_KERNEL);
|
||
|
+ if (jack->id == NULL) {
|
||
|
+ kfree(jack);
|
||
|
+ return -ENOMEM;
|
||
|
+ }
|
||
|
|
||
|
/* don't creat input device for phantom jack */
|
||
|
if (!phantom_jack) {
|
||
|
diff --git a/sound/drivers/opl3/opl3_midi.c b/sound/drivers/opl3/opl3_midi.c
|
||
|
index 7821b07415a78..ff67c4b67e264 100644
|
||
|
--- a/sound/drivers/opl3/opl3_midi.c
|
||
|
+++ b/sound/drivers/opl3/opl3_midi.c
|
||
|
@@ -415,7 +415,7 @@ void snd_opl3_note_on(void *p, int note, int vel, struct snd_midi_channel *chan)
|
||
|
}
|
||
|
if (instr_4op) {
|
||
|
vp2 = &opl3->voices[voice + 3];
|
||
|
- if (vp->state > 0) {
|
||
|
+ if (vp2->state > 0) {
|
||
|
opl3_reg = reg_side | (OPL3_REG_KEYON_BLOCK +
|
||
|
voice_offset + 3);
|
||
|
reg_val = vp->keyon_reg & ~OPL3_KEYON_BIT;
|