From owner-p4-projects@FreeBSD.ORG Wed Mar 13 18:41:06 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3E35C789; Wed, 13 Mar 2013 18:41:06 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 01A53787 for ; Wed, 13 Mar 2013 18:41:05 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id C2FC7E29 for ; Wed, 13 Mar 2013 18:41:05 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2DIf5eH027311 for ; Wed, 13 Mar 2013 18:41:05 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2DIf5xn027308 for perforce@freebsd.org; Wed, 13 Mar 2013 18:41:05 GMT (envelope-from brooks@freebsd.org) Date: Wed, 13 Mar 2013 18:41:05 GMT Message-Id: <201303131841.r2DIf5xn027308@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 222836 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Mar 2013 18:41:06 -0000 http://p4web.freebsd.org/@@222836?ac=10 Change 222836 by brooks@brooks_zenith on 2013/03/13 18:40:14 Add support for partitioning CFI disks from FDT using geom_flashmap. In geom_flashmap, don't partition anything other that disks. With out this, the layering violation required to retrieve FDT entries caused not only the disk, but all non-flashmap partitions of the disk to have *s. entries created. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#4 edit .. //depot/projects/ctsrd/beribsd/src/sys/geom/geom_flashmap.c#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#4 (text+ko) ==== @@ -44,6 +44,7 @@ #include +#include #include struct cfi_disk_softc { @@ -64,9 +65,11 @@ static int cfi_disk_open(struct disk *); static int cfi_disk_close(struct disk *); static void cfi_io_proc(void *, int); +static int cfi_disk_getattr(struct bio *); static void cfi_disk_strategy(struct bio *); static int cfi_disk_ioctl(struct disk *, u_long, void *, int, struct thread *); + static int cfi_disk_probe(device_t dev) { @@ -95,6 +98,7 @@ sc->disk->d_strategy = cfi_disk_strategy; sc->disk->d_ioctl = cfi_disk_ioctl; sc->disk->d_dump = NULL; /* NB: no dumps */ + sc->disk->d_getattr = cfi_disk_getattr; sc->disk->d_sectorsize = CFI_DISK_SECSIZE; sc->disk->d_mediasize = sc->parent->sc_size; sc->disk->d_maxsize = CFI_DISK_MAXIOSIZE; @@ -275,6 +279,31 @@ } } +static int +cfi_disk_getattr(struct bio *bp) +{ + struct cfi_disk_softc *dsc; + struct cfi_softc *sc; + device_t dev; + + if (bp->bio_disk == NULL || bp->bio_disk->d_drv1 == NULL) + return (ENXIO); + + dsc = bp->bio_disk->d_drv1; + sc = dsc->parent; + dev = sc->sc_dev; + + do { + if (g_handleattr(bp, "CFI::device", &dev, sizeof(device_t))) + break; + + return (ERESTART); + } while(0); + + return (EJUSTRETURN); +} + + static void cfi_disk_strategy(struct bio *bp) { ==== //depot/projects/ctsrd/beribsd/src/sys/geom/geom_flashmap.c#3 (text+ko) ==== @@ -174,7 +174,7 @@ g_topology_assert(); if (flags == G_TF_NORMAL && - !strcmp(pp->geom->class->name, FLASHMAP_CLASS_NAME)) + strcmp(pp->geom->class->name, "DISK") != 0) return (NULL); gp = g_slice_new(mp, FLASH_SLICES_MAX_NUM, pp, &cp, NULL, 0, @@ -186,8 +186,11 @@ do { size = sizeof(device_t); - if (g_io_getattr("NAND::device", cp, &size, &dev)) - break; + if (g_io_getattr("NAND::device", cp, &size, &dev)) { + size = sizeof(device_t); + if (g_io_getattr("CFI::device", cp, &size, &dev)) + break; + } nslices = g_flashmap_load(dev, &head); if (nslices == 0)