Deleted Added
full compact
kern_conf.c (201145) kern_conf.c (201223)
1/*-
2 * Copyright (c) 1999-2002 Poul-Henning Kamp
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1999-2002 Poul-Henning Kamp
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/kern/kern_conf.c 201145 2009-12-28 22:56:30Z antoine $");
28__FBSDID("$FreeBSD: head/sys/kern/kern_conf.c 201223 2009-12-29 21:51:28Z rnoland $");
29
30#include <sys/param.h>
31#include <sys/kernel.h>
32#include <sys/systm.h>
33#include <sys/bus.h>
34#include <sys/bio.h>
35#include <sys/lock.h>
36#include <sys/mutex.h>

--- 260 unchanged lines hidden (view full) ---

297
298/* Default methods if driver does not specify method */
299
300#define null_open (d_open_t *)nullop
301#define null_close (d_close_t *)nullop
302#define no_read (d_read_t *)enodev
303#define no_write (d_write_t *)enodev
304#define no_ioctl (d_ioctl_t *)enodev
29
30#include <sys/param.h>
31#include <sys/kernel.h>
32#include <sys/systm.h>
33#include <sys/bus.h>
34#include <sys/bio.h>
35#include <sys/lock.h>
36#include <sys/mutex.h>

--- 260 unchanged lines hidden (view full) ---

297
298/* Default methods if driver does not specify method */
299
300#define null_open (d_open_t *)nullop
301#define null_close (d_close_t *)nullop
302#define no_read (d_read_t *)enodev
303#define no_write (d_write_t *)enodev
304#define no_ioctl (d_ioctl_t *)enodev
305#define no_mmap (d_mmap2_t *)enodev
305#define no_mmap (d_mmap_t *)enodev
306#define no_kqfilter (d_kqfilter_t *)enodev
307#define no_mmap_single (d_mmap_single_t *)enodev
308
309static void
310no_strategy(struct bio *bp)
311{
312
313 biofinish(bp, NULL, ENODEV);

--- 150 unchanged lines hidden (view full) ---

464 mtx_lock(&Giant);
465 retval = dsw->d_gianttrick->d_kqfilter(dev, kn);
466 mtx_unlock(&Giant);
467 dev_relthread(dev);
468 return (retval);
469}
470
471static int
306#define no_kqfilter (d_kqfilter_t *)enodev
307#define no_mmap_single (d_mmap_single_t *)enodev
308
309static void
310no_strategy(struct bio *bp)
311{
312
313 biofinish(bp, NULL, ENODEV);

--- 150 unchanged lines hidden (view full) ---

464 mtx_lock(&Giant);
465 retval = dsw->d_gianttrick->d_kqfilter(dev, kn);
466 mtx_unlock(&Giant);
467 dev_relthread(dev);
468 return (retval);
469}
470
471static int
472giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot,
472giant_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot,
473 vm_memattr_t *memattr)
474{
475 struct cdevsw *dsw;
476 int retval;
477
478 dsw = dev_refthread(dev);
479 if (dsw == NULL)
480 return (ENXIO);
481 mtx_lock(&Giant);
473 vm_memattr_t *memattr)
474{
475 struct cdevsw *dsw;
476 int retval;
477
478 dsw = dev_refthread(dev);
479 if (dsw == NULL)
480 return (ENXIO);
481 mtx_lock(&Giant);
482 if (dsw->d_gianttrick->d_flags & D_MMAP2)
483 retval = dsw->d_gianttrick->d_mmap2(dev, offset, paddr, nprot,
484 memattr);
485 else
486 retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot);
482 retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot,
483 memattr);
487 mtx_unlock(&Giant);
488 dev_relthread(dev);
489 return (retval);
490}
491
492static int
493giant_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_size_t size,
494 vm_object_t *object, int nprot)

--- 95 unchanged lines hidden (view full) ---

590 } else
591 dsw2 = NULL;
592 if (devsw->d_flags & D_INIT) {
593 if (dsw2 != NULL)
594 cdevsw_free_devlocked(dsw2);
595 return;
596 }
597
484 mtx_unlock(&Giant);
485 dev_relthread(dev);
486 return (retval);
487}
488
489static int
490giant_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_size_t size,
491 vm_object_t *object, int nprot)

--- 95 unchanged lines hidden (view full) ---

