Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Feb 2015 00:40:06 +0100
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r278320 - in head: contrib/mdocml lib lib/libdevctl share/mk sys/dev/acpica sys/dev/pci sys/kern sys/sys usr.sbin usr.sbin/devctl
Message-ID:  <20150225234006.GB30998@dft-labs.eu>
In-Reply-To: <201502061609.t16G92rn091851@svn.freebsd.org>
References:  <201502061609.t16G92rn091851@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Feb 06, 2015 at 04:09:02PM +0000, John Baldwin wrote:
> Author: jhb
> Date: Fri Feb  6 16:09:01 2015
> New Revision: 278320
> URL: https://svnweb.freebsd.org/changeset/base/278320
> 
> Log:
>   Add a new device control utility for new-bus devices called devctl.  This
>   allows the user to request administrative changes to individual devices
[..]
> +static int
> +devctl2_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int fflag,
> +    struct thread *td)
> +{
> +	struct devreq *req;
> +	device_t dev;
> +	int error, old;
> +
> +	/* Locate the device to control. */
> +	mtx_lock(&Giant);
> +	req = (struct devreq *)data;
[..]
> +	switch (cmd) {
[..]
> +	case DEV_SET_DRIVER: {
> +		devclass_t dc;
> +		char driver[128];
> +
> +		error = copyinstr(req->dr_data, driver, sizeof(driver), NULL);
[..]
> +		if (!driver_exists(dev->parent, driver)) {
> +			error = ENOENT;
> +			break;
> +		}
[..]
> +	}
> +	mtx_unlock(&Giant);
> +	return (error);
> +}

I only skimmed thourgh this, will not a page fault drop + reacquire Giant lock?

iow, would not it be better to copy prior to taking the lock?

-- 
Mateusz Guzik <mjguzik gmail.com>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150225234006.GB30998>