Skip to content

Commit 5211da9

Browse files
committed
Merge gitolite.kernel.org:/pub/scm/linux/kernel/git/davem/net
Dave writes: "Various fixes, all over the place: 1) OOB data generation fix in bluetooth, from Matias Karhumaa. 2) BPF BTF boundary calculation fix, from Martin KaFai Lau. 3) Don't bug on excessive frags, to be compatible in situations mixing older and newer kernels on each end. From Juergen Gross. 4) Scheduling in RCU fix in hv_netvsc, from Stephen Hemminger. 5) Zero keying information in TLS layer before freeing copies of them, from Sabrina Dubroca. 6) Fix NULL deref in act_sample, from Davide Caratti. 7) Orphan SKB before GRO in veth to prevent crashes with XDP, from Toshiaki Makita. 8) Fix use after free in ip6_xmit, from Eric Dumazet. 9) Fix VF mac address regression in bnxt_en, from Micahel Chan. 10) Fix MSG_PEEK behavior in TLS layer, from Daniel Borkmann. 11) Programming adjustments to r8169 which fix not being to enter deep sleep states on some machines, from Kai-Heng Feng and Hans de Goede. 12) Fix DST_NOCOUNT flag handling for ipv6 routes, from Peter Oskolkov." * gitolite.kernel.org:/pub/scm/linux/kernel/git/davem/net: (45 commits) net/ipv6: do not copy dst flags on rt init qmi_wwan: set DTR for modems in forced USB2 mode clk: x86: Stop marking clocks as CLK_IS_CRITICAL r8169: Get and enable optional ether_clk clock clk: x86: add "ether_clk" alias for Bay Trail / Cherry Trail r8169: enable ASPM on RTL8106E r8169: Align ASPM/CLKREQ setting function with vendor driver Revert "kcm: remove any offset before parsing messages" kcm: remove any offset before parsing messages net: ethernet: Fix a unused function warning. net: dsa: mv88e6xxx: Fix ATU Miss Violation tls: fix currently broken MSG_PEEK behavior hv_netvsc: pair VF based on serial number PCI: hv: support reporting serial number as slot information bnxt_en: Fix VF mac address regression. ipv6: fix possible use-after-free in ip6_xmit() net: hp100: fix always-true check for link up state ARM: dts: at91: add new compatibility string for macb on sama5d3 net: macb: disable scatter-gather for macb on sama5d3 net: mvpp2: let phylink manage the carrier state ...
2 parents 3918c21 + 30bfd93 commit 5211da9

File tree

45 files changed

+422
-201
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+422
-201
lines changed

Documentation/devicetree/bindings/net/macb.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Required properties:
1010
Use "cdns,pc302-gem" for Picochip picoXcell pc302 and later devices based on
1111
the Cadence GEM, or the generic form: "cdns,gem".
1212
Use "atmel,sama5d2-gem" for the GEM IP (10/100) available on Atmel sama5d2 SoCs.
13+
Use "atmel,sama5d3-macb" for the 10/100Mbit IP available on Atmel sama5d3 SoCs.
1314
Use "atmel,sama5d3-gem" for the Gigabit IP available on Atmel sama5d3 SoCs.
1415
Use "atmel,sama5d4-gem" for the GEM IP (10/100) available on Atmel sama5d4 SoCs.
1516
Use "cdns,zynq-gem" Xilinx Zynq-7xxx SoC.

arch/arm/boot/dts/sama5d3_emac.dtsi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
};
4242

4343
macb1: ethernet@f802c000 {
44-
compatible = "cdns,at91sam9260-macb", "cdns,macb";
44+
compatible = "atmel,sama5d3-macb", "cdns,at91sam9260-macb", "cdns,macb";
4545
reg = <0xf802c000 0x100>;
4646
interrupts = <35 IRQ_TYPE_LEVEL_HIGH 3>;
4747
pinctrl-names = "default";

drivers/bluetooth/hci_ldisc.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,8 @@ static void hci_uart_tty_close(struct tty_struct *tty)
543543
}
544544
clear_bit(HCI_UART_PROTO_SET, &hu->flags);
545545

546+
percpu_free_rwsem(&hu->proto_lock);
547+
546548
kfree(hu);
547549
}
548550

