On 08/15/14 08:58, Markus Armbruster wrote: > We identify devices by their Open Firmware device paths. The path > component for the logical unit on a bus is incorrect: > bootprio_find_scsi_device() and bootprio_find_usb() format target > (a.k.a. SCSI ID) and lun in decimal, while QEMU uses hexadecimal. > Bootorder list entries with target, lun > 9 aren't found (lucky case), > or attributed to the wrong logical unit (unlucky case). > > The relevant spec[*] agrees with QEMU (and OVMF, for that matter). > Change %d to %x. > > No actual impact on USB, because QEMU only uses LUN 0 there. > > RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1096560 > > [*] Open Firmware Recommended Practice: SCSI-3 Parallel Interface, > Version 1, Section 3.1 Physical Address Formats and Representations > http://www.openfirmware.org/1275/practice/spi/spi1_0.ps > IEEE Standard for Boot (Initialization Configuration) Firmware: Core > Requirements and Practices, IEEE Std 1275-1994, Annex E SCSI host > adapter package class, section E.2.1 Physical address formats and > representations > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > v3: > * Fix bootprio_find_usb() as well [Kevin] > * Also point to IEEE 1275 Annex E in commit message > v2: > * Fix the link to the spec (d'oh) > * While we're linking, link to RHBZ > > src/boot.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/boot.c b/src/boot.c > index 5837ad0..34088c8 100644 > --- a/src/boot.c > +++ b/src/boot.c > @@ -145,7 +145,7 @@ int bootprio_find_scsi_device(struct pci_device *pci, int > target, int lun) > // Find scsi drive - for example: /pci@i0cf8/scsi@5/channel@0/disk@1,0 > char desc[256], *p; > p = build_pci_path(desc, sizeof(desc), "*", pci); > - snprintf(p, desc+sizeof(desc)-p, "/*@0/*@%d,%d", target, lun); > + snprintf(p, desc+sizeof(desc)-p, "/*@0/*@%x,%x", target, lun); > return find_prio(desc); > } > > @@ -224,7 +224,7 @@ int bootprio_find_usb(struct usbdevice_s *usbdev, int lun) > char desc[256], *p; > p = build_pci_path(desc, sizeof(desc), "usb", usbdev->hub->cntl->pci); > p = build_usb_path(p, desc+sizeof(desc)-p, usbdev->hub); > - snprintf(p, desc+sizeof(desc)-p, "/storage@%x/*@0/*@0,%d" > + snprintf(p, desc+sizeof(desc)-p, "/storage@%x/*@0/*@0,%x" > , usbdev->port+1, lun); > int ret = find_prio(desc); > if (ret >= 0) >
We had discussed bootprio_find_usb() too on IRC; I thought you were going to send a separate patch for that. But it's OK this way as well, obviously. Reviewed-by: Laszlo Ersek <ler...@redhat.com> _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org http://www.seabios.org/mailman/listinfo/seabios