From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7201062888117633024 X-Received: by 2002:a05:600c:540e:b0:3dd:1bd7:75ed with SMTP id he14-20020a05600c540e00b003dd1bd775edmr872580wmb.135.1676716284976; Sat, 18 Feb 2023 02:31:24 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a5d:64a9:0:b0:2c5:5262:2e24 with SMTP id m9-20020a5d64a9000000b002c552622e24ls222835wrp.2.-pod-prod-gmail; Sat, 18 Feb 2023 02:31:22 -0800 (PST) X-Google-Smtp-Source: AK7set+pFyP40GGBpXlOPogOpAtmq9KYR4GPUurexNO4F74VNshSuyV/T5PorwwG2PW04z5X3JFN X-Received: by 2002:a5d:4a08:0:b0:2c5:6046:aad6 with SMTP id m8-20020a5d4a08000000b002c56046aad6mr1292887wrq.23.1676716282200; Sat, 18 Feb 2023 02:31:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676716282; cv=none; d=google.com; s=arc-20160816; b=GIv3jkc5osr7/vxr4lUoKmuQ3L46du5nMoNdqT7M60YGMJ1eZCprPk1yHMAjX3TWrl Ff6F5hn9k54gPOH2ut59QMv3s4CXAbl6ktLR9S7zT80IfGqyCpXWnx9EBKwllKaSGEqC Xknh7q+krb3GWRVY8FyWyM1zkY1WJryUVQ6V4ZoRNDoi+9APo8wnlipEfHHtl2LakIvh eH3hFwaPBhsYMcgv8tCO3CVAwbHOqKN2TypCmF7VMmEBFjHZz4TyP+z4IShK6ju+aifh nhPfn7+uPFWalaQWlrrWgFhFJvtU7uXSFLhULQRAwViamC/QhdgcovmNOr/rgoKRjz16 aq7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=QY+vCLb9H9T4b/YOVoOYiqAxcbwGZuitdUHKJDO54a4=; b=avB3u8xlRB1U5/67KXpMmLywKdyKP0QZfJZimTADxk2YmY/VdaEDiIex6WS+Kn2t3l byffu16GabJ0Wz+qdyFq6Rw/45ceo8yHKiCgCI+gF5Astdmr50zfyFc0DiYjw12e3bwY 8I26BtmQ8/doSgzZ18kqIrGSiyby80Ymeh7ZwZADbliL0gnYGXkTnDuUdAOSm9DOG1j6 4y2hurDP7nPT63lDykjH3BeUWttQKCS7uSv0MmIgRIbfrol1VF/GO9ePyP48HID0Kb+k HOQ2ZH++oWFgMY9T/3jp9/dWMVLqTzIw+JG8+ddTohDVbk0rziLto/RyGc4gA/mpYzZT EtuQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=QQHMAscp; spf=pass (google.com: domain of fm-72506-2023021810312037453e37ae02c12cc8-nbkvd2@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-72506-2023021810312037453e37ae02c12cc8-nBkVd2@rts-flowmailer.siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from mta-65-227.siemens.flowmailer.net (mta-65-227.siemens.flowmailer.net. [185.136.65.227]) by gmr-mx.google.com with ESMTPS id az19-20020a05600c601300b003e21b96f27asi188502wmb.2.2023.02.18.02.31.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Feb 2023 02:31:22 -0800 (PST) Received-SPF: pass (google.com: domain of fm-72506-2023021810312037453e37ae02c12cc8-nbkvd2@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) client-ip=185.136.65.227; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=QQHMAscp; spf=pass (google.com: domain of fm-72506-2023021810312037453e37ae02c12cc8-nbkvd2@rts-flowmailer.siemens.com designates 185.136.65.227 as permitted sender) smtp.mailfrom=fm-72506-2023021810312037453e37ae02c12cc8-nBkVd2@rts-flowmailer.siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: by mta-65-227.siemens.flowmailer.net with ESMTPSA id 2023021810312037453e37ae02c12cc8 for ; Sat, 18 Feb 2023 11:31:21 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=felix.moessbauer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc:References:In-Reply-To; bh=QY+vCLb9H9T4b/YOVoOYiqAxcbwGZuitdUHKJDO54a4=; b=QQHMAscpnQwV96N0XY5fCImfGvKlGqZfyXRefziPzgcP2rhVNW12QVMdwRU2wHpO/DO72n YrVl1A2EaJfMdssJSaHNc7uQ39nYwuGoXjSRIIkFKMGL8PCuz18L5j8QqKofNCp7LwdE+BK9 lBHYDNkESRQCZRPGfaGrDOUcloeyg=; From: Felix Moessbauer To: isar-users@googlegroups.com Cc: adriaan.schmidt@siemens.com, jan.kiszka@siemens.com, Felix Moessbauer Subject: [PATCH v2 3/3] fix race-cond between default and custom initrd Date: Sat, 18 Feb 2023 10:30:38 +0000 Message-Id: <20230218103038.3005105-4-felix.moessbauer@siemens.com> In-Reply-To: <20230218103038.3005105-1-felix.moessbauer@siemens.com> References: <20230218103038.3005105-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-72506:519-21489:flowmailer X-TUID: yQgGNpZY/daR This patch fixes a data race happening when building a custom initrd. Previously, both custom and default initrds were deployed to the image deploy dir. The race is fixed by conditionally deploying either the custom or the default one. For that, we introduce a new variable INITRD_DEPLOY_FILE which provides the name of the initrd in the deploy directory. The existing INITRD_IMAGE variable is defaulted to the empty string and used to control if a custom initrd is requrested. Only if this variable is empty, the default one is deployed. Signed-off-by: Felix Moessbauer --- RECIPE-API-CHANGELOG.md | 8 ++++++++ meta/classes/image.bbclass | 20 ++++++++++++-------- scripts/start_vm | 4 ++-- testsuite/start_vm.py | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md index e48c98c7..1e8dbfc8 100644 --- a/RECIPE-API-CHANGELOG.md +++ b/RECIPE-API-CHANGELOG.md @@ -476,3 +476,11 @@ Bitbake 2.0 for better performance. It also requires isar-sstate script to be migrated to zstd. Mixing old Gzip-based and new ZStandatd-based sstate cache is not recommended and should be avoid for correct compatibility. + +### Working with a custom initramfs + +The existing `INITRD_IMAGE` variable is defaulted to the empty string and used to +control if a custom initrd is requrested. Only if this variable is empty, the +default one is deployed. By that, the variable cannot be used to get the name of +the images initramfs. Instead, the variable `INITRD_DEPLOY_FILE` is provided which +always povides the name of the initrd file (also when the default one is used). diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 6277069f..7b3551b0 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -23,7 +23,8 @@ IMAGE_FULLNAME = "${PN}-${DISTRO}-${MACHINE}" # These variables are used by wic and start_vm KERNEL_IMAGE ?= "${IMAGE_FULLNAME}-${KERNEL_FILE}" -INITRD_IMAGE ?= "${IMAGE_FULLNAME}-initrd.img" +INITRD_IMAGE ?= "" +INITRD_DEPLOY_FILE = "${@ d.getVar('INITRD_IMAGE', True) or '${IMAGE_FULLNAME}-initrd.img'}" # This defines the deployed dtbs for reuse by imagers DTB_FILES ?= "" @@ -353,7 +354,7 @@ EOF # Default kernel, initrd and dtb image deploy paths (inside imager) KERNEL_IMG = "${PP_DEPLOY}/${KERNEL_IMAGE}" -INITRD_IMG = "${PP_DEPLOY}/${INITRD_IMAGE}" +INITRD_IMG = "${PP_DEPLOY}/${INITRD_DEPLOY_FILE}" # only one dtb file supported, pick the first DTB_IMG = "${PP_DEPLOY}/${@(d.getVar('DTB_FILES').split() or [''])[0]}" @@ -370,12 +371,15 @@ do_copy_boot_files() { sudo cat "$kernel" > "${DEPLOYDIR}/${KERNEL_IMAGE}" fi - initrd="$(realpath -q '${IMAGE_ROOTFS}/initrd.img')" - if [ ! -f "$initrd" ]; then - initrd="$(realpath -q '${IMAGE_ROOTFS}/boot/initrd.img')" - fi - if [ -f "$initrd" ]; then - cp -f "$initrd" '${DEPLOYDIR}/${INITRD_IMAGE}' + if [ -e "${INITRD_IMAGE}" ]; then + # deploy default initrd if no custom one is build + initrd="$(realpath -q '${IMAGE_ROOTFS}/initrd.img')" + if [ ! -f "$initrd" ]; then + initrd="$(realpath -q '${IMAGE_ROOTFS}/boot/initrd.img')" + fi + if [ -f "$initrd" ]; then + cp -f "$initrd" '${DEPLOYDIR}/${INITRD_DEPLOY_FILE}' + fi fi for file in ${DTB_FILES}; do diff --git a/scripts/start_vm b/scripts/start_vm index 17091d72..8c696a4a 100755 --- a/scripts/start_vm +++ b/scripts/start_vm @@ -125,10 +125,10 @@ case "$IMAGE_FSTYPES" in readonly ROOTFS_IMAGE=$IMAGE_FULLNAME.ext4 eval $(bitbake -e mc:qemu$ARCH-$DISTRO:isar-image-base | grep "^KERNEL_IMAGE=") - eval $(bitbake -e mc:qemu$ARCH-$DISTRO:isar-image-base | grep "^INITRD_IMAGE=") + eval $(bitbake -e mc:qemu$ARCH-$DISTRO:isar-image-base | grep "^INITRD_DEPLOY_FILE=") QKERNEL=$IMAGE_DIR/${KERNEL_IMAGE} QINITRD=/dev/null - [ -n "$INITRD_IMAGE" ] && QINITRD=$IMAGE_DIR/${INITRD_IMAGE} + [ -n "$INITRD_DEPLOY_FILE" ] && QINITRD=$IMAGE_DIR/${INITRD_DEPLOY_FILE} if [ "$ARCH" = "riscv64" ]; then EXTRA_ARGS="$EXTRA_ARGS -device loader,file=$QKERNEL,addr=0x80200000" QKERNEL="/usr/lib/riscv64-linux-gnu/opensbi/qemu/virt/fw_jump.elf" diff --git a/testsuite/start_vm.py b/testsuite/start_vm.py index 82ecc17d..ba1ba127 100755 --- a/testsuite/start_vm.py +++ b/testsuite/start_vm.py @@ -35,7 +35,7 @@ def format_qemu_cmdline(arch, build, distro, out, pid, enforce_pcbios=False): if image_type == 'ext4': rootfs_image = 'isar-image-base-' + base + '-' + distro + '-qemu' + arch + '.ext4' kernel_image = deploy_dir_image + '/' + get_bitbake_var(bb_output, 'KERNEL_IMAGE') - initrd_image = get_bitbake_var(bb_output, 'INITRD_IMAGE') + initrd_image = get_bitbake_var(bb_output, 'INITRD_DEPLOY_FILE') if not initrd_image: initrd_image = '/dev/null' -- 2.34.1