get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 818843,
    "url": "http://patchwork.ozlabs.org/api/patches/818843/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1506464764-12699-7-git-send-email-andrew@lunn.ch/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/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": "<1506464764-12699-7-git-send-email-andrew@lunn.ch>",
    "list_archive_url": null,
    "date": "2017-09-26T22:26:03",
    "name": "[net-next,6/6] net: dsa: mv88e6xxx: Flood broadcast frames in hardware",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5b2e73e7eb1566cd348ca7954276abf3964fb835",
    "submitter": {
        "id": 13608,
        "url": "http://patchwork.ozlabs.org/api/people/13608/?format=api",
        "name": "Andrew Lunn",
        "email": "andrew@lunn.ch"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/1506464764-12699-7-git-send-email-andrew@lunn.ch/mbox/",
    "series": [
        {
            "id": 5236,
            "url": "http://patchwork.ozlabs.org/api/series/5236/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=5236",
            "date": "2017-09-26T22:26:00",
            "name": "mv88e6xxx broadcast flooding in hardware",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/5236/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/818843/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/818843/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>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y1wYS1Xktz9s3T\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed, 27 Sep 2017 08:27:08 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S969559AbdIZW1G (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tTue, 26 Sep 2017 18:27:06 -0400",
            "from vps0.lunn.ch ([185.16.172.187]:57011 \"EHLO vps0.lunn.ch\"\n\trhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP\n\tid S965322AbdIZW1F (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tTue, 26 Sep 2017 18:27:05 -0400",
            "from andrew by vps0.lunn.ch with local (Exim 4.84_2)\n\t(envelope-from <andrew@lunn.ch>)\n\tid 1dwyIq-0003Js-UW; Wed, 27 Sep 2017 00:26:08 +0200"
        ],
        "From": "Andrew Lunn <andrew@lunn.ch>",
        "To": "David Miller <davem@davemloft.net>",
        "Cc": "Vivien Didelot <vivien.didelot@savoirfairelinux.com>,\n\tnetdev <netdev@vger.kernel.org>, Andrew Lunn <andrew@lunn.ch>",
        "Subject": "[PATCH net-next 6/6] net: dsa: mv88e6xxx: Flood broadcast frames in\n\thardware",
        "Date": "Wed, 27 Sep 2017 00:26:03 +0200",
        "Message-Id": "<1506464764-12699-7-git-send-email-andrew@lunn.ch>",
        "X-Mailer": "git-send-email 2.1.4",
        "In-Reply-To": "<1506464764-12699-1-git-send-email-andrew@lunn.ch>",
        "References": "<1506464764-12699-1-git-send-email-andrew@lunn.ch>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "By default, the switch does not flood broadcast frames. Instead the\nbroadcast address is unknown in the ATU, so the frame gets forwarded\nout the cpu port. The software bridge then floods it back to the\nindividual switch ports which are members of the bridge.\n\nAdd an ATU entry in the switch so that it floods broadcast frames out\nports, rather than have the software bridge do it. Also, send a copy\nout the cpu port and any dsa ports. Rely on the port vectors to\nprevent broadcast frames leaking between bridges, and separated ports.\n\nAdditionally, when a VLAN is added, a new FID is allocated.  This\nrepresents a new table of ATU entries. A broadcast entry is added to\nthe new FID.\n\nWith offload_fwd_mark being set, the software bridge will not flood\nthe frames it receives back to the switch.\n\nSigned-off-by: Andrew Lunn <andrew@lunn.ch>\n---\n drivers/net/dsa/mv88e6xxx/chip.c | 34 +++++++++++++++++++++++++++++++++-\n 1 file changed, 33 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c\nindex 9fbe1f02b9ce..908bb867df3b 100644\n--- a/drivers/net/dsa/mv88e6xxx/chip.c\n+++ b/drivers/net/dsa/mv88e6xxx/chip.c\n@@ -1235,6 +1235,30 @@ static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,\n \treturn mv88e6xxx_g1_atu_loadpurge(chip, vlan.fid, &entry);\n }\n \n+static int mv88e6xxx_port_add_broadcast(struct mv88e6xxx_chip *chip, int port,\n+\t\t\t\t\tu16 vid)\n+{\n+\tconst char broadcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };\n+\n+\treturn mv88e6xxx_port_db_load_purge(\n+\t\tchip, port, broadcast, vid,\n+\t\tMV88E6XXX_G1_ATU_DATA_STATE_MC_STATIC);\n+}\n+\n+static int mv88e6xxx_broadcast_setup(struct mv88e6xxx_chip *chip, u16 vid)\n+{\n+\tint port;\n+\tint err;\n+\n+\tfor (port = 0; port < mv88e6xxx_num_ports(chip); ++port) {\n+\t\terr = mv88e6xxx_port_add_broadcast(chip, port, vid);\n+\t\tif (err)\n+\t\t\treturn err;\n+\t}\n+\n+\treturn 0;\n+}\n+\n static int _mv88e6xxx_port_vlan_add(struct mv88e6xxx_chip *chip, int port,\n \t\t\t\t    u16 vid, u8 member)\n {\n@@ -1247,7 +1271,11 @@ static int _mv88e6xxx_port_vlan_add(struct mv88e6xxx_chip *chip, int port,\n \n \tvlan.member[port] = member;\n \n-\treturn mv88e6xxx_vtu_loadpurge(chip, &vlan);\n+\terr = mv88e6xxx_vtu_loadpurge(chip, &vlan);\n+\tif (err)\n+\t\treturn err;\n+\n+\treturn mv88e6xxx_broadcast_setup(chip, vid);\n }\n \n static void mv88e6xxx_port_vlan_add(struct dsa_switch *ds, int port,\n@@ -2025,6 +2053,10 @@ static int mv88e6xxx_setup(struct dsa_switch *ds)\n \tif (err)\n \t\tgoto unlock;\n \n+\terr = mv88e6xxx_broadcast_setup(chip, 0);\n+\tif (err)\n+\t\tgoto unlock;\n+\n \terr = mv88e6xxx_pot_setup(chip);\n \tif (err)\n \t\tgoto unlock;\n",
    "prefixes": [
        "net-next",
        "6/6"
    ]
}