get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/831103/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 831103,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/831103/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20171027055438.GA88997@beast/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/7/?format=api",
        "name": "Linux network development",
        "link_name": "netdev",
        "list_id": "netdev.vger.kernel.org",
        "list_email": "netdev@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20171027055438.GA88997@beast>",
    "list_archive_url": null,
    "date": "2017-10-27T05:54:38",
    "name": "drivers/net: amd: Convert timers to use timer_setup()",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "30e6dea3918fea9d6f7803439f291745d89e83ff",
    "submitter": {
        "id": 10641,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/10641/?format=api",
        "name": "Kees Cook",
        "email": "keescook@chromium.org"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20171027055438.GA88997@beast/mbox/",
    "series": [
        {
            "id": 10509,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/10509/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=10509",
            "date": "2017-10-27T05:54:38",
            "name": "drivers/net: amd: Convert timers to use timer_setup()",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/10509/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/831103/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/831103/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"Yn90cy1W\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3yNY8l6Xmcz9t2Q\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 27 Oct 2017 16:58:47 +1100 (AEDT)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752054AbdJ0Fyn (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tFri, 27 Oct 2017 01:54:43 -0400",
            "from mail-pg0-f66.google.com ([74.125.83.66]:47727 \"EHLO\n\tmail-pg0-f66.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751170AbdJ0Fyl (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Fri, 27 Oct 2017 01:54:41 -0400",
            "by mail-pg0-f66.google.com with SMTP id r25so4512100pgn.4\n\tfor <netdev@vger.kernel.org>; Thu, 26 Oct 2017 22:54:40 -0700 (PDT)",
            "from www.outflux.net\n\t(173-164-112-133-Oregon.hfc.comcastbusiness.net. [173.164.112.133])\n\tby smtp.gmail.com with ESMTPSA id\n\tm24sm11752612pgc.76.2017.10.26.22.54.39\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 26 Oct 2017 22:54:39 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google;\n\th=date:from:to:cc:subject:message-id:mime-version:content-disposition;\n\tbh=4UTVhB7QL5WxSM+2aW19AyjIImeGK4ioY3dmL5JyKyM=;\n\tb=Yn90cy1WN/pTIoUduHCv0Irq9gB8wHiLhRvXf+54GzAfVtNrhwTHRH81Bdolj2FuWT\n\tYUqq6svTTh9RDfxuHQTmLRJWp9JtGXHOeJMCLdwGcbPnM+cI9VwKXKKwN3pRbDCiCI+o\n\tb1fRMPKDhlh1OMdklhJJzMzz2uXilHfCL6xcM=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version\n\t:content-disposition;\n\tbh=4UTVhB7QL5WxSM+2aW19AyjIImeGK4ioY3dmL5JyKyM=;\n\tb=RZuVdg5566yMeTkYSql52mLbLhpdQ7A/+BqbhqVZtbvwfSFpT5LpP4Ynj0eHyAdD/k\n\tTTRL1x9Wm54OlcFLDoGxhhtaGkrtsUVOIdYE1KT7KGWhwv58Tq96k6IID1aC963LMS+7\n\tHThiR0UiqGjYb8XtoSlvrGyw/xrJpujjGUNmzc+gW/MG1/lYAjJtlMkvqQcVzIxv7NlC\n\to78X+WD6E4P5pLAEJwCGDyol/AYzanQPSnhbvdyroYNCyXpy3hcmuzi1znsQJssYTjD9\n\tmwClURQSV+FP59zGkwwUHPdXSF2ogUWD9MCnDsFp/KEu49A6pGRJvdrh0lOvAHyKH273\n\tWkdQ==",
        "X-Gm-Message-State": "AMCzsaWXQnAeow4cUQHAesIhaLlZGVro17h5aegjqiF/QZu1huoB1qST\n\tAT2NjvpHWXOP7HCxzbgAIEljFg==",
        "X-Google-Smtp-Source": "ABhQp+R7n3I71ki6sqPuaVkS5XCnd/p8tBHE7MoPYSOZOq8C5rs7DEBw/7flLwBdjJOO9u6QzdUqhA==",
        "X-Received": "by 10.159.253.65 with SMTP id b1mr6205899plx.330.1509083680486; \n\tThu, 26 Oct 2017 22:54:40 -0700 (PDT)",
        "Date": "Thu, 26 Oct 2017 22:54:38 -0700",
        "From": "Kees Cook <keescook@chromium.org>",
        "To": "\"David S. Miller\" <davem@davemloft.net>",
        "Cc": "Tom Lendacky <thomas.lendacky@amd.com>,\n\tAllen Pais <allen.lkml@gmail.com>, netdev@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org",
        "Subject": "[PATCH] drivers/net: amd: Convert timers to use timer_setup()",
        "Message-ID": "<20171027055438.GA88997@beast>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=us-ascii",
        "Content-Disposition": "inline",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "In preparation for unconditionally passing the struct timer_list pointer to\nall timer callbacks, switch to using the new timer_setup() and from_timer()\nto pass the timer pointer explicitly.\n\nCc: Tom Lendacky <thomas.lendacky@amd.com>\nCc: \"David S. Miller\" <davem@davemloft.net>\nCc: Allen Pais <allen.lkml@gmail.com>\nCc: netdev@vger.kernel.org\nSigned-off-by: Kees Cook <keescook@chromium.org>\n---\n drivers/net/ethernet/amd/a2065.c         | 13 ++++++++++---\n drivers/net/ethernet/amd/am79c961a.c     |  9 +++++----\n drivers/net/ethernet/amd/am79c961a.h     |  1 +\n drivers/net/ethernet/amd/declance.c      | 10 ++++++----\n drivers/net/ethernet/amd/pcnet32.c       | 10 +++++-----\n drivers/net/ethernet/amd/sunlance.c      |  8 ++++----\n drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 14 ++++++--------\n 7 files changed, 37 insertions(+), 28 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/amd/a2065.c b/drivers/net/ethernet/amd/a2065.c\nindex 998d30e050a6..212fe72a190b 100644\n--- a/drivers/net/ethernet/amd/a2065.c\n+++ b/drivers/net/ethernet/amd/a2065.c\n@@ -123,6 +123,7 @@ struct lance_private {\n \tint burst_sizes;\t      /* ledma SBus burst sizes */\n #endif\n \tstruct timer_list         multicast_timer;\n+\tstruct net_device\t  *dev;\n };\n \n #define LANCE_ADDR(x) ((int)(x) & ~0xff000000)\n@@ -638,6 +639,13 @@ static void lance_set_multicast(struct net_device *dev)\n \tnetif_wake_queue(dev);\n }\n \n+static void lance_set_multicast_retry(struct timer_list *t)\n+{\n+\tstruct lance_private *lp = from_timer(lp, t, multicast_timer);\n+\n+\tlance_set_multicast(lp->dev);\n+}\n+\n static int a2065_init_one(struct zorro_dev *z,\n \t\t\t  const struct zorro_device_id *ent);\n static void a2065_remove_one(struct zorro_dev *z);\n@@ -728,14 +736,13 @@ static int a2065_init_one(struct zorro_dev *z,\n \tpriv->lance_log_tx_bufs = LANCE_LOG_TX_BUFFERS;\n \tpriv->rx_ring_mod_mask = RX_RING_MOD_MASK;\n \tpriv->tx_ring_mod_mask = TX_RING_MOD_MASK;\n+\tpriv->dev = dev;\n \n \tdev->netdev_ops = &lance_netdev_ops;\n \tdev->watchdog_timeo = 5*HZ;\n \tdev->dma = 0;\n \n-\tsetup_timer(&priv->multicast_timer,\n-\t\t    (void(*)(unsigned long))lance_set_multicast,\n-\t\t    (unsigned long)dev);\n+\ttimer_setup(&priv->multicast_timer, lance_set_multicast_retry, 0);\n \n \terr = register_netdev(dev);\n \tif (err) {\ndiff --git a/drivers/net/ethernet/amd/am79c961a.c b/drivers/net/ethernet/amd/am79c961a.c\nindex 0612dbee00d2..01d132c02ff9 100644\n--- a/drivers/net/ethernet/amd/am79c961a.c\n+++ b/drivers/net/ethernet/amd/am79c961a.c\n@@ -302,10 +302,10 @@ am79c961_init_for_open(struct net_device *dev)\n \twrite_rreg (dev->base_addr, CSR0, CSR0_IENA|CSR0_STRT);\n }\n \n-static void am79c961_timer(unsigned long data)\n+static void am79c961_timer(struct timer_list *t)\n {\n-\tstruct net_device *dev = (struct net_device *)data;\n-\tstruct dev_priv *priv = netdev_priv(dev);\n+\tstruct dev_priv *priv = from_timer(priv, t, timer);\n+\tstruct net_device *dev = priv->dev;\n \tunsigned int lnkstat, carrier;\n \tunsigned long flags;\n \n@@ -728,7 +728,8 @@ static int am79c961_probe(struct platform_device *pdev)\n \tam79c961_banner();\n \n \tspin_lock_init(&priv->chip_lock);\n-\tsetup_timer(&priv->timer, am79c961_timer, (unsigned long)dev);\n+\tpriv->dev = dev;\n+\ttimer_setup(&priv->timer, am79c961_timer, 0);\n \n \tif (am79c961_hw_init(dev))\n \t\tgoto release;\ndiff --git a/drivers/net/ethernet/amd/am79c961a.h b/drivers/net/ethernet/amd/am79c961a.h\nindex 9f384b79507b..fc5088c70731 100644\n--- a/drivers/net/ethernet/amd/am79c961a.h\n+++ b/drivers/net/ethernet/amd/am79c961a.h\n@@ -140,6 +140,7 @@ struct dev_priv {\n     unsigned long\ttxhdr;\n     spinlock_t\t\tchip_lock;\n     struct timer_list\ttimer;\n+    struct net_device   *dev;\n };\n \n #endif\ndiff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c\nindex 9bdf81c2cd00..116997a8b593 100644\n--- a/drivers/net/ethernet/amd/declance.c\n+++ b/drivers/net/ethernet/amd/declance.c\n@@ -260,6 +260,7 @@ struct lance_private {\n \tunsigned short busmaster_regval;\n \n \tstruct timer_list       multicast_timer;\n+\tstruct net_device\t*dev;\n \n \t/* Pointers to the ring buffers as seen from the CPU */\n \tchar *rx_buf_ptr_cpu[RX_RING_SIZE];\n@@ -1000,9 +1001,10 @@ static void lance_set_multicast(struct net_device *dev)\n \tnetif_wake_queue(dev);\n }\n \n-static void lance_set_multicast_retry(unsigned long _opaque)\n+static void lance_set_multicast_retry(struct timer_list *t)\n {\n-\tstruct net_device *dev = (struct net_device *) _opaque;\n+\tstruct lance_private *lp = from_timer(lp, t, multicast_timer);\n+\tstruct net_device *dev = lp->dev;\n \n \tlance_set_multicast(dev);\n }\n@@ -1246,8 +1248,8 @@ static int dec_lance_probe(struct device *bdev, const int type)\n \t * can occur from interrupts (ex. IPv6).  So we\n \t * use a timer to try again later when necessary. -DaveM\n \t */\n-\tsetup_timer(&lp->multicast_timer, lance_set_multicast_retry,\n-\t\t    (unsigned long)dev);\n+\tlp->dev = dev;\n+\ttimer_setup(&lp->multicast_timer, lance_set_multicast_retry, 0);\n \n \n \tret = register_netdev(dev);\ndiff --git a/drivers/net/ethernet/amd/pcnet32.c b/drivers/net/ethernet/amd/pcnet32.c\nindex e46153654016..a561705f232c 100644\n--- a/drivers/net/ethernet/amd/pcnet32.c\n+++ b/drivers/net/ethernet/amd/pcnet32.c\n@@ -321,7 +321,7 @@ static struct net_device_stats *pcnet32_get_stats(struct net_device *);\n static void pcnet32_load_multicast(struct net_device *dev);\n static void pcnet32_set_multicast_list(struct net_device *);\n static int pcnet32_ioctl(struct net_device *, struct ifreq *, int);\n-static void pcnet32_watchdog(struct net_device *);\n+static void pcnet32_watchdog(struct timer_list *);\n static int mdio_read(struct net_device *dev, int phy_id, int reg_num);\n static void mdio_write(struct net_device *dev, int phy_id, int reg_num,\n \t\t       int val);\n@@ -1970,8 +1970,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)\n \t\t\tlp->options |= PCNET32_PORT_MII;\n \t}\n \n-\tsetup_timer(&lp->watchdog_timer, (void *)&pcnet32_watchdog,\n-\t\t    (unsigned long)dev);\n+\ttimer_setup(&lp->watchdog_timer, pcnet32_watchdog, 0);\n \n \t/* The PCNET32-specific entries in the device structure. */\n \tdev->netdev_ops = &pcnet32_netdev_ops;\n@@ -2901,9 +2900,10 @@ static void pcnet32_check_media(struct net_device *dev, int verbose)\n  * Could possibly be changed to use mii_check_media instead.\n  */\n \n-static void pcnet32_watchdog(struct net_device *dev)\n+static void pcnet32_watchdog(struct timer_list *t)\n {\n-\tstruct pcnet32_private *lp = netdev_priv(dev);\n+\tstruct pcnet32_private *lp = from_timer(lp, t, watchdog_timer);\n+\tstruct net_device *dev = lp->dev;\n \tunsigned long flags;\n \n \t/* Print the link status if it has changed */\ndiff --git a/drivers/net/ethernet/amd/sunlance.c b/drivers/net/ethernet/amd/sunlance.c\nindex 0183ffb9d3ba..cdd7a611479b 100644\n--- a/drivers/net/ethernet/amd/sunlance.c\n+++ b/drivers/net/ethernet/amd/sunlance.c\n@@ -1248,9 +1248,10 @@ static void lance_set_multicast(struct net_device *dev)\n \tnetif_wake_queue(dev);\n }\n \n-static void lance_set_multicast_retry(unsigned long _opaque)\n+static void lance_set_multicast_retry(struct timer_list *t)\n {\n-\tstruct net_device *dev = (struct net_device *) _opaque;\n+\tstruct lance_private *lp = from_timer(lp, t, multicast_timer);\n+\tstruct net_device *dev = lp->dev;\n \n \tlance_set_multicast(dev);\n }\n@@ -1459,8 +1460,7 @@ static int sparc_lance_probe_one(struct platform_device *op,\n \t * can occur from interrupts (ex. IPv6).  So we\n \t * use a timer to try again later when necessary. -DaveM\n \t */\n-\tsetup_timer(&lp->multicast_timer, lance_set_multicast_retry,\n-\t\t    (unsigned long)dev);\n+\ttimer_setup(&lp->multicast_timer, lance_set_multicast_retry, 0);\n \n \tif (register_netdev(dev)) {\n \t\tprintk(KERN_ERR \"SunLance: Cannot register device.\\n\");\ndiff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c\nindex 608693d11bd7..3d53153ce751 100644\n--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c\n+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c\n@@ -642,9 +642,9 @@ static irqreturn_t xgbe_dma_isr(int irq, void *data)\n \treturn IRQ_HANDLED;\n }\n \n-static void xgbe_tx_timer(unsigned long data)\n+static void xgbe_tx_timer(struct timer_list *t)\n {\n-\tstruct xgbe_channel *channel = (struct xgbe_channel *)data;\n+\tstruct xgbe_channel *channel = from_timer(channel, t, tx_timer);\n \tstruct xgbe_prv_data *pdata = channel->pdata;\n \tstruct napi_struct *napi;\n \n@@ -680,9 +680,9 @@ static void xgbe_service(struct work_struct *work)\n \tpdata->phy_if.phy_status(pdata);\n }\n \n-static void xgbe_service_timer(unsigned long data)\n+static void xgbe_service_timer(struct timer_list *t)\n {\n-\tstruct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;\n+\tstruct xgbe_prv_data *pdata = from_timer(pdata, t, service_timer);\n \n \tqueue_work(pdata->dev_workqueue, &pdata->service_work);\n \n@@ -694,16 +694,14 @@ static void xgbe_init_timers(struct xgbe_prv_data *pdata)\n \tstruct xgbe_channel *channel;\n \tunsigned int i;\n \n-\tsetup_timer(&pdata->service_timer, xgbe_service_timer,\n-\t\t    (unsigned long)pdata);\n+\ttimer_setup(&pdata->service_timer, xgbe_service_timer, 0);\n \n \tfor (i = 0; i < pdata->channel_count; i++) {\n \t\tchannel = pdata->channel[i];\n \t\tif (!channel->tx_ring)\n \t\t\tbreak;\n \n-\t\tsetup_timer(&channel->tx_timer, xgbe_tx_timer,\n-\t\t\t    (unsigned long)channel);\n+\t\ttimer_setup(&channel->tx_timer, xgbe_tx_timer, 0);\n \t}\n }\n \n",
    "prefixes": []
}