drivers/clk/x86/clk-pmc-atom.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ struct clk_plt_data {
5555
u8 nparents;
5656
struct clk_plt *clks[PMC_CLK_NUM];
5757
struct clk_lookup *mclk_lookup;
58+
struct clk_lookup *ether_clk_lookup;
5859
};
5960

6061
/* Return an index in parent table */
@@ -186,13 +187,6 @@ static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,
186187
pclk->reg = base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;
187188
spin_lock_init(&pclk->lock);
188189

189-
/*
190-
* If the clock was already enabled by the firmware mark it as critical
191-
* to avoid it being gated by the clock framework if no driver owns it.
192-
*/
193-
if (plt_clk_is_enabled(&pclk->hw))
194-
init.flags |= CLK_IS_CRITICAL;
195-
196190
ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);
197191
if (ret) {
198192
pclk = ERR_PTR(ret);
@@ -351,11 +345,20 @@ static int plt_clk_probe(struct platform_device *pdev)
351345
goto err_unreg_clk_plt;
352346
}
353347

348+
data->ether_clk_lookup = clkdev_hw_create(&data->clks[4]->hw,
349+
"ether_clk", NULL);
350+
if (!data->ether_clk_lookup) {
351+
err = -ENOMEM;
352+
goto err_drop_mclk;
353+
}
354+
354355
plt_clk_free_parent_names_loop(parent_names, data->nparents);
355356

356357
platform_set_drvdata(pdev, data);
357358
return 0;
358359

360+
err_drop_mclk:
361+
clkdev_drop(data->mclk_lookup);
359362
err_unreg_clk_plt:
360363
plt_clk_unregister_loop(data, i);
361364
plt_clk_unregister_parents(data);
@@ -369,6 +372,7 @@ static int plt_clk_remove(struct platform_device *pdev)
369372

370373
data = platform_get_drvdata(pdev);
371374

375+
clkdev_drop(data->ether_clk_lookup);
372376
clkdev_drop(data->mclk_lookup);
373377
plt_clk_unregister_loop(data, PMC_CLK_NUM);
374378
plt_clk_unregister_parents(data);

drivers/net/appletalk/ipddp.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,12 @@ static int ipddp_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
283283
case SIOCFINDIPDDPRT:
284284
spin_lock_bh(&ipddp_route_lock);
285285
rp = __ipddp_find_route(&rcp);
286-
if (rp)
287-
memcpy(&rcp2, rp, sizeof(rcp2));
286+
if (rp) {
287+
memset(&rcp2, 0, sizeof(rcp2));
288+
rcp2.ip = rp->ip;
289+
rcp2.at = rp->at;
290+
rcp2.flags = rp->flags;
291+
}
288292
spin_unlock_bh(&ipddp_route_lock);
289293

290294
if (rp) {

drivers/net/dsa/mv88e6xxx/global1.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
#define MV88E6XXX_G1_ATU_OP_GET_CLR_VIOLATION 0x7000
129129
#define MV88E6XXX_G1_ATU_OP_AGE_OUT_VIOLATION BIT(7)
130130
#define MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION BIT(6)
131-
#define MV88E6XXX_G1_ATU_OP_MISS_VIOLTATION BIT(5)
131+
#define MV88E6XXX_G1_ATU_OP_MISS_VIOLATION BIT(5)
132132
#define MV88E6XXX_G1_ATU_OP_FULL_VIOLATION BIT(4)
133133

134134
/* Offset 0x0C: ATU Data Register */

drivers/net/dsa/mv88e6xxx/global1_atu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
349349
chip->ports[entry.portvec].atu_member_violation++;
350350
}
351351

