| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * linux/drivers/net/ethernet/ibm/ehea/ehea_main.c |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 9 | 10 | * Christoph Raisch <raisch@de.ibm.com> |
|---|
| 10 | 11 | * Jan-Bernd Themann <themann@de.ibm.com> |
|---|
| 11 | 12 | * Thomas Klein <tklein@de.ibm.com> |
|---|
| 12 | | - * |
|---|
| 13 | | - * |
|---|
| 14 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 15 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 16 | | - * the Free Software Foundation; either version 2, or (at your option) |
|---|
| 17 | | - * any later version. |
|---|
| 18 | | - * |
|---|
| 19 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 20 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 21 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 22 | | - * GNU General Public License for more details. |
|---|
| 23 | | - * |
|---|
| 24 | | - * You should have received a copy of the GNU General Public License |
|---|
| 25 | | - * along with this program; if not, write to the Free Software |
|---|
| 26 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|---|
| 27 | 13 | */ |
|---|
| 28 | 14 | |
|---|
| 29 | 15 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
|---|
| .. | .. |
|---|
| 778 | 764 | { |
|---|
| 779 | 765 | struct ehea_swqe *swqe; |
|---|
| 780 | 766 | int swqe_index; |
|---|
| 781 | | - int i, k; |
|---|
| 767 | + int i; |
|---|
| 782 | 768 | |
|---|
| 783 | 769 | for (i = 0; i < port->num_def_qps; i++) { |
|---|
| 784 | 770 | struct ehea_port_res *pr = &port->port_res[i]; |
|---|
| 785 | 771 | int ret; |
|---|
| 786 | | - k = 0; |
|---|
| 787 | 772 | swqe = ehea_get_swqe(pr->qp, &swqe_index); |
|---|
| 788 | 773 | memset(swqe, 0, SWQE_HEADER_SIZE); |
|---|
| 789 | 774 | atomic_dec(&pr->swqe_avail); |
|---|
| .. | .. |
|---|
| 1227 | 1212 | } |
|---|
| 1228 | 1213 | } |
|---|
| 1229 | 1214 | |
|---|
| 1230 | | -static void ehea_neq_tasklet(unsigned long data) |
|---|
| 1215 | +static void ehea_neq_tasklet(struct tasklet_struct *t) |
|---|
| 1231 | 1216 | { |
|---|
| 1232 | | - struct ehea_adapter *adapter = (struct ehea_adapter *)data; |
|---|
| 1217 | + struct ehea_adapter *adapter = from_tasklet(adapter, t, neq_tasklet); |
|---|
| 1233 | 1218 | struct ehea_eqe *eqe; |
|---|
| 1234 | 1219 | u64 event_mask; |
|---|
| 1235 | 1220 | |
|---|
| .. | .. |
|---|
| 1592 | 1577 | ehea_destroy_eq(pr->eq); |
|---|
| 1593 | 1578 | |
|---|
| 1594 | 1579 | for (i = 0; i < pr->rq1_skba.len; i++) |
|---|
| 1595 | | - if (pr->rq1_skba.arr[i]) |
|---|
| 1596 | | - dev_kfree_skb(pr->rq1_skba.arr[i]); |
|---|
| 1580 | + dev_kfree_skb(pr->rq1_skba.arr[i]); |
|---|
| 1597 | 1581 | |
|---|
| 1598 | 1582 | for (i = 0; i < pr->rq2_skba.len; i++) |
|---|
| 1599 | | - if (pr->rq2_skba.arr[i]) |
|---|
| 1600 | | - dev_kfree_skb(pr->rq2_skba.arr[i]); |
|---|
| 1583 | + dev_kfree_skb(pr->rq2_skba.arr[i]); |
|---|
| 1601 | 1584 | |
|---|
| 1602 | 1585 | for (i = 0; i < pr->rq3_skba.len; i++) |
|---|
| 1603 | | - if (pr->rq3_skba.arr[i]) |
|---|
| 1604 | | - dev_kfree_skb(pr->rq3_skba.arr[i]); |
|---|
| 1586 | + dev_kfree_skb(pr->rq3_skba.arr[i]); |
|---|
| 1605 | 1587 | |
|---|
| 1606 | 1588 | for (i = 0; i < pr->sq_skba.len; i++) |
|---|
| 1607 | | - if (pr->sq_skba.arr[i]) |
|---|
| 1608 | | - dev_kfree_skb(pr->sq_skba.arr[i]); |
|---|
| 1589 | + dev_kfree_skb(pr->sq_skba.arr[i]); |
|---|
| 1609 | 1590 | |
|---|
| 1610 | 1591 | vfree(pr->rq1_skba.arr); |
|---|
| 1611 | 1592 | vfree(pr->rq2_skba.arr); |
|---|
| .. | .. |
|---|
| 2806 | 2787 | return; |
|---|
| 2807 | 2788 | } |
|---|
| 2808 | 2789 | |
|---|
| 2809 | | -static void ehea_tx_watchdog(struct net_device *dev) |
|---|
| 2790 | +static void ehea_tx_watchdog(struct net_device *dev, unsigned int txqueue) |
|---|
| 2810 | 2791 | { |
|---|
| 2811 | 2792 | struct ehea_port *port = netdev_priv(dev); |
|---|
| 2812 | 2793 | |
|---|
| .. | .. |
|---|
| 2916 | 2897 | ret = of_device_register(&port->ofdev); |
|---|
| 2917 | 2898 | if (ret) { |
|---|
| 2918 | 2899 | pr_err("failed to register device. ret=%d\n", ret); |
|---|
| 2900 | + put_device(&port->ofdev.dev); |
|---|
| 2919 | 2901 | goto out; |
|---|
| 2920 | 2902 | } |
|---|
| 2921 | 2903 | |
|---|
| .. | .. |
|---|
| 3267 | 3249 | switch (action) { |
|---|
| 3268 | 3250 | case MEM_CANCEL_OFFLINE: |
|---|
| 3269 | 3251 | pr_info("memory offlining canceled"); |
|---|
| 3270 | | - /* Fall through: re-add canceled memory block */ |
|---|
| 3252 | + fallthrough; /* re-add canceled memory block */ |
|---|
| 3271 | 3253 | |
|---|
| 3272 | 3254 | case MEM_ONLINE: |
|---|
| 3273 | 3255 | pr_info("memory is going online"); |
|---|
| .. | .. |
|---|
| 3437 | 3419 | goto out_free_ad; |
|---|
| 3438 | 3420 | } |
|---|
| 3439 | 3421 | |
|---|
| 3440 | | - tasklet_init(&adapter->neq_tasklet, ehea_neq_tasklet, |
|---|
| 3441 | | - (unsigned long)adapter); |
|---|
| 3422 | + tasklet_setup(&adapter->neq_tasklet, ehea_neq_tasklet); |
|---|
| 3442 | 3423 | |
|---|
| 3443 | 3424 | ret = ehea_create_device_sysfs(dev); |
|---|
| 3444 | 3425 | if (ret) |
|---|