587 } else
588 dsw2 = NULL;
589 if (devsw->d_flags & D_INIT) {
590 if (dsw2 != NULL)
591 cdevsw_free_devlocked(dsw2);
592 return;
593 }
594
598 if (devsw->d_version != D_VERSION_01 &&
599 devsw->d_version != D_VERSION_02) {
595 if (devsw->d_version != D_VERSION_03) {
600 printf(
601 "WARNING: Device driver \"%s\" has wrong version %s\n",
602 devsw->d_name == NULL ? "???" : devsw->d_name,
603 "and is disabled. Recompile KLD module.");
604 devsw->d_open = dead_open;
605 devsw->d_close = dead_close;
606 devsw->d_read = dead_read;
607 devsw->d_write = dead_write;
608 devsw->d_ioctl = dead_ioctl;
609 devsw->d_poll = dead_poll;
610 devsw->d_mmap = dead_mmap;
596 printf(
597 "WARNING: Device driver \"%s\" has wrong version %s\n",
598 devsw->d_name == NULL ? "???" : devsw->d_name,
599 "and is disabled. Recompile KLD module.");
600 devsw->d_open = dead_open;
601 devsw->d_close = dead_close;
602 devsw->d_read = dead_read;
603 devsw->d_write = dead_write;
604 devsw->d_ioctl = dead_ioctl;
605 devsw->d_poll = dead_poll;
606 devsw->d_mmap = dead_mmap;
607 devsw->d_mmap_single = dead_mmap_single;
611 devsw->d_strategy = dead_strategy;
612 devsw->d_dump = dead_dump;
613 devsw->d_kqfilter = dead_kqfilter;
614 }
608 devsw->d_strategy = dead_strategy;
609 devsw->d_dump = dead_dump;
610 devsw->d_kqfilter = dead_kqfilter;
611 }
615 if (devsw->d_version == D_VERSION_01)
616 devsw->d_mmap_single = NULL;
617
618 if (devsw->d_flags & D_NEEDGIANT) {
619 if (devsw->d_gianttrick == NULL) {
620 memcpy(dsw2, devsw, sizeof *dsw2);
621 devsw->d_gianttrick = dsw2;
612
613 if (devsw->d_flags & D_NEEDGIANT) {
614 if (devsw->d_gianttrick == NULL) {
615 memcpy(dsw2, devsw, sizeof *dsw2);
616 devsw->d_gianttrick = dsw2;
622 devsw->d_flags |= D_MMAP2;
623 dsw2 = NULL;
624 }
625 }
626
627#define FIXUP(member, noop, giant) \
628 do { \
629 if (devsw->member == NULL) { \
630 devsw->member = noop; \

--- 4 unchanged lines hidden (view full) ---

635
636 FIXUP(d_open, null_open, giant_open);
637 FIXUP(d_fdopen, NULL, giant_fdopen);
638 FIXUP(d_close, null_close, giant_close);
639 FIXUP(d_read, no_read, giant_read);
640 FIXUP(d_write, no_write, giant_write);
641 FIXUP(d_ioctl, no_ioctl, giant_ioctl);
642 FIXUP(d_poll, no_poll, giant_poll);
617 dsw2 = NULL;
618 }
619 }
620
621#define FIXUP(member, noop, giant) \
622 do { \
623 if (devsw->member == NULL) { \
624 devsw->member = noop; \

--- 4 unchanged lines hidden (view full) ---

629
630 FIXUP(d_open, null_open, giant_open);
631 FIXUP(d_fdopen, NULL, giant_fdopen);
632 FIXUP(d_close, null_close, giant_close);
633 FIXUP(d_read, no_read, giant_read);
634 FIXUP(d_write, no_write, giant_write);
635 FIXUP(d_ioctl, no_ioctl, giant_ioctl);
636 FIXUP(d_poll, no_poll, giant_poll);
643 FIXUP(d_mmap2, no_mmap, giant_mmap);
637 FIXUP(d_mmap, no_mmap, giant_mmap);
644 FIXUP(d_strategy, no_strategy, giant_strategy);
645 FIXUP(d_kqfilter, no_kqfilter, giant_kqfilter);
646 FIXUP(d_mmap_single, no_mmap_single, giant_mmap_single);
647
648 if (devsw->d_dump == NULL) devsw->d_dump = no_dump;
649
650 LIST_INIT(&devsw->d_devs);
651

--- 512 unchanged lines hidden ---
638 FIXUP(d_strategy, no_strategy, giant_strategy);
639 FIXUP(d_kqfilter, no_kqfilter, giant_kqfilter);
640 FIXUP(d_mmap_single, no_mmap_single, giant_mmap_single);
641
642 if (devsw->d_dump == NULL) devsw->d_dump = no_dump;
643
644 LIST_INIT(&devsw->d_devs);
645

--- 512 unchanged lines hidden ---