Show a cover letter.

GET /api/1.1/covers/24165/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 24165,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/24165/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/24165/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20250820132316.1033443-1-dan.scally@ideasonboard.com>",
    "date": "2025-08-20T13:23:13",
    "name": "[0/3] Fix fast-booting device enumeration problems",
    "submitter": {
        "id": 156,
        "url": "https://patchwork.libcamera.org/api/1.1/people/156/?format=api",
        "name": "Dan Scally",
        "email": "dan.scally@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/24165/mbox/",
    "series": [
        {
            "id": 5396,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5396/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5396",
            "date": "2025-08-20T13:23:13",
            "name": "Fix fast-booting device enumeration problems",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5396/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/24165/comments/",
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id CC8CFBD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 20 Aug 2025 13:23:40 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8B653692E2;\n\tWed, 20 Aug 2025 15:23:39 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BEDFE613DC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 20 Aug 2025 15:23:36 +0200 (CEST)",
            "from mail.ideasonboard.com\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id F2D2E6AF;\n\tWed, 20 Aug 2025 15:22:37 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"VzwY3Oxk\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1755696158;\n\tbh=Nebbj17QuCZG3Z+0s6BmxZL9+rWBI0LNI2lJDPXvC9M=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=VzwY3OxkI/6uvijdLdbbyx9XxgOkKs1TYcUKaDrCjPGS1AA2y3RMh8i7yEi+gFRNQ\n\tqtI5ErVejQm9UmBB/XRY1L7O/jhBJ7X30mrhGnI+ZUF/OsnpJp6b5MppbCXhbviKZN\n\t93XiNVUkVufMcyOsq1ZEHBDd+oUt7yjzhBKWjp/U=",
        "From": "Daniel Scally <dan.scally@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "dan.scally@ideasonboard.com",
        "Subject": "[PATCH 0/3] Fix fast-booting device enumeration problems",
        "Date": "Wed, 20 Aug 2025 14:23:13 +0100",
        "Message-ID": "<20250820132316.1033443-1-dan.scally@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Hello all\n\nAt present, a CameraManager that is created before the device nodes for subdev\nentities in a media graph have been created (for example, because some subdev\ndrivers have not yet probed and so the v4l2-async framework hasn't called for\nthem to be built yet) will never match any pipeline handlers for that media\ndevice. This is because the MediaDevice populates itself with entities,\ninterfaces, pads and links but ignores the fact that the interfaces for the\nsubdev entities are missing. When DeviceEnumeratorUdev:: populateMediaDevice()\nis called, the entity's major and minor numbers are checked, seen to be zero (as\nthey come from the missing interfaces) and then the entity is simply ignored\nrather than treated as dependencies that need to be watched for. The MediaDevice\nis added through DeviceEnumerator::addDevice() to be checked against the\npipeline handler's match() functions. When the device nodes for the subdevices\nare eventually detected as v4l2-async completes they are simply placed onto a\nlist of orphaned nodes and ignored.\n\nTo remedy the problem this set checks for missing interfaces during\nMediaDevice::populate() and if it sees some are missing, allows the MediaDevice\nto be created successfully but leaves the isValid() flag false.\nDeviceEnumeratorUdev is updated to check isValid() and when it is false, defers\nthe creation of MediaEntity / MediaPad / MediaLink objects. Each time\nudevNotify() is triggered by a new device MediaDevice::populate() is checked\nagain for each deferred MediaDevice, and once the missing interfaces are found\nin the topology the other objects are created, dependencies resolved and the\nMediaDevice added as normal.\n\nThere may be a better way of receiving notice from the kernel that the media\ngraph is fully complete and ready to be parsed; at the moment we rely on the\nreported topology version number becoming stable across two iterations of a loop\nthat checks MEDIA_IOC_G_TOPOLOGY, but that's not sufficient to avoid this issue.\n\nThanks\nDan\n\nDaniel Scally (3):\n  libcamera: media_device: Expand return values for populateEntities()\n  libcamera: device_enumerator_udev: Add initMediaDevice()\n  libcamera: device_enumerator_udev: Defer invalid media devices\n\n .../internal/device_enumerator_udev.h         |  3 +\n include/libcamera/internal/media_device.h     |  2 +-\n src/libcamera/device_enumerator.cpp           |  2 +-\n src/libcamera/device_enumerator_udev.cpp      | 85 ++++++++++++++-----\n src/libcamera/media_device.cpp                | 27 +++---\n 5 files changed, 85 insertions(+), 34 deletions(-)"
}