352-
if (val & MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION) {
352+
if (val & MV88E6XXX_G1_ATU_OP_MISS_VIOLATION) {
353353
dev_err_ratelimited(chip->dev,
354354
"ATU miss violation for %pM portvec %x\n",
355355
entry.mac, entry.portvec);

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8027,7 +8027,7 @@ static int bnxt_change_mac_addr(struct net_device *dev, void *p)
80278027
if (ether_addr_equal(addr->sa_data, dev->dev_addr))
80288028
return 0;
80298029

8030-
rc = bnxt_approve_mac(bp, addr->sa_data);
8030+
rc = bnxt_approve_mac(bp, addr->sa_data, true);
80318031
if (rc)
80328032
return rc;
80338033

@@ -8827,14 +8827,19 @@ static int bnxt_init_mac_addr(struct bnxt *bp)
88278827
} else {
88288828
#ifdef CONFIG_BNXT_SRIOV
88298829
struct bnxt_vf_info *vf = &bp->vf;
8830+
bool strict_approval = true;
88308831

88318832
if (is_valid_ether_addr(vf->mac_addr)) {
88328833
/* overwrite netdev dev_addr with admin VF MAC */
88338834
memcpy(bp->dev->dev_addr, vf->mac_addr, ETH_ALEN);
8835+
/* Older PF driver or firmware may not approve this
8836+
* correctly.
8837+
*/
8838+
strict_approval = false;
88348839
} else {
88358840
eth_hw_addr_random(bp->dev);
88368841
}
8837-
rc = bnxt_approve_mac(bp, bp->dev->dev_addr);
8842+
rc = bnxt_approve_mac(bp, bp->dev->dev_addr, strict_approval);
88388843
#endif
88398844
}
88408845
return rc;

drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ void bnxt_update_vf_mac(struct bnxt *bp)
11041104
mutex_unlock(&bp->hwrm_cmd_lock);
11051105
}
11061106

1107-
int bnxt_approve_mac(struct bnxt *bp, u8 *mac)
1107+
int bnxt_approve_mac(struct bnxt *bp, u8 *mac, bool strict)
11081108
{
11091109
struct hwrm_func_vf_cfg_input req = {0};
11101110
int rc = 0;
@@ -1122,12 +1122,13 @@ int bnxt_approve_mac(struct bnxt *bp, u8 *mac)
11221122
memcpy(req.dflt_mac_addr, mac, ETH_ALEN);
11231123
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
11241124
mac_done:
1125-
if (rc) {
1125+
if (rc && strict) {
11261126
rc = -EADDRNOTAVAIL;
11271127
netdev_warn(bp->dev, "VF MAC address %pM not approved by the PF\n",
11281128
mac);
1129+
return rc;
11291130
}
1130-
return rc;
1131+
return 0;
11311132
}
11321133
#else
11331134

@@ -1144,7 +1145,7 @@ void bnxt_update_vf_mac(struct bnxt *bp)
11441145
{
11451146
}
11461147

1147-
int bnxt_approve_mac(struct bnxt *bp, u8 *mac)
1148+
int bnxt_approve_mac(struct bnxt *bp, u8 *mac, bool strict)
11481149
{
11491150
return 0;
11501151
}

drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs);
3939
void bnxt_sriov_disable(struct bnxt *);
4040
void bnxt_hwrm_exec_fwd_req(struct bnxt *);
4141
void bnxt_update_vf_mac(struct bnxt *);
42-
int bnxt_approve_mac(struct bnxt *, u8 *);
42+
int bnxt_approve_mac(struct bnxt *, u8 *, bool);
4343
#endif

drivers/net/ethernet/cadence/macb_main.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3837,6 +3837,13 @@ static const struct macb_config at91sam9260_config = {
38373837
.init = macb_init,
38383838
};
38393839

3840+
static const struct macb_config sama5d3macb_config = {
3841+
.caps = MACB_CAPS_SG_DISABLED
3842+
| MACB_CAPS_USRIO_HAS_CLKEN | MACB_CAPS_USRIO_DEFAULT_IS_MII_GMII,
3843+
.clk_init = macb_clk_init,
3844+
.init = macb_init,
3845+
};
3846+
38403847
static const struct macb_config pc302gem_config = {
38413848
.caps = MACB_CAPS_SG_DISABLED | MACB_CAPS_GIGABIT_MODE_AVAILABLE,
38423849
.dma_burst_length = 16,
@@ -3904,6 +3911,7 @@ static const struct of_device_id macb_dt_ids[] = {
39043911
{ .compatible = "cdns,gem", .data = &pc302gem_config },
39053912
{ .compatible = "atmel,sama5d2-gem", .data = &sama5d2_config },
39063913
{ .compatible = "atmel,sama5d3-gem", .data = &sama5d3_config },
3914+
{ .compatible = "atmel,sama5d3-macb", .data = &sama5d3macb_config },
39073915
{ .compatible = "atmel,sama5d4-gem", .data = &sama5d4_config },
39083916
{ .compatible = "cdns,at91rm9200-emac", .data = &emac_config },
39093917
{ .compatible = "cdns,emac", .data = &emac_config },

drivers/net/ethernet/hp/hp100.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2634,7 +2634,7 @@ static int hp100_login_to_vg_hub(struct net_device *dev, u_short force_relogin)
26342634
/* Wait for link to drop */
26352635
time = jiffies + (HZ / 10);
26362636
do {
2637-
if (~(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
2637+
if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
26382638
break;
26392639
if (!in_interrupt())
26402640
schedule_timeout_interruptible(1);

drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ static struct {
5858
*/
5959
static void mvpp2_mac_config(struct net_device *dev, unsigned int mode,
6060
const struct phylink_link_state *state);
61+
static void mvpp2_mac_link_up(struct net_device *dev, unsigned int mode,
62+
phy_interface_t interface, struct phy_device *phy);
6163

6264
/* Queue modes */
6365
#define MVPP2_QDIST_SINGLE_MODE 0
@@ -3142,6 +3144,7 @@ static void mvpp2_start_dev(struct mvpp2_port *port)
31423144
mvpp22_mode_reconfigure(port);
31433145

31443146
if (port->phylink) {
3147+
netif_carrier_off(port->dev);
31453148
phylink_start(port->phylink);
31463149
} else {
31473150
/* Phylink isn't used as of now for ACPI, so the MAC has to be
@@ -3150,9 +3153,10 @@ static void mvpp2_start_dev(struct mvpp2_port *port)
31503153
*/
31513154
struct phylink_link_state state = {
31523155
.interface = port->phy_interface,
3153-
.link = 1,
31543156
};
31553157
mvpp2_mac_config(port->dev, MLO_AN_INBAND, &state);
3158+
mvpp2_mac_link_up(port->dev, MLO_AN_INBAND, port->phy_interface,
3159+
NULL);
31563160
}
31573161

31583162
netif_tx_start_all_queues(port->dev);
@@ -4495,10 +4499,6 @@ static void mvpp2_mac_config(struct net_device *dev, unsigned int mode,
44954499
return;
44964500
}
44974501

4498-
netif_tx_stop_all_queues(port->dev);
4499-
if (!port->has_phy)
4500-
netif_carrier_off(port->dev);
4501-
45024502
/* Make sure the port is disabled when reconfiguring the mode */
45034503
mvpp2_port_disable(port);
45044504

@@ -4523,16 +4523,7 @@ static void mvpp2_mac_config(struct net_device *dev, unsigned int mode,
45234523
if (port->priv->hw_version == MVPP21 && port->flags & MVPP2_F_LOOPBACK)
45244524
mvpp2_port_loopback_set(port, state);
45254525

4526-
/* If the port already was up, make sure it's still in the same state */
4527-
if (state->link || !port->has_phy) {
4528-
mvpp2_port_enable(port);
4529-
4530-
mvpp2_egress_enable(port);
4531-
mvpp2_ingress_enable(port);
4532-
if (!port->has_phy)
4533-
netif_carrier_on(dev);
4534-
netif_tx_wake_all_queues(dev);
4535-
}
4526+
mvpp2_port_enable(port);
45364527
}
45374528

45384529
static void mvpp2_mac_link_up(struct net_device *dev, unsigned int mode,

drivers/net/ethernet/microchip/lan743x_main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2850,7 +2850,7 @@ static void lan743x_pcidev_shutdown(struct pci_dev *pdev)
28502850
lan743x_hardware_cleanup(adapter);
28512851
}
28522852

2853-
#ifdef CONFIG_PM
2853+
#ifdef CONFIG_PM_SLEEP
28542854
static u16 lan743x_pm_wakeframe_crc16(const u8 *buf, int len)
28552855
{
28562856
return bitrev16(crc16(0xFFFF, buf, len));
@@ -3016,7 +3016,7 @@ static int lan743x_pm_resume(struct device *dev)
30163016
static const struct dev_pm_ops lan743x_pm_ops = {
30173017
SET_SYSTEM_SLEEP_PM_OPS(lan743x_pm_suspend, lan743x_pm_resume)
30183018
};
3019-
#endif /*CONFIG_PM */
3019+
#endif /* CONFIG_PM_SLEEP */
30203020

30213021
static const struct pci_device_id lan743x_pcidev_tbl[] = {
30223022
{ PCI_DEVICE(PCI_VENDOR_ID_SMSC, PCI_DEVICE_ID_SMSC_LAN7430) },
@@ -3028,7 +3028,7 @@ static struct pci_driver lan743x_pcidev_driver = {
30283028
.id_table = lan743x_pcidev_tbl,
30293029
.probe = lan743x_pcidev_probe,
30303030
.remove = lan743x_pcidev_remove,
3031-
#ifdef CONFIG_PM
3031+
#ifdef CONFIG_PM_SLEEP
30323032
.driver.pm = &lan743x_pm_ops,
30333033
#endif
30343034
.shutdown = lan743x_pcidev_shutdown,

drivers/net/ethernet/realtek/r8169.c

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <linux/pci.h>
1414
#include <linux/netdevice.h>
1515
#include <linux/etherdevice.h>
16+
#include <linux/clk.h>
1617
#include <linux/delay.h>
1718
#include <linux/ethtool.h>
1819
#include <linux/phy.h>
@@ -665,6 +666,7 @@ struct rtl8169_private {
665666

666667
u16 event_slow;
667668
const struct rtl_coalesce_info *coalesce_info;
669+
struct clk *clk;
668670

669671
struct mdio_ops {
670672
void (*write)(struct rtl8169_private *, int, int);
@@ -4775,12 +4777,14 @@ static void rtl_pcie_state_l2l3_enable(struct rtl8169_private *tp, bool enable)
47754777
static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable)
47764778
{
47774779
if (enable) {
4778-
RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn);
47794780
RTL_W8(tp, Config5, RTL_R8(tp, Config5) | ASPM_en);
4781+
RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn);
47804782
} else {
47814783
RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~ClkReqEn);
47824784
RTL_W8(tp, Config5, RTL_R8(tp, Config5) & ~ASPM_en);
47834785
}
4786+
4787+
udelay(10);
47844788
}
47854789

47864790
static void rtl_hw_start_8168bb(struct rtl8169_private *tp)
@@ -5625,6 +5629,8 @@ static void rtl_hw_start_8402(struct rtl8169_private *tp)
56255629

56265630
static void rtl_hw_start_8106(struct rtl8169_private *tp)
56275631
{
5632+
rtl_hw_aspm_clkreq_enable(tp, false);
5633+
56285634
/* Force LAN exit from ASPM if Rx/Tx are not idle */
56295635
RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800);
56305636

@@ -5633,6 +5639,7 @@ static void rtl_hw_start_8106(struct rtl8169_private *tp)
56335639
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
56345640

56355641
rtl_pcie_state_l2l3_enable(tp, false);
5642+
rtl_hw_aspm_clkreq_enable(tp, true);
56365643
}
56375644

56385645
static void rtl_hw_start_8101(struct rtl8169_private *tp)
@@ -7257,6 +7264,11 @@ static int rtl_jumbo_max(struct rtl8169_private *tp)
72577264
}
72587265
}
72597266

7267+
static void rtl_disable_clk(void *data)
7268+
{
7269+
clk_disable_unprepare(data);
7270+
}
7271+
72607272
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
72617273
{
72627274
const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
@@ -7277,6 +7289,32 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
72777289
tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
72787290
tp->supports_gmii = cfg->has_gmii;
72797291

7292+
/* Get the *optional* external "ether_clk" used on some boards */
7293+
tp->clk = devm_clk_get(&pdev->dev, "ether_clk");
7294+
if (IS_ERR(tp->clk)) {
7295+
rc = PTR_ERR(tp->clk);
7296+
if (rc == -ENOENT) {
7297+
/* clk-core allows NULL (for suspend / resume) */
7298+
tp->clk = NULL;
7299+
} else if (rc == -EPROBE_DEFER) {
7300+
return rc;
7301+
} else {
7302+
dev_err(&pdev->dev, "failed to get clk: %d\n", rc);
7303+
return rc;
7304+
}
7305+
} else {
7306+
rc = clk_prepare_enable(tp->clk);
7307+
if (rc) {
7308+
dev_err(&pdev->dev, "failed to enable clk: %d\n", rc);
7309+
return rc;
7310+
}
7311+
7312+
rc = devm_add_action_or_reset(&pdev->dev, rtl_disable_clk,
7313+
tp->clk);
7314+
if (rc)
7315+
return rc;
7316+
}
7317+
72807318
/* enable device (incl. PCI PM wakeup and hotplug setup) */
72817319
rc = pcim_enable_device(pdev);
72827320
if (rc < 0) {

0 commit comments

Comments
 (0)