From patchwork Mon Feb 23 19:30:35 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Jezak X-Patchwork-Id: 23577 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [127.0.0.1]) by ozlabs.org (Postfix) with ESMTP id A7E2EDDEFE for ; Tue, 24 Feb 2009 06:35:49 +1100 (EST) X-Original-To: yaboot-devel@ozlabs.org Delivered-To: yaboot-devel@ozlabs.org X-Greylist: delayed 300 seconds by postgrey-1.31 at ozlabs; Tue, 24 Feb 2009 06:35:38 EST Received: from QMTA06.westchester.pa.mail.comcast.net (qmta06.westchester.pa.mail.comcast.net [76.96.62.56]) by ozlabs.org (Postfix) with ESMTP id 2A3D5DDEDA for ; Tue, 24 Feb 2009 06:35:37 +1100 (EST) Received: from OMTA04.westchester.pa.mail.comcast.net ([76.96.62.35]) by QMTA06.westchester.pa.mail.comcast.net with comcast id KUUu1b0650ldTLk56XWdnF; Mon, 23 Feb 2009 19:30:37 +0000 Received: from [192.168.1.101] ([98.219.163.182]) by OMTA04.westchester.pa.mail.comcast.net with comcast id KXWd1b00C3wS4Q23QXWd73; Mon, 23 Feb 2009 19:30:37 +0000 Message-ID: <49A2F95B.1090105@gentoo.org> Date: Mon, 23 Feb 2009 14:30:35 -0500 From: Joseph Jezak User-Agent: Thunderbird 2.0.0.19 (X11/20090202) MIME-Version: 1.0 To: yaboot-devel@ozlabs.org Subject: ofpath patch for finding devices when only sysfs is enabled X-BeenThere: yaboot-devel@ozlabs.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Technical and development discussion regarding yaboot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: yaboot-devel-bounces+incoming=patchwork.ozlabs.org@ozlabs.org Errors-To: yaboot-devel-bounces+incoming=patchwork.ozlabs.org@ozlabs.org Hi, A Gentoo user reported that ofpath can't find the device when only the sysfs (and not the obsolete proc information) is enabled. The bug report is here: https://bugs.gentoo.org/show_bug.cgi?id=253614 The attached patch fixes the issue, but hasn't been tested very well. It works on my PB and the user's machine at least! Thanks, -Joe --- /usr/sbin/ofpath 2008-08-03 04:00:35.000000000 -0400 +++ ofpath 2009-01-09 13:46:12.000000000 -0500 @@ -337,15 +337,18 @@ ide_ofpath() { - if [ ! -L "/proc/ide/$DEVNODE" ] ; then + if [ ! -L "/proc/ide/$DEVNODE" ] && [ ! -e "/sys/block/$DEVNODE" ] ; then echo 1>&2 "$PRG: /dev/$DEVNODE: Device not configured" return 1 fi - local IDEBUS="$(v=`readlink /proc/ide/$DEVNODE` ; echo ${v%%/*} )" - if [ -z "$IDEBUS" ] ; then - echo 1>&2 "$PRG: BUG: IDEBUS == NULL" - return 1 + if [ -L "/proc/ide/$DEVNODE" ] ; then + local USE_OLD_PROC=1 + local IDEBUS="$(v=`readlink /proc/ide/$DEVNODE` ; echo ${v%%/*} )" + if [ -z "$IDEBUS" ] ; then + echo 1>&2 "$PRG: BUG: IDEBUS == NULL" + return 1 + fi fi case "$(uname -r)" in @@ -363,7 +366,8 @@ echo 1>&2 "$PRG: Unable to determine sysfs mountpoint" return 1 fi - local OF1275IDE="${SYS}/block/${DEVNODE}/device/../../devspec" + local OF1275IDE=$(cd -P "${SYS}/block/${DEVNODE}/device" && pwd) + OF1275IDE="${OF1275IDE}/../../devspec" ;; *) local OF1275IDE="/proc/ide/$IDEBUS/devspec" @@ -402,34 +406,41 @@ return 1 fi - if [ ! -f "/proc/ide/${IDEBUS}/channel" ] ; then - echo 1>&2 "$PRG: KERNEL BUG: /proc/ide/${IDEBUS}/channel does not exist" - return 1 - fi - - case "$(cat /proc/device-tree${DEVSPEC}/device_type 2> /dev/null)" in - ide|ata) - local MASTER="/disk@0" - local SLAVE="/disk@1" - ;; - pci-ide|pci-ata) - local MASTER="/@$(cat /proc/ide/${IDEBUS}/channel)/disk@0" - local SLAVE="/@$(cat /proc/ide/${IDEBUS}/channel)/disk@1" - ;; - scsi) ## some lame controllers pretend they are scsi, hopefully all kludges are created equal. - local MASTER="/@$(($(cat /proc/ide/${IDEBUS}/channel) * 2 + 0))" - local SLAVE="/@$(($(cat /proc/ide/${IDEBUS}/channel) * 2 + 1))" - ;; - spi) - local MASTER="/disk@$(cat /proc/ide/${IDEBUS}/channel),0" - local SLAVE="/disk@$(cat /proc/ide/${IDEBUS}/channel),1" - ;; - *) - echo 1>&2 "$PRG: Unsupported IDE device type: \"$(cat /proc/device-tree${DEVSPEC}/device_type 2> /dev/null)\"" - return 1 - ;; - esac + + if [ "${USE_OLD_PROC}" = "1" ] ; then + if [ ! -f "/proc/ide/${IDEBUS}/channel" ] ; then + echo 1>&2 "$PRG: KERNEL BUG: /proc/ide/${IDEBUS}/channel does not exist" + return 1 + fi + case "$(cat /proc/device-tree${DEVSPEC}/device_type 2> /dev/null)" in + ide|ata) + local MASTER="/disk@0" + local SLAVE="/disk@1" + ;; + pci-ide|pci-ata) + local MASTER="/@$(cat /proc/ide/${IDEBUS}/channel)/disk@0" + local SLAVE="/@$(cat /proc/ide/${IDEBUS}/channel)/disk@1" + ;; + scsi) ## some lame controllers pretend they are scsi, hopefully all kludges are created equal. + local MASTER="/@$(($(cat /proc/ide/${IDEBUS}/channel) * 2 + 0))" + local SLAVE="/@$(($(cat /proc/ide/${IDEBUS}/channel) * 2 + 1))" + ;; + spi) + local MASTER="/disk@$(cat /proc/ide/${IDEBUS}/channel),0" + local SLAVE="/disk@$(cat /proc/ide/${IDEBUS}/channel),1" + ;; + *) + echo 1>&2 "$PRG: Unsupported IDE device type: \"$(cat /proc/device-tree${DEVSPEC}/device_type 2> /dev/null)\"" + return 1 + ;; + esac + else + ### I don't know what other disks would look like... FIXME + local MASTER="/disk@0" + local SLAVE="/disk@1" + fi + case "$DEVNODE" in hda|hdc|hde|hdg|hdi|hdk|hdm|hdo) echo "${DEVSPEC}${MASTER}:$PARTITION"