From owner-svn-src-head@freebsd.org Sat Sep 2 17:25:05 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5DE0CE1D615 for ; Sat, 2 Sep 2017 17:25:05 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-it0-x233.google.com (mail-it0-x233.google.com [IPv6:2607:f8b0:4001:c0b::233]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2B71D6A596 for ; Sat, 2 Sep 2017 17:25:05 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-it0-x233.google.com with SMTP id c13so6044528itb.0 for ; Sat, 02 Sep 2017 10:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=rDHyhyUgwdcX1AUryCLmBaEDB5v5oPtSEvmrTv44hmM=; b=dmatPu6kjCr64bWXuIy+MZOD1vrQGX21kGMoW5BlIoiVQWbLAcCMbYXijOd1fRIz9O H5u93wTJoAco2+PzzJZXSfbnIg3DULbZOLfnPy6/PGcKWuvNkITQElY9vXcw+ogCHUZS MR6QyTbY8CKFFQxOvasa4cWq6kh4VbrkB52N4/asIxMoGcmPaJVff5M/dBrNvXq2Uezj HbkR2LTJ6FjxSDDhUo9fLOAaTgDFUVpTqgwOCl1o9wUP82qQvmpNwgUmh2Wc0hdM3ECw dLRKfOwbqBdQzLTs/od3RrqEeYnzd1QppbDmUq7/LNcdM3sJvTpKVBYlNjSJIuJKZg14 ZE1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=rDHyhyUgwdcX1AUryCLmBaEDB5v5oPtSEvmrTv44hmM=; b=gwnOt8P1Yx6DlFGv0N4B/xJpBw8DlvPmrl4Llte1c728YQoRNfxD0ok109sDZkuBL2 CyzE3ilZGqFst3/gksJG6tn4SGR12onpueGi8D79+Gt3rn1ayMsblyA3Yd2kYiMD+/hM L7GURwit7Aq+TLAkadc0GLAVIKjogmmCV0zlcXlV7iBaw2obfDFhiPDSr/Pz+3WiPXZF TpW2RlYeLSdyPmWh4f171FORIKsmdWWk5h09hXVFpL6OEKjJAjwJWEC/jks45tlr5no9 Pn/tfwT7uL6Y0MyBINk2pE9W1TvJIF44U8jTzEPc8wnSgAzMZuZkFuyyc52j7UBBviHM yu2Q== X-Gm-Message-State: AHPjjUheqMqRrr+kwmJbPTJEkBHVai5xJpEFySJ69kpYdpKVvbG86FaQ NEyJAzfWgmjAkBG2e+w9upWGSnzV3Aeg X-Google-Smtp-Source: ADKCNb5BX/o95Sitn7CgHcsryY0Qwm7WRa7qjJYsudF2fRDDniOe7jbnG/hUycgnO+FmNSuFF6/KHhhfn9tN95bvE6g= X-Received: by 10.36.40.138 with SMTP id h132mr1654361ith.26.1504373104419; Sat, 02 Sep 2017 10:25:04 -0700 (PDT) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 10.79.10.71 with HTTP; Sat, 2 Sep 2017 10:25:03 -0700 (PDT) X-Originating-IP: [2603:300b:6:5100:7467:6cd9:459e:8562] In-Reply-To: <20170902164311.eb7e5d2fa0e40f3b4e5e6142@dec.sakura.ne.jp> References: <20170902164311.eb7e5d2fa0e40f3b4e5e6142@dec.sakura.ne.jp> From: Warner Losh Date: Sat, 2 Sep 2017 11:25:03 -0600 X-Google-Sender-Auth: NFm2j-p1xsq6IcmWhf61G7y0a1I Message-ID: Subject: Re: svn commit: r322941 - head/sys/boot/efi/boot1 To: Tomoaki AOKI Cc: "svn-src-head@freebsd.org" , Warner Losh , Steven Hartland Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.23 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Sep 2017 17:25:05 -0000 On Sat, Sep 2, 2017 at 1:43 AM, Tomoaki AOKI wrote: > Hi. > > This broke boot drive selection functionality by smh@ at r295320 on > Feb.5, 2016. [1] > Now, even if I forcibly select 2nd HDD via UEFI firmware, boot1.efi > (as bootx64.efi) selects /boot/loader.efi on 1st HDD. Each boot > partition are ZFS pools. Confirmed previous rev was OK. > > Attached is the boot log (with EFI_DEBUG). Pool zsysS02 should be > selected there instead of zsysS01. As I have no serial console, there > can be some typos. (Took video and hand-typed.) > > The boot order should be as below (what smh@ implemented). > > 1. ZFS pool on which drive boot1.efi is read from. > 2. UFS partition on which drive boot1.efi is read from. > 3. If both 1 and 2 are missed, try from UEFI 1st drive and later. > > P.S. Another possibility (not tested yet): > Not forcibly prefer 1st drive, but reversed selection. > (If boot1.efi is on 1st drive, loader.efi on 2nd drive is read.) > > [1] > https://lists.freebsd.org/pipermail/svn-src-head/2016-February/082215.html Looks like the matching function that I replaced this stuff with wasn't quite the same. Will fix. I hadn't thought I'd broken it, honestly, since the setup I have still worked. The intent was to keep things as they were, which clearly didn't happen in at least your case. I'll take a look at the logs to see if I can spot the differences between the two setups. The intent was to keep functionality, for now, the same. In the long term, though, this guessing and matching is going to end up first as deprecated and then as removed. To be replaced by a boot1.efi that follows the EFI Boot Manager protocol where exactly what to load is contained in EFI env variables. That's what all my changes to boot1 have been working towards. Warner > > Author: imp > > Date: Sun Aug 27 03:10:16 2017 > > New Revision: 322941 > > URL: https://svnweb.freebsd.org/changeset/base/322941 > > > > Log: > > Eliminate redunant device path matching. > > > > Use efi_devpath_match instead of device_paths_match. They are > > functionally the same. Remove device_paths_match from boot1.c and call > > efi_devpath_match instead. > > > > Sponsored by: Netflix > > > > Modified: > > head/sys/boot/efi/boot1/boot1.c > > > > Modified: head/sys/boot/efi/boot1/boot1.c > > ============================================================ > ================== > > --- head/sys/boot/efi/boot1/boot1.c Sat Aug 26 23:13:18 2017 > (r322940) > > +++ head/sys/boot/efi/boot1/boot1.c Sun Aug 27 03:10:16 2017 > (r322941) > > @@ -76,53 +76,6 @@ Free(void *buf, const char *file __unused, int line > __ } > > > > /* > > - * nodes_match returns TRUE if the imgpath isn't NULL and the nodes > match, > > - * FALSE otherwise. > > - */ > > -static BOOLEAN > > -nodes_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath) > > -{ > > - size_t len; > > - > > - if (imgpath == NULL || imgpath->Type != devpath->Type || > > - imgpath->SubType != devpath->SubType) > > - return (FALSE); > > - > > - len = DevicePathNodeLength(imgpath); > > - if (len != DevicePathNodeLength(devpath)) > > - return (FALSE); > > - > > - return (memcmp(imgpath, devpath, (size_t)len) == 0); > > -} > > - > > -/* > > - * device_paths_match returns TRUE if the imgpath isn't NULL and all > nodes > > - * in imgpath and devpath match up to their respective occurrences of a > > - * media node, FALSE otherwise. > > - */ > > -static BOOLEAN > > -device_paths_match(EFI_DEVICE_PATH *imgpath, EFI_DEVICE_PATH *devpath) > > -{ > > - > > - if (imgpath == NULL) > > - return (FALSE); > > - > > - while (!IsDevicePathEnd(imgpath) && !IsDevicePathEnd(devpath)) > { > > - if (IsDevicePathType(imgpath, MEDIA_DEVICE_PATH) && > > - IsDevicePathType(devpath, MEDIA_DEVICE_PATH)) > > - return (TRUE); > > - > > - if (!nodes_match(imgpath, devpath)) > > - return (FALSE); > > - > > - imgpath = NextDevicePathNode(imgpath); > > - devpath = NextDevicePathNode(devpath); > > - } > > - > > - return (FALSE); > > -} > > - > > -/* > > * devpath_last returns the last non-path end node in devpath. > > */ > > static EFI_DEVICE_PATH * > > @@ -318,7 +271,7 @@ probe_handle(EFI_HANDLE h, EFI_DEVICE_PATH > *imgpath, B > > if (!blkio->Media->LogicalPartition) > > return (EFI_UNSUPPORTED); > > > > - *preferred = device_paths_match(imgpath, devpath); > > + *preferred = efi_devpath_match(imgpath, devpath); > > > > /* Run through each module, see if it can load this partition > */ > > for (i = 0; i < NUM_BOOT_MODULES; i++) { > > -- > Tomoaki AOKI >