From owner-svn-ports-all@FreeBSD.ORG Sat Feb 14 11:19:42 2015 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 200368FE; Sat, 14 Feb 2015 11:19:42 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 011422B2; Sat, 14 Feb 2015 11:19:42 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t1EBJftQ095465; Sat, 14 Feb 2015 11:19:41 GMT (envelope-from kwm@FreeBSD.org) Received: (from kwm@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t1EBJflh095463; Sat, 14 Feb 2015 11:19:41 GMT (envelope-from kwm@FreeBSD.org) Message-Id: <201502141119.t1EBJflh095463@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: kwm set sender to kwm@FreeBSD.org using -f From: Koop Mast Date: Sat, 14 Feb 2015 11:19:41 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r378958 - in head/devel/libdevq: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Feb 2015 11:19:42 -0000 Author: kwm Date: Sat Feb 14 11:19:40 2015 New Revision: 378958 URL: https://svnweb.freebsd.org/changeset/ports/378958 QAT: https://qat.redports.org/buildarchive/r378958/ Log: Add a patch to handle sysclt dev.$driver.$n.%location output changes on FreeBSD 11.x. Obtained from: upstream Added: head/devel/libdevq/files/ head/devel/libdevq/files/patch-src_device.c (contents, props changed) Modified: head/devel/libdevq/Makefile Modified: head/devel/libdevq/Makefile ============================================================================== --- head/devel/libdevq/Makefile Sat Feb 14 11:12:30 2015 (r378957) +++ head/devel/libdevq/Makefile Sat Feb 14 11:19:40 2015 (r378958) @@ -3,6 +3,7 @@ PORTNAME= libdevq PORTVERSION= 0.0.2 +PORTREVISION= 1 CATEGORIES= devel MASTER_SITES= http://rainbow-runner.nl/freebsd/ Added: head/devel/libdevq/files/patch-src_device.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/libdevq/files/patch-src_device.c Sat Feb 14 11:19:40 2015 (r378958) @@ -0,0 +1,125 @@ +From 7b48b8726b85eac66c1b164fab87d154be5aa068 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= +Date: Fri, 13 Feb 2015 19:46:37 +0100 +Subject: [PATCH] Support dev.$driver.$n.%location from FreeBSD 11.x + +The format changed from: + slot=1 function=0 +to: + pci0:2:0:0 handle=\_SB_.PCI0.PEG3.MXM3 + +Now devq_device_get_pciid_from_fd() supports both formats. +--- + src/device.c | 89 ++++++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 60 insertions(+), 29 deletions(-) + +diff --git a/src/device.c b/src/device.c +index 9aadc2b..77df580 100644 +--- src/device.c ++++ src/device.c +@@ -188,6 +188,58 @@ devq_device_get_devpath_from_fd(int fd, + #endif /* defined(HAVE_LIBPROCSTAT_H) */ + } + ++static int ++devq_compare_vgapci_busaddr(int i, int *domain, int *bus, int *slot, ++ int *function) ++{ ++ int ret; ++ char sysctl_name[32], sysctl_value[128]; ++ size_t sysctl_value_len; ++ ++ sprintf(sysctl_name, "dev.vgapci.%d.%%location", i); ++ ++ sysctl_value_len = sizeof(sysctl_value); ++ memset(sysctl_value, 0, sysctl_value_len); ++ ret = sysctlbyname(sysctl_name, sysctl_value, ++ &sysctl_value_len, NULL, 0); ++ if (ret != 0) ++ return (-1); ++ ++ /* ++ * dev.vgapci.$m.%location can have two formats: ++ * o "pci0:2:0:0 handle=\_SB_.PCI0.PEG3.MXM3" (FreeBSD 11+) ++ * o "slot=1 function=0" (up-to FreeBSD 10) ++ */ ++ ++ ret = sscanf(sysctl_value, "pci%d:%d:%d:%d %*s", ++ domain, bus, slot, function); ++ if (ret == 4) ++ return (0); ++ ++ ret = sscanf(sysctl_value, "slot=%d function=%d %*s", ++ slot, function); ++ if (ret != 2) ++ return (-1); ++ ++ sprintf(sysctl_name, "dev.vgapci.%d.%%parent", i); ++ ++ sysctl_value_len = sizeof(sysctl_value); ++ memset(sysctl_value, 0, sysctl_value_len); ++ ret = sysctlbyname(sysctl_name, sysctl_value, ++ &sysctl_value_len, NULL, 0); ++ if (ret != 0) ++ return (-1); ++ ++ ret = sscanf(sysctl_value, "pci%d", bus); ++ if (ret != 1) ++ return (-1); ++ ++ /* FIXME: What domain to assume? */ ++ *domain = 0; ++ ++ return (0); ++} ++ + int + devq_device_get_pciid_from_fd(int fd, + int *vendor_id, int *device_id) +@@ -253,38 +305,17 @@ devq_device_get_pciid_from_fd(int fd, + * o dev.vgapci.$m.%parent + */ + for (i = 0; i < DEVQ_MAX_DEVS; ++i) { +- sprintf(sysctl_name, "dev.vgapci.%d.%%location", i); +- +- sysctl_value_len = sizeof(sysctl_value); +- memset(sysctl_value, 0, sysctl_value_len); +- ret = sysctlbyname(sysctl_name, sysctl_value, +- &sysctl_value_len, NULL, 0); +- if (ret != 0) +- continue; ++ int tmp_domain, tmp_bus, tmp_slot, tmp_function; + +- int tmp_slot, tmp_function; +- ret = sscanf(sysctl_value, "slot=%d function=%d %*s", ++ ret = devq_compare_vgapci_busaddr(i, &tmp_domain, &tmp_bus, + &tmp_slot, &tmp_function); +- if (ret != 2 || +- tmp_slot != slot || tmp_function != function) +- continue; +- +- sprintf(sysctl_name, "dev.vgapci.%d.%%parent", i); +- +- sysctl_value_len = sizeof(sysctl_value); +- memset(sysctl_value, 0, sysctl_value_len); +- ret = sysctlbyname(sysctl_name, sysctl_value, +- &sysctl_value_len, NULL, 0); +- if (ret != 0) +- continue; +- +- int tmp_bus; +- ret = sscanf(sysctl_value, "pci%d", +- &tmp_bus); +- if (ret != 1 || tmp_bus != bus) +- continue; + +- break; ++ if (ret == 0 && ++ tmp_domain == domain && ++ tmp_bus == bus && ++ tmp_slot == slot && ++ tmp_function == function) ++ break; + } + + if (i == DEVQ_MAX_DEVS) {