get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 806968,
    "url": "http://patchwork.ozlabs.org/api/patches/806968/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/skiboot/patch/20170829062506.8317-13-cyril.bur@au1.ibm.com/",
    "project": {
        "id": 44,
        "url": "http://patchwork.ozlabs.org/api/projects/44/?format=api",
        "name": "skiboot firmware development",
        "link_name": "skiboot",
        "list_id": "skiboot.lists.ozlabs.org",
        "list_email": "skiboot@lists.ozlabs.org",
        "web_url": "http://github.com/open-power/skiboot",
        "scm_url": "http://github.com/open-power/skiboot",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170829062506.8317-13-cyril.bur@au1.ibm.com>",
    "list_archive_url": null,
    "date": "2017-08-29T06:25:05",
    "name": "[RFC,12/13] libflash/libffs: Allow caller to specifiy header partition",
    "commit_ref": null,
    "pull_url": null,
    "state": "rfc",
    "archived": false,
    "hash": "ae6116e78f14b934c2d353b44034dcdcdb4880cd",
    "submitter": {
        "id": 64738,
        "url": "http://patchwork.ozlabs.org/api/people/64738/?format=api",
        "name": "Cyril Bur",
        "email": "cyril.bur@au1.ibm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/skiboot/patch/20170829062506.8317-13-cyril.bur@au1.ibm.com/mbox/",
    "series": [
        {
            "id": 313,
            "url": "http://patchwork.ozlabs.org/api/series/313/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/skiboot/list/?series=313",
            "date": "2017-08-29T06:24:53",
            "name": "Rework flash TOC generation",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/313/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/806968/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/806968/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "skiboot@lists.ozlabs.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "skiboot@lists.ozlabs.org"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xhJw20CLQz9ryr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 16:42:10 +1000 (AEST)",
            "from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xhJw16PKFzDrJw\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 16:42:09 +1000 (AEST)",
            "from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n\t[148.163.156.1])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xhJY33HdHzDqYK\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:43 +1000 (AEST)",
            "from pps.filterd (m0098409.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv7T6OFgq026392\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 02:25:41 -0400",
            "from e23smtp04.au.ibm.com (e23smtp04.au.ibm.com [202.81.31.146])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2cmvyf64rv-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 02:25:40 -0400",
            "from localhost\n\tby e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <skiboot@lists.ozlabs.org> from <cyril.bur@au1.ibm.com>;\n\tTue, 29 Aug 2017 16:25:38 +1000",
            "from d23relay09.au.ibm.com (202.81.31.228)\n\tby e23smtp04.au.ibm.com (202.81.31.210) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tTue, 29 Aug 2017 16:25:37 +1000",
            "from d23av06.au.ibm.com (d23av06.au.ibm.com [9.190.235.151])\n\tby d23relay09.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n\tv7T6PaEq27197564\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:36 +1000",
            "from d23av06.au.ibm.com (localhost [127.0.0.1])\n\tby d23av06.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id\n\tv7T6PafZ016435\n\tfor <skiboot@lists.ozlabs.org>; Tue, 29 Aug 2017 16:25:36 +1000",
            "from ozlabs.au.ibm.com (ozlabs.au.ibm.com [9.192.253.14])\n\tby d23av06.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id\n\tv7T6PZ6W016425; Tue, 29 Aug 2017 16:25:36 +1000",
            "from camb691.ozlabs.ibm.com (haven.au.ibm.com [9.192.254.114])\n\t(using TLSv1.2 with cipher DHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby ozlabs.au.ibm.com (Postfix) with ESMTPSA id AB0C4A0273;\n\tTue, 29 Aug 2017 16:25:35 +1000 (AEST)"
        ],
        "From": "Cyril Bur <cyril.bur@au1.ibm.com>",
        "To": "skiboot@lists.ozlabs.org, stewart@linux.vnet.ibm.com",
        "Date": "Tue, 29 Aug 2017 16:25:05 +1000",
        "X-Mailer": "git-send-email 2.14.1",
        "In-Reply-To": "<20170829062506.8317-1-cyril.bur@au1.ibm.com>",
        "References": "<20170829062506.8317-1-cyril.bur@au1.ibm.com>",
        "X-TM-AS-MML": "disable",
        "x-cbid": "17082906-0012-0000-0000-0000025A9F5A",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17082906-0013-0000-0000-0000077669DD",
        "Message-Id": "<20170829062506.8317-13-cyril.bur@au1.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-08-29_01:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=2\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1708290096",
        "Subject": "[Skiboot] [RFC PATCH 12/13] libflash/libffs: Allow caller to\n\tspecifiy header partition",
        "X-BeenThere": "skiboot@lists.ozlabs.org",
        "X-Mailman-Version": "2.1.23",
        "Precedence": "list",
        "List-Id": "Mailing list for skiboot development <skiboot.lists.ozlabs.org>",
        "List-Unsubscribe": "<https://lists.ozlabs.org/options/skiboot>,\n\t<mailto:skiboot-request@lists.ozlabs.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.ozlabs.org/pipermail/skiboot/>",
        "List-Post": "<mailto:skiboot@lists.ozlabs.org>",
        "List-Help": "<mailto:skiboot-request@lists.ozlabs.org?subject=help>",
        "List-Subscribe": "<https://lists.ozlabs.org/listinfo/skiboot>,\n\t<mailto:skiboot-request@lists.ozlabs.org?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org",
        "Sender": "\"Skiboot\"\n\t<skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org>"
    },
    "content": "An FFS TOC is comprised of two parts. A small header which has a magic\nand very minimmal information about the TOC which will be common to all\npartitions, things like number of patritions, block sizes and the like.\nFollowing this small header are a series of entries. Importantly there\nis always an entry which encompases the TOC its self, this is usually\ncalled the 'part' partition.\n\nCurrently libffs always assumes that the 'part' partition is at zero.\nWhile there is always a TOC and zero there doesn't actually have to be.\nPNORs may have multiple TOCs within them, therefore libffs needs to be\nflexible enough to allow callers to specify TOCs not at zero.\n\nThe 'part' partition is otherwise a regular partition which may have\nflags associated with it. libffs should allow the user to set the flags\nfor the 'part' partition.\n\nThis patch achieves both by allowing the caller to specify the 'part'\npartition. The caller can not and libffs will provide a sensible\ndefault.\n\nSigned-off-by: Cyril Bur <cyril.bur@au1.ibm.com>\n---\n external/ffspart/ffspart.c |  2 +-\n libflash/ffs.h             |  1 -\n libflash/libffs.c          | 28 ++++++++++++++++++++--------\n libflash/libffs.h          |  2 +-\n 4 files changed, 22 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/external/ffspart/ffspart.c b/external/ffspart/ffspart.c\nindex cd944651..9b66f4fe 100644\n--- a/external/ffspart/ffspart.c\n+++ b/external/ffspart/ffspart.c\n@@ -131,7 +131,7 @@ int main(int argc, char *argv[])\n \t\tgoto out;\n \t}\n \n-\trc = ffs_hdr_new(block_size, block_count, &new_hdr);\n+\trc = ffs_hdr_new(block_size, block_count, NULL, &new_hdr);\n \tif (rc) {\n \t\tif (rc == FFS_ERR_BAD_SIZE) {\n \t\t\t/* Well this check is a tad redudant now */\ndiff --git a/libflash/ffs.h b/libflash/ffs.h\nindex 6a5ad49f..460f5ca2 100644\n--- a/libflash/ffs.h\n+++ b/libflash/ffs.h\n@@ -210,7 +210,6 @@ struct __ffs_hdr {\n  */\n struct ffs_hdr {\n \tuint32_t version;\n-\tuint32_t base;\n \tuint32_t size;\n \tuint32_t block_size;\n \tuint32_t block_count;\ndiff --git a/libflash/libffs.c b/libflash/libffs.c\nindex a9a2b961..5accf1ff 100644\n--- a/libflash/libffs.c\n+++ b/libflash/libffs.c\n@@ -672,8 +672,8 @@ int ffs_hdr_finalise(struct blocklevel_device *bl, struct ffs_hdr *hdr)\n \t}\n \n \t/* Don't really care if this fails */\n-\tblocklevel_erase(bl, hdr->base, hdr->size);\n-\trc = blocklevel_write(bl, hdr->base, real_hdr,\n+\tblocklevel_erase(bl, hdr->part->base, hdr->size);\n+\trc = blocklevel_write(bl, hdr->part->base, real_hdr,\n \t\tffs_hdr_raw_size(num_entries));\n \tif (rc)\n \t\tgoto out;\n@@ -756,7 +756,8 @@ int ffs_entry_set_act_size(struct ffs_entry *ent, uint32_t actual_size)\n \treturn 0;\n }\n \n-int ffs_hdr_new(uint32_t block_size, uint32_t block_count, struct ffs_hdr **r)\n+int ffs_hdr_new(uint32_t block_size, uint32_t block_count,\n+\t\tstruct ffs_entry **e, struct ffs_hdr **r)\n {\n \tstruct ffs_hdr *ret;\n \tstruct ffs_entry *part_table;\n@@ -772,12 +773,23 @@ int ffs_hdr_new(uint32_t block_size, uint32_t block_count, struct ffs_hdr **r)\n \tret->entries = calloc(HDR_ENTRIES_NUM, sizeof(struct ffs_entry *));\n \tret->entries_size = HDR_ENTRIES_NUM;\n \n-\t/* Don't know how big it will be, ffs_hdr_finalise() will fix */\n-\trc = ffs_entry_new(\"part\", 0, 0, &part_table);\n-\tif (rc) {\n-\t\tfree(ret);\n-\t\treturn rc;\n+\tif (!e || !(*e)) {\n+\t\t/* Don't know how big it will be, ffs_hdr_finalise() will fix */\n+\t\trc = ffs_entry_new(\"part\", 0, 0, &part_table);\n+\t\tif (rc) {\n+\t\t\tfree(ret);\n+\t\t\treturn rc;\n+\t\t}\n+\t\tif (e)\n+\t\t\t*e = part_table;\n+\t} else {\n+\t\tpart_table = *e;\n \t}\n+\n+\t/* If the user still holds a ref to e, then inc the refcount */\n+\tif (e)\n+\t\tpart_table->ref++;\n+\n \tret->part = part_table;\n \n \tpart_table->pid = FFS_PID_TOPLEVEL;\ndiff --git a/libflash/libffs.h b/libflash/libffs.h\nindex eabca23a..d820838c 100644\n--- a/libflash/libffs.h\n+++ b/libflash/libffs.h\n@@ -139,7 +139,7 @@ int ffs_update_act_size(struct ffs_handle *ffs, uint32_t part_idx,\n \t\t\tuint32_t act_size);\n \n int ffs_hdr_new(uint32_t block_size, uint32_t block_count,\n-\t\tstruct ffs_hdr **r);\n+\t\tstruct ffs_entry **e, struct ffs_hdr **r);\n \n int ffs_hdr_add_side(struct ffs_hdr *hdr);\n \n",
    "prefixes": [
        "RFC",
        "12/13"
    ]
}