Date: Sun, 29 Nov 2020 14:03:57 +0100 From: Michal Meloun <meloun.michal@gmail.com> To: Konstantin Belousov <kib@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r368124 - in head/sys: cam cam/ata cam/ctl cam/mmc cam/nvme cam/scsi compat/linprocfs compat/linux conf contrib/openzfs/module/os/freebsd/zfs dev/ahci dev/ata dev/firewire dev/flash dev... Message-ID: <56ede111-cf89-366e-fbda-aa26f4a78a23@freebsd.org> In-Reply-To: <202011281212.0ASCCpjQ006999@repo.freebsd.org> References: <202011281212.0ASCCpjQ006999@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 28.11.2020 13:12, Konstantin Belousov wrote: > Author: kib > Date: Sat Nov 28 12:12:51 2020 > New Revision: 368124 > URL: https://svnweb.freebsd.org/changeset/base/368124 > > Log: > Make MAXPHYS tunable. Bump MAXPHYS to 1M. > Unfortunately, bumping MAXPHYS broke arm kernel. The kernel runs out of KVA while running 'pbuf' keg init function. This causes that keg_alloc_slab() always returns NULL and for cycle in uma_prealloc() newer ends (whish should be considered as another bug). Do you think that MAXPHYS constant can depends on given arch? 128k (or 256k) sounds reasonable for arm32 systems... Michal > Replace MAXPHYS by runtime variable maxphys. It is initialized from > MAXPHYS by default, but can be also adjusted with the tunable kern.maxphys. > > Make b_pages[] array in struct buf flexible. Size b_pages[] for buffer > cache buffers exactly to atop(maxbcachebuf) (currently it is sized to > atop(MAXPHYS)), and b_pages[] for pbufs is sized to atop(maxphys) + 1. > The +1 for pbufs allow several pbuf consumers, among them vmapbuf(), > to use unaligned buffers still sized to maxphys, esp. when such > buffers come from userspace (*). Overall, we save significant amount > of otherwise wasted memory in b_pages[] for buffer cache buffers, > while bumping MAXPHYS to desired high value. > > Eliminate all direct uses of the MAXPHYS constant in kernel and driver > sources, except a place which initialize maxphys. Some random (and > arguably weird) uses of MAXPHYS, e.g. in linuxolator, are converted > straight. Some drivers, which use MAXPHYS to size embeded structures, > get private MAXPHYS-like constant; their convertion is out of scope > for this work. > > Changes to cam/, dev/ahci, dev/ata, dev/mpr, dev/mpt, dev/mvs, > dev/siis, where either submitted by, or based on changes by mav. > > Suggested by: mav (*) > Reviewed by: imp, mav, imp, mckusick, scottl (intermediate versions) > Tested by: pho > Sponsored by: The FreeBSD Foundation > Differential revision: https://reviews.freebsd.org/D27225 > > Modified: > head/sys/cam/ata/ata_da.c > head/sys/cam/cam_compat.c > head/sys/cam/cam_periph.c > head/sys/cam/cam_xpt.c > head/sys/cam/ctl/ctl_backend_block.c > head/sys/cam/mmc/mmc_da.c > head/sys/cam/nvme/nvme_da.c > head/sys/cam/scsi/scsi_cd.c > head/sys/cam/scsi/scsi_da.c > head/sys/cam/scsi/scsi_pass.c > head/sys/cam/scsi/scsi_sa.c > head/sys/cam/scsi/scsi_sg.c > head/sys/cam/scsi/scsi_target.c > head/sys/compat/linprocfs/linprocfs.c > head/sys/compat/linux/linux_ioctl.c > head/sys/conf/options > head/sys/contrib/openzfs/module/os/freebsd/zfs/vdev_geom.c > head/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c > head/sys/dev/ahci/ahci.c > head/sys/dev/ahci/ahci.h > head/sys/dev/ahci/ahciem.c > head/sys/dev/ata/ata-all.c > head/sys/dev/ata/ata-all.h > head/sys/dev/ata/ata-dma.c > head/sys/dev/firewire/sbp.c > head/sys/dev/flash/cqspi.c > head/sys/dev/isci/scil/sci_controller_constants.h > head/sys/dev/iscsi/iscsi.c > head/sys/dev/md/md.c > head/sys/dev/mfi/mfi.c > head/sys/dev/mpr/mpr.c > head/sys/dev/mps/mps.c > head/sys/dev/mpt/mpt.c > head/sys/dev/mpt/mpt.h > head/sys/dev/mrsas/mrsas.c > head/sys/dev/mvs/mvs.c > head/sys/dev/mvs/mvs.h > head/sys/dev/nvme/nvme.h > head/sys/dev/nvme/nvme_ctrlr.c > head/sys/dev/pms/freebsd/driver/ini/src/agdef.h > head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c > head/sys/dev/sdhci/sdhci.c > head/sys/dev/siis/siis.c > head/sys/dev/siis/siis.h > head/sys/dev/sym/sym_conf.h > head/sys/dev/usb/storage/umass.c > head/sys/dev/virtio/block/virtio_blk.c > head/sys/dev/virtio/scsi/virtio_scsi.c > head/sys/dev/xen/blkback/blkback.c > head/sys/dev/xen/blkfront/blkfront.c > head/sys/fs/cd9660/cd9660_vfsops.c > head/sys/fs/ext2fs/ext2_vfsops.c > head/sys/fs/fuse/fuse_vfsops.c > head/sys/fs/msdosfs/msdosfs_vfsops.c > head/sys/fs/udf/udf_vfsops.c > head/sys/geom/cache/g_cache.c > head/sys/geom/eli/g_eli_integrity.c > head/sys/geom/geom_dev.c > head/sys/geom/geom_io.c > head/sys/geom/journal/g_journal.c > head/sys/geom/journal/g_journal.h > head/sys/geom/mirror/g_mirror.c > head/sys/geom/nop/g_nop.c > head/sys/geom/part/g_part_apm.c > head/sys/geom/part/g_part_gpt.c > head/sys/geom/part/g_part_ldm.c > head/sys/geom/raid/md_ddf.c > head/sys/geom/raid/md_promise.c > head/sys/geom/raid3/g_raid3.c > head/sys/geom/shsec/g_shsec.c > head/sys/geom/stripe/g_stripe.c > head/sys/geom/uzip/g_uzip.c > head/sys/geom/vinum/geom_vinum_var.h > head/sys/geom/virstor/g_virstor.c > head/sys/geom/virstor/g_virstor.h > head/sys/kern/kern_mib.c > head/sys/kern/kern_physio.c > head/sys/kern/kern_sendfile.c > head/sys/kern/subr_param.c > head/sys/kern/vfs_aio.c > head/sys/kern/vfs_bio.c > head/sys/kern/vfs_cluster.c > head/sys/kern/vfs_default.c > head/sys/mips/ingenic/jz4780_mmc.c > head/sys/net/if.c > head/sys/powerpc/mambo/mambo_disk.c > head/sys/powerpc/mpc85xx/fsl_sata.c > head/sys/sys/aio.h > head/sys/sys/buf.h > head/sys/sys/param.h > head/sys/sys/systm.h > head/sys/ufs/ffs/ffs_vfsops.c > head/sys/vm/swap_pager.c > head/sys/vm/vm_fault.c > head/sys/vm/vm_init.c > head/sys/vm/vm_map.h > head/sys/vm/vm_pager.c > head/sys/vm/vm_pager.h > head/sys/vm/vnode_pager.c > > Modified: head/sys/cam/ata/ata_da.c > ============================================================================== > --- head/sys/cam/ata/ata_da.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/ata/ata_da.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -3447,8 +3447,8 @@ adasetgeom(struct ada_softc *softc, struct ccb_getdev > maxio = softc->cpi.maxio; /* Honor max I/O size of SIM */ > if (maxio == 0) > maxio = DFLTPHYS; /* traditional default */ > - else if (maxio > MAXPHYS) > - maxio = MAXPHYS; /* for safety */ > + else if (maxio > maxphys) > + maxio = maxphys; /* for safety */ > if (softc->flags & ADA_FLAG_CAN_48BIT) > maxio = min(maxio, 65536 * softc->params.secsize); > else /* 28bit ATA command limit */ > > Modified: head/sys/cam/cam_compat.c > ============================================================================== > --- head/sys/cam/cam_compat.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/cam_compat.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -368,7 +368,7 @@ cam_compat_translate_dev_match_0x18(union ccb *ccb) > > /* Remap the CCB into kernel address space */ > bzero(&mapinfo, sizeof(mapinfo)); > - cam_periph_mapmem(ccb, &mapinfo, MAXPHYS); > + cam_periph_mapmem(ccb, &mapinfo, maxphys); > > dm = ccb->cdm.matches; > /* Translate in-place: old fields are smaller */ > > Modified: head/sys/cam/cam_periph.c > ============================================================================== > --- head/sys/cam/cam_periph.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/cam_periph.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -772,7 +772,7 @@ camperiphfree(struct cam_periph *periph) > * Map user virtual pointers into kernel virtual address space, so we can > * access the memory. This is now a generic function that centralizes most > * of the sanity checks on the data flags, if any. > - * This also only works for up to MAXPHYS memory. Since we use > + * This also only works for up to maxphys memory. Since we use > * buffers to map stuff in and out, we're limited to the buffer size. > */ > int > @@ -788,8 +788,8 @@ cam_periph_mapmem(union ccb *ccb, struct cam_periph_ma > bzero(mapinfo, sizeof(*mapinfo)); > if (maxmap == 0) > maxmap = DFLTPHYS; /* traditional default */ > - else if (maxmap > MAXPHYS) > - maxmap = MAXPHYS; /* for safety */ > + else if (maxmap > maxphys) > + maxmap = maxphys; /* for safety */ > switch(ccb->ccb_h.func_code) { > case XPT_DEV_MATCH: > if (ccb->cdm.match_buf_len == 0) { > @@ -813,9 +813,9 @@ cam_periph_mapmem(union ccb *ccb, struct cam_periph_ma > } > /* > * This request will not go to the hardware, no reason > - * to be so strict. vmapbuf() is able to map up to MAXPHYS. > + * to be so strict. vmapbuf() is able to map up to maxphys. > */ > - maxmap = MAXPHYS; > + maxmap = maxphys; > break; > case XPT_SCSI_IO: > case XPT_CONT_TARGET_IO: > @@ -881,9 +881,9 @@ cam_periph_mapmem(union ccb *ccb, struct cam_periph_ma > > /* > * This request will not go to the hardware, no reason > - * to be so strict. vmapbuf() is able to map up to MAXPHYS. > + * to be so strict. vmapbuf() is able to map up to maxphys. > */ > - maxmap = MAXPHYS; > + maxmap = maxphys; > break; > default: > return(EINVAL); > @@ -911,7 +911,7 @@ cam_periph_mapmem(union ccb *ccb, struct cam_periph_ma > * boundary. > */ > misaligned[i] = (lengths[i] + > - (((vm_offset_t)(*data_ptrs[i])) & PAGE_MASK) > MAXPHYS); > + (((vm_offset_t)(*data_ptrs[i])) & PAGE_MASK) > maxphys); > } > > /* > > Modified: head/sys/cam/cam_xpt.c > ============================================================================== > --- head/sys/cam/cam_xpt.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/cam_xpt.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -553,7 +553,7 @@ xptdoioctl(struct cdev *dev, u_long cmd, caddr_t addr, > * Map the pattern and match buffers into kernel > * virtual address space. > */ > - error = cam_periph_mapmem(inccb, &mapinfo, MAXPHYS); > + error = cam_periph_mapmem(inccb, &mapinfo, maxphys); > > if (error) { > inccb->ccb_h.path = old_path; > > Modified: head/sys/cam/ctl/ctl_backend_block.c > ============================================================================== > --- head/sys/cam/ctl/ctl_backend_block.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/ctl/ctl_backend_block.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -102,9 +102,11 @@ __FBSDID("$FreeBSD$"); > */ > #define CTLBLK_HALF_IO_SIZE (512 * 1024) > #define CTLBLK_MAX_IO_SIZE (CTLBLK_HALF_IO_SIZE * 2) > -#define CTLBLK_MAX_SEG MIN(CTLBLK_HALF_IO_SIZE, MAXPHYS) > -#define CTLBLK_HALF_SEGS MAX(CTLBLK_HALF_IO_SIZE / CTLBLK_MAX_SEG, 1) > +#define CTLBLK_MIN_SEG (128 * 1024) > +#define CTLBLK_MAX_SEG MIN(CTLBLK_HALF_IO_SIZE, maxphys) > +#define CTLBLK_HALF_SEGS MAX(CTLBLK_HALF_IO_SIZE / CTLBLK_MIN_SEG, 1) > #define CTLBLK_MAX_SEGS (CTLBLK_HALF_SEGS * 2) > +#define CTLBLK_NUM_SEGS (CTLBLK_MAX_IO_SIZE / CTLBLK_MAX_SEG) > > #ifdef CTLBLK_DEBUG > #define DPRINTF(fmt, args...) \ > @@ -189,10 +191,8 @@ struct ctl_be_block_softc { > int num_luns; > SLIST_HEAD(, ctl_be_block_lun) lun_list; > uma_zone_t beio_zone; > - uma_zone_t buf_zone; > -#if (CTLBLK_MAX_SEG > 131072) > - uma_zone_t buf128_zone; > -#endif > + uma_zone_t bufmin_zone; > + uma_zone_t bufmax_zone; > }; > > static struct ctl_be_block_softc backend_block_softc; > @@ -307,12 +307,13 @@ ctl_alloc_seg(struct ctl_be_block_softc *softc, struct > size_t len) > { > > -#if (CTLBLK_MAX_SEG > 131072) > - if (len <= 131072) > - sg->addr = uma_zalloc(softc->buf128_zone, M_WAITOK); > - else > -#endif > - sg->addr = uma_zalloc(softc->buf_zone, M_WAITOK); > + if (len <= CTLBLK_MIN_SEG) { > + sg->addr = uma_zalloc(softc->bufmin_zone, M_WAITOK); > + } else { > + KASSERT(len <= CTLBLK_MAX_SEG, > + ("Too large alloc %zu > %lu", len, CTLBLK_MAX_SEG)); > + sg->addr = uma_zalloc(softc->bufmax_zone, M_WAITOK); > + } > sg->len = len; > } > > @@ -320,12 +321,13 @@ static void > ctl_free_seg(struct ctl_be_block_softc *softc, struct ctl_sg_entry *sg) > { > > -#if (CTLBLK_MAX_SEG > 131072) > - if (sg->len <= 131072) > - uma_zfree(softc->buf128_zone, sg->addr); > - else > -#endif > - uma_zfree(softc->buf_zone, sg->addr); > + if (sg->len <= CTLBLK_MIN_SEG) { > + uma_zfree(softc->bufmin_zone, sg->addr); > + } else { > + KASSERT(sg->len <= CTLBLK_MAX_SEG, > + ("Too large free %zu > %lu", sg->len, CTLBLK_MAX_SEG)); > + uma_zfree(softc->bufmax_zone, sg->addr); > + } > } > > static struct ctl_be_block_io * > @@ -1344,7 +1346,7 @@ ctl_be_block_cw_dispatch_ws(struct ctl_be_block_lun *b > else > pbo = 0; > len_left = (uint64_t)lbalen->len * cbe_lun->blocksize; > - for (i = 0, lba = 0; i < CTLBLK_MAX_SEGS && len_left > 0; i++) { > + for (i = 0, lba = 0; i < CTLBLK_NUM_SEGS && len_left > 0; i++) { > /* > * Setup the S/G entry for this chunk. > */ > @@ -1631,7 +1633,7 @@ ctl_be_block_dispatch(struct ctl_be_block_lun *be_lun, > * Setup the S/G entry for this chunk. > */ > ctl_alloc_seg(softc, &beio->sg_segs[i], > - min(CTLBLK_MAX_SEG, len_left)); > + MIN(CTLBLK_MAX_SEG, len_left)); > > DPRINTF("segment %d addr %p len %zd\n", i, > beio->sg_segs[i].addr, beio->sg_segs[i].len); > @@ -2802,12 +2804,11 @@ ctl_be_block_init(void) > mtx_init(&softc->lock, "ctlblock", NULL, MTX_DEF); > softc->beio_zone = uma_zcreate("beio", sizeof(struct ctl_be_block_io), > NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0); > - softc->buf_zone = uma_zcreate("ctlblock", CTLBLK_MAX_SEG, > + softc->bufmin_zone = uma_zcreate("ctlblockmin", CTLBLK_MIN_SEG, > NULL, NULL, NULL, NULL, /*align*/ 0, /*flags*/0); > -#if (CTLBLK_MAX_SEG > 131072) > - softc->buf128_zone = uma_zcreate("ctlblock128", 131072, > - NULL, NULL, NULL, NULL, /*align*/ 0, /*flags*/0); > -#endif > + if (CTLBLK_MIN_SEG < CTLBLK_MAX_SEG) > + softc->bufmax_zone = uma_zcreate("ctlblockmax", CTLBLK_MAX_SEG, > + NULL, NULL, NULL, NULL, /*align*/ 0, /*flags*/0); > SLIST_INIT(&softc->lun_list); > return (0); > } > @@ -2832,10 +2833,9 @@ ctl_be_block_shutdown(void) > mtx_lock(&softc->lock); > } > mtx_unlock(&softc->lock); > - uma_zdestroy(softc->buf_zone); > -#if (CTLBLK_MAX_SEG > 131072) > - uma_zdestroy(softc->buf128_zone); > -#endif > + uma_zdestroy(softc->bufmin_zone); > + if (CTLBLK_MIN_SEG < CTLBLK_MAX_SEG) > + uma_zdestroy(softc->bufmax_zone); > uma_zdestroy(softc->beio_zone); > mtx_destroy(&softc->lock); > sx_destroy(&softc->modify_lock); > > Modified: head/sys/cam/mmc/mmc_da.c > ============================================================================== > --- head/sys/cam/mmc/mmc_da.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/mmc/mmc_da.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1592,7 +1592,7 @@ sdda_add_part(struct cam_periph *periph, u_int type, c > part->disk->d_name = part->name; > part->disk->d_drv1 = part; > part->disk->d_maxsize = > - MIN(MAXPHYS, sdda_get_max_data(periph, > + MIN(maxphys, sdda_get_max_data(periph, > (union ccb *)&cpi) * mmc_get_sector_size(periph)); > part->disk->d_unit = cnt; > part->disk->d_flags = 0; > > Modified: head/sys/cam/nvme/nvme_da.c > ============================================================================== > --- head/sys/cam/nvme/nvme_da.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/nvme/nvme_da.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -906,8 +906,8 @@ ndaregister(struct cam_periph *periph, void *arg) > maxio = cpi.maxio; /* Honor max I/O size of SIM */ > if (maxio == 0) > maxio = DFLTPHYS; /* traditional default */ > - else if (maxio > MAXPHYS) > - maxio = MAXPHYS; /* for safety */ > + else if (maxio > maxphys) > + maxio = maxphys; /* for safety */ > disk->d_maxsize = maxio; > flbas_fmt = (nsd->flbas >> NVME_NS_DATA_FLBAS_FORMAT_SHIFT) & > NVME_NS_DATA_FLBAS_FORMAT_MASK; > > Modified: head/sys/cam/scsi/scsi_cd.c > ============================================================================== > --- head/sys/cam/scsi/scsi_cd.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_cd.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -696,8 +696,8 @@ cdregister(struct cam_periph *periph, void *arg) > softc->disk->d_drv1 = periph; > if (cpi.maxio == 0) > softc->disk->d_maxsize = DFLTPHYS; /* traditional default */ > - else if (cpi.maxio > MAXPHYS) > - softc->disk->d_maxsize = MAXPHYS; /* for safety */ > + else if (cpi.maxio > maxphys) > + softc->disk->d_maxsize = maxphys; /* for safety */ > else > softc->disk->d_maxsize = cpi.maxio; > softc->disk->d_flags = 0; > > Modified: head/sys/cam/scsi/scsi_da.c > ============================================================================== > --- head/sys/cam/scsi/scsi_da.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_da.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -2921,8 +2921,8 @@ daregister(struct cam_periph *periph, void *arg) > softc->disk->d_drv1 = periph; > if (cpi.maxio == 0) > softc->maxio = DFLTPHYS; /* traditional default */ > - else if (cpi.maxio > MAXPHYS) > - softc->maxio = MAXPHYS; /* for safety */ > + else if (cpi.maxio > maxphys) > + softc->maxio = maxphys; /* for safety */ > else > softc->maxio = cpi.maxio; > if (softc->quirks & DA_Q_128KB) > @@ -4819,7 +4819,7 @@ dadone_proberc(struct cam_periph *periph, union ccb *d > if (maxsector == 0) > maxsector = -1; > } > - if (block_size >= MAXPHYS) { > + if (block_size >= maxphys) { > xpt_print(periph->path, > "unsupportable block size %ju\n", > (uintmax_t) block_size); > > Modified: head/sys/cam/scsi/scsi_pass.c > ============================================================================== > --- head/sys/cam/scsi/scsi_pass.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_pass.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -583,15 +583,15 @@ passregister(struct cam_periph *periph, void *arg) > periph->periph_name, periph->unit_number); > snprintf(softc->io_zone_name, sizeof(softc->io_zone_name), "%s%dIO", > periph->periph_name, periph->unit_number); > - softc->io_zone_size = MAXPHYS; > + softc->io_zone_size = maxphys; > knlist_init_mtx(&softc->read_select.si_note, cam_periph_mtx(periph)); > > xpt_path_inq(&cpi, periph->path); > > if (cpi.maxio == 0) > softc->maxio = DFLTPHYS; /* traditional default */ > - else if (cpi.maxio > MAXPHYS) > - softc->maxio = MAXPHYS; /* for safety */ > + else if (cpi.maxio > maxphys) > + softc->maxio = maxphys; /* for safety */ > else > softc->maxio = cpi.maxio; /* real value */ > > @@ -1507,7 +1507,7 @@ passmemsetup(struct cam_periph *periph, struct pass_io > > /* > * We allocate buffers in io_zone_size increments for an > - * S/G list. This will generally be MAXPHYS. > + * S/G list. This will generally be maxphys. > */ > if (lengths[0] <= softc->io_zone_size) > num_segs_needed = 1; > > Modified: head/sys/cam/scsi/scsi_sa.c > ============================================================================== > --- head/sys/cam/scsi/scsi_sa.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_sa.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -2447,12 +2447,12 @@ saregister(struct cam_periph *periph, void *arg) > > /* > * If maxio isn't set, we fall back to DFLTPHYS. Otherwise we take > - * the smaller of cpi.maxio or MAXPHYS. > + * the smaller of cpi.maxio or maxphys. > */ > if (cpi.maxio == 0) > softc->maxio = DFLTPHYS; > - else if (cpi.maxio > MAXPHYS) > - softc->maxio = MAXPHYS; > + else if (cpi.maxio > maxphys) > + softc->maxio = maxphys; > else > softc->maxio = cpi.maxio; > > > Modified: head/sys/cam/scsi/scsi_sg.c > ============================================================================== > --- head/sys/cam/scsi/scsi_sg.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_sg.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -327,8 +327,8 @@ sgregister(struct cam_periph *periph, void *arg) > > if (cpi.maxio == 0) > softc->maxio = DFLTPHYS; /* traditional default */ > - else if (cpi.maxio > MAXPHYS) > - softc->maxio = MAXPHYS; /* for safety */ > + else if (cpi.maxio > maxphys) > + softc->maxio = maxphys; /* for safety */ > else > softc->maxio = cpi.maxio; /* real value */ > > > Modified: head/sys/cam/scsi/scsi_target.c > ============================================================================== > --- head/sys/cam/scsi/scsi_target.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/cam/scsi/scsi_target.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -404,8 +404,8 @@ targenable(struct targ_softc *softc, struct cam_path * > } > if (cpi.maxio == 0) > softc->maxio = DFLTPHYS; /* traditional default */ > - else if (cpi.maxio > MAXPHYS) > - softc->maxio = MAXPHYS; /* for safety */ > + else if (cpi.maxio > maxphys) > + softc->maxio = maxphys; /* for safety */ > else > softc->maxio = cpi.maxio; /* real value */ > > > Modified: head/sys/compat/linprocfs/linprocfs.c > ============================================================================== > --- head/sys/compat/linprocfs/linprocfs.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/compat/linprocfs/linprocfs.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1928,8 +1928,8 @@ linprocfs_doauxv(PFS_FILL_ARGS) > buflen = resid; > if (buflen > IOSIZE_MAX) > return (EINVAL); > - if (buflen > MAXPHYS) > - buflen = MAXPHYS; > + if (buflen > maxphys) > + buflen = maxphys; > if (resid <= 0) > return (0); > > > Modified: head/sys/compat/linux/linux_ioctl.c > ============================================================================== > --- head/sys/compat/linux/linux_ioctl.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/compat/linux/linux_ioctl.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -2152,7 +2152,7 @@ linux_ifconf(struct thread *td, struct ifconf *uifc) > if (error != 0) > return (error); > > - max_len = MAXPHYS - 1; > + max_len = maxphys - 1; > > CURVNET_SET(TD_TO_VNET(td)); > /* handle the 'request buffer size' case */ > > Modified: head/sys/conf/options > ============================================================================== > --- head/sys/conf/options Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/conf/options Sat Nov 28 12:12:51 2020 (r368124) > @@ -602,7 +602,7 @@ INVARIANTS opt_global.h > KASSERT_PANIC_OPTIONAL opt_global.h > MAXCPU opt_global.h > MAXMEMDOM opt_global.h > -MAXPHYS opt_global.h > +MAXPHYS opt_maxphys.h > MCLSHIFT opt_global.h > MUTEX_NOINLINE opt_global.h > LOCK_PROFILING opt_global.h > > Modified: head/sys/contrib/openzfs/module/os/freebsd/zfs/vdev_geom.c > ============================================================================== > --- head/sys/contrib/openzfs/module/os/freebsd/zfs/vdev_geom.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/contrib/openzfs/module/os/freebsd/zfs/vdev_geom.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -379,7 +379,7 @@ vdev_geom_io(struct g_consumer *cp, int *cmds, void ** > int i, n_bios, j; > size_t bios_size; > > - maxio = MAXPHYS - (MAXPHYS % cp->provider->sectorsize); > + maxio = maxphys - (maxphys % cp->provider->sectorsize); > n_bios = 0; > > /* How many bios are required for all commands ? */ > > Modified: head/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c > ============================================================================== > --- head/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/contrib/openzfs/module/os/freebsd/zfs/zvol_os.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1191,7 +1191,7 @@ zvol_rename_minor(zvol_state_t *zv, const char *newnam > args.mda_si_drv2 = zv; > if (make_dev_s(&args, &dev, "%s/%s", ZVOL_DRIVER, newname) > == 0) { > - dev->si_iosize_max = MAXPHYS; > + dev->si_iosize_max = maxphys; > zsd->zsd_cdev = dev; > } > } > @@ -1327,7 +1327,7 @@ zvol_create_minor_impl(const char *name) > dmu_objset_disown(os, B_TRUE, FTAG); > goto out_giant; > } > - dev->si_iosize_max = MAXPHYS; > + dev->si_iosize_max = maxphys; > zsd->zsd_cdev = dev; > } > (void) strlcpy(zv->zv_name, name, MAXPATHLEN); > > Modified: head/sys/dev/ahci/ahci.c > ============================================================================== > --- head/sys/dev/ahci/ahci.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ahci/ahci.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1124,8 +1124,7 @@ ahci_dmainit(device_t dev) > error = bus_dma_tag_create(bus_get_dma_tag(dev), 2, 0, > BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, > NULL, NULL, > - AHCI_SG_ENTRIES * PAGE_SIZE * ch->numslots, > - AHCI_SG_ENTRIES, AHCI_PRD_MAX, > + AHCI_SG_ENTRIES * PAGE_SIZE, AHCI_SG_ENTRIES, AHCI_PRD_MAX, > 0, busdma_lock_mutex, &ch->mtx, &ch->dma.data_tag); > if (error != 0) > goto error; > @@ -1187,6 +1186,7 @@ ahci_slotsalloc(device_t dev) > slot->ch = ch; > slot->slot = i; > slot->state = AHCI_SLOT_EMPTY; > + slot->ct_offset = AHCI_CT_OFFSET + AHCI_CT_SIZE * i; > slot->ccb = NULL; > callout_init_mtx(&slot->timeout, &ch->mtx, 0); > > @@ -1642,8 +1642,7 @@ ahci_dmasetprd(void *arg, bus_dma_segment_t *segs, int > } > KASSERT(nsegs <= AHCI_SG_ENTRIES, ("too many DMA segment entries\n")); > /* Get a piece of the workspace for this request */ > - ctp = (struct ahci_cmd_tab *) > - (ch->dma.work + AHCI_CT_OFFSET + (AHCI_CT_SIZE * slot->slot)); > + ctp = (struct ahci_cmd_tab *)(ch->dma.work + slot->ct_offset); > /* Fill S/G table */ > prd = &ctp->prd_tab[0]; > for (i = 0; i < nsegs; i++) { > @@ -1672,8 +1671,7 @@ ahci_execute_transaction(struct ahci_slot *slot) > uint16_t cmd_flags; > > /* Get a piece of the workspace for this request */ > - ctp = (struct ahci_cmd_tab *) > - (ch->dma.work + AHCI_CT_OFFSET + (AHCI_CT_SIZE * slot->slot)); > + ctp = (struct ahci_cmd_tab *)(ch->dma.work + slot->ct_offset); > /* Setup the FIS for this request */ > if (!(fis_size = ahci_setup_fis(ch, ctp, ccb, slot->slot))) { > device_printf(ch->dev, "Setting up SATA FIS failed\n"); > @@ -1710,8 +1708,7 @@ ahci_execute_transaction(struct ahci_slot *slot) > softreset = 0; > clp->bytecount = 0; > clp->cmd_flags = htole16(cmd_flags); > - clp->cmd_table_phys = htole64(ch->dma.work_bus + AHCI_CT_OFFSET + > - (AHCI_CT_SIZE * slot->slot)); > + clp->cmd_table_phys = htole64(ch->dma.work_bus + slot->ct_offset); > bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, > BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); > bus_dmamap_sync(ch->dma.rfis_tag, ch->dma.rfis_map, > @@ -2868,7 +2865,7 @@ ahciaction(struct cam_sim *sim, union ccb *ccb) > cpi->transport_version = XPORT_VERSION_UNSPECIFIED; > cpi->protocol = PROTO_ATA; > cpi->protocol_version = PROTO_VERSION_UNSPECIFIED; > - cpi->maxio = MAXPHYS; > + cpi->maxio = ctob(AHCI_SG_ENTRIES - 1); > /* ATI SB600 can't handle 256 sectors with FPDMA (NCQ). */ > if (ch->quirks & AHCI_Q_MAXIO_64K) > cpi->maxio = min(cpi->maxio, 128 * 512); > > Modified: head/sys/dev/ahci/ahci.h > ============================================================================== > --- head/sys/dev/ahci/ahci.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ahci/ahci.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -310,13 +310,8 @@ > #define AHCI_P_DEVSLP_DM 0x0e000000 > #define AHCI_P_DEVSLP_DM_SHIFT 25 > > -/* Just to be sure, if building as module. */ > -#if MAXPHYS < 512 * 1024 > -#undef MAXPHYS > -#define MAXPHYS 512 * 1024 > -#endif > /* Pessimistic prognosis on number of required S/G entries */ > -#define AHCI_SG_ENTRIES (roundup(btoc(MAXPHYS) + 1, 8)) > +#define AHCI_SG_ENTRIES MIN(roundup(btoc(maxphys) + 1, 8), 65528) > /* Command list. 32 commands. First, 1Kbyte aligned. */ > #define AHCI_CL_OFFSET 0 > #define AHCI_CL_SIZE 32 > @@ -344,7 +339,7 @@ struct ahci_cmd_tab { > u_int8_t cfis[64]; > u_int8_t acmd[32]; > u_int8_t reserved[32]; > - struct ahci_dma_prd prd_tab[AHCI_SG_ENTRIES]; > + struct ahci_dma_prd prd_tab[]; > } __packed; > > struct ahci_cmd_list { > @@ -394,6 +389,7 @@ struct ahci_slot { > struct ahci_channel *ch; /* Channel */ > u_int8_t slot; /* Number of this slot */ > enum ahci_slot_states state; /* Slot state */ > + u_int ct_offset; /* cmd_tab offset */ > union ccb *ccb; /* CCB occupying slot */ > struct ata_dmaslot dma; /* DMA data of this slot */ > struct callout timeout; /* Execution timeout */ > > Modified: head/sys/dev/ahci/ahciem.c > ============================================================================== > --- head/sys/dev/ahci/ahciem.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ahci/ahciem.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -641,7 +641,7 @@ ahciemaction(struct cam_sim *sim, union ccb *ccb) > cpi->transport_version = XPORT_VERSION_UNSPECIFIED; > cpi->protocol = PROTO_ATA; > cpi->protocol_version = PROTO_VERSION_UNSPECIFIED; > - cpi->maxio = MAXPHYS; > + cpi->maxio = maxphys; > cpi->hba_vendor = pci_get_vendor(parent); > cpi->hba_device = pci_get_device(parent); > cpi->hba_subvendor = pci_get_subvendor(parent); > > Modified: head/sys/dev/ata/ata-all.c > ============================================================================== > --- head/sys/dev/ata/ata-all.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ata/ata-all.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -139,7 +139,7 @@ ata_attach(device_t dev) > if (ch->flags & ATA_SATA) > ch->user[i].bytecount = 8192; > else > - ch->user[i].bytecount = MAXPHYS; > + ch->user[i].bytecount = 65536; > ch->user[i].caps = 0; > ch->curr[i] = ch->user[i]; > if (ch->flags & ATA_SATA) { > > Modified: head/sys/dev/ata/ata-all.h > ============================================================================== > --- head/sys/dev/ata/ata-all.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ata/ata-all.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -152,7 +152,7 @@ > #define ATA_SACTIVE 16 > > /* DMA register defines */ > -#define ATA_DMA_ENTRIES 256 > +#define ATA_DMA_ENTRIES MAX(17, btoc(maxphys) + 1) > #define ATA_DMA_EOT 0x80000000 > > #define ATA_BMCMD_PORT 17 > > Modified: head/sys/dev/ata/ata-dma.c > ============================================================================== > --- head/sys/dev/ata/ata-dma.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/ata/ata-dma.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -87,7 +87,7 @@ ata_dmainit(device_t dev) > if (ch->dma.segsize == 0) > ch->dma.segsize = 65536; > if (ch->dma.max_iosize == 0) > - ch->dma.max_iosize = MIN((ATA_DMA_ENTRIES - 1) * PAGE_SIZE, MAXPHYS); > + ch->dma.max_iosize = (ATA_DMA_ENTRIES - 1) * PAGE_SIZE; > if (ch->dma.max_address == 0) > ch->dma.max_address = BUS_SPACE_MAXADDR_32BIT; > if (ch->dma.dma_slots == 0) > > Modified: head/sys/dev/firewire/sbp.c > ============================================================================== > --- head/sys/dev/firewire/sbp.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/firewire/sbp.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -71,7 +71,7 @@ > * because of CAM_SCSI2_MAXLUN in cam_xpt.c > */ > #define SBP_NUM_LUNS 64 > -#define SBP_MAXPHYS MIN(MAXPHYS, (512*1024) /* 512KB */) > +#define SBP_MAXPHYS (128 * 1024) > #define SBP_DMA_SIZE PAGE_SIZE > #define SBP_LOGIN_SIZE sizeof(struct sbp_login_res) > #define SBP_QUEUE_LEN ((SBP_DMA_SIZE - SBP_LOGIN_SIZE) / sizeof(struct sbp_ocb)) > > Modified: head/sys/dev/flash/cqspi.c > ============================================================================== > --- head/sys/dev/flash/cqspi.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/flash/cqspi.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -721,9 +721,9 @@ cqspi_attach(device_t dev) > return (ENXIO); > } > > - xdma_prep_sg(sc->xchan_tx, TX_QUEUE_SIZE, MAXPHYS, 8, 16, 0, > + xdma_prep_sg(sc->xchan_tx, TX_QUEUE_SIZE, maxphys, 8, 16, 0, > BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR); > - xdma_prep_sg(sc->xchan_rx, TX_QUEUE_SIZE, MAXPHYS, 8, 16, 0, > + xdma_prep_sg(sc->xchan_rx, TX_QUEUE_SIZE, maxphys, 8, 16, 0, > BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR); > > cqspi_init(sc); > > Modified: head/sys/dev/isci/scil/sci_controller_constants.h > ============================================================================== > --- head/sys/dev/isci/scil/sci_controller_constants.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/isci/scil/sci_controller_constants.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -157,7 +157,7 @@ extern "C" { > * posted to hardware always contain pairs of elements (with second > * element set to zeroes if not needed). > */ > -#define __MAXPHYS_ELEMENTS ((MAXPHYS / PAGE_SIZE) + 1) > +#define __MAXPHYS_ELEMENTS ((128 * 1024 / PAGE_SIZE) + 1) > #define SCI_MAX_SCATTER_GATHER_ELEMENTS ((__MAXPHYS_ELEMENTS + 1) & ~0x1) > #endif > > > Modified: head/sys/dev/iscsi/iscsi.c > ============================================================================== > --- head/sys/dev/iscsi/iscsi.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/iscsi/iscsi.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -2407,7 +2407,7 @@ iscsi_action(struct cam_sim *sim, union ccb *ccb) > cpi->transport_version = 0; > cpi->protocol = PROTO_SCSI; > cpi->protocol_version = SCSI_REV_SPC3; > - cpi->maxio = MAXPHYS; > + cpi->maxio = maxphys; > cpi->ccb_h.status = CAM_REQ_CMP; > break; > } > > Modified: head/sys/dev/md/md.c > ============================================================================== > --- head/sys/dev/md/md.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/md/md.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -960,9 +960,10 @@ mdstart_vnode(struct md_s *sc, struct bio *bp) > piov = auio.uio_iov; > } else if ((bp->bio_flags & BIO_UNMAPPED) != 0) { > pb = uma_zalloc(md_pbuf_zone, M_WAITOK); > + MPASS((pb->b_flags & B_MAXPHYS) != 0); > bp->bio_resid = len; > unmapped_step: > - npages = atop(min(MAXPHYS, round_page(len + (ma_offs & > + npages = atop(min(maxphys, round_page(len + (ma_offs & > PAGE_MASK)))); > iolen = min(ptoa(npages) - (ma_offs & PAGE_MASK), len); > KASSERT(iolen > 0, ("zero iolen")); > @@ -1684,7 +1685,7 @@ kern_mdattach_locked(struct thread *td, struct md_req > sectsize = DEV_BSIZE; > else > sectsize = mdr->md_sectorsize; > - if (sectsize > MAXPHYS || mdr->md_mediasize < sectsize) > + if (sectsize > maxphys || mdr->md_mediasize < sectsize) > return (EINVAL); > if (mdr->md_options & MD_AUTOUNIT) > sc = mdnew(-1, &error, mdr->md_type); > > Modified: head/sys/dev/mfi/mfi.c > ============================================================================== > --- head/sys/dev/mfi/mfi.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mfi/mfi.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -457,7 +457,7 @@ mfi_attach(struct mfi_softc *sc) > /* > * Get information needed for sizing the contiguous memory for the > * frame pool. Size down the sgl parameter since we know that > - * we will never need more than what's required for MAXPHYS. > + * we will never need more than what's required for MFI_MAXPHYS. > * It would be nice if these constants were available at runtime > * instead of compile time. > */ > > Modified: head/sys/dev/mpr/mpr.c > ============================================================================== > --- head/sys/dev/mpr/mpr.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mpr/mpr.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -436,14 +436,14 @@ mpr_resize_queues(struct mpr_softc *sc) > > /* > * If I/O size limitation requested then use it and pass up to CAM. > - * If not, use MAXPHYS as an optimization hint, but report HW limit. > + * If not, use maxphys as an optimization hint, but report HW limit. > */ > if (sc->max_io_pages > 0) { > maxio = min(maxio, sc->max_io_pages * PAGE_SIZE); > sc->maxio = maxio; > } else { > sc->maxio = maxio; > - maxio = min(maxio, MAXPHYS); > + maxio = min(maxio, maxphys); > } > > sc->num_chains = (maxio / PAGE_SIZE + sges_per_frame - 2) / > > Modified: head/sys/dev/mps/mps.c > ============================================================================== > --- head/sys/dev/mps/mps.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mps/mps.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -418,14 +418,14 @@ mps_resize_queues(struct mps_softc *sc) > > /* > * If I/O size limitation requested, then use it and pass up to CAM. > - * If not, use MAXPHYS as an optimization hint, but report HW limit. > + * If not, use maxphys as an optimization hint, but report HW limit. > */ > if (sc->max_io_pages > 0) { > maxio = min(maxio, sc->max_io_pages * PAGE_SIZE); > sc->maxio = maxio; > } else { > sc->maxio = maxio; > - maxio = min(maxio, MAXPHYS); > + maxio = min(maxio, maxphys); > } > > sc->num_chains = (maxio / PAGE_SIZE + sges_per_frame - 2) / > > Modified: head/sys/dev/mpt/mpt.c > ============================================================================== > --- head/sys/dev/mpt/mpt.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mpt/mpt.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -2691,7 +2691,7 @@ mpt_configure_ioc(struct mpt_softc *mpt, int tn, int n > /* > * Use this as the basis for reporting the maximum I/O size to CAM. > */ > - mpt->max_cam_seg_cnt = min(mpt->max_seg_cnt, (MAXPHYS / PAGE_SIZE) + 1); > + mpt->max_cam_seg_cnt = min(mpt->max_seg_cnt, btoc(maxphys) + 1); > > /* XXX Lame Locking! */ > MPT_UNLOCK(mpt); > > Modified: head/sys/dev/mpt/mpt.h > ============================================================================== > --- head/sys/dev/mpt/mpt.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mpt/mpt.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -668,7 +668,7 @@ struct mpt_softc { > bus_addr_t request_phys; /* BusAddr of request memory */ > > uint32_t max_seg_cnt; /* calculated after IOC facts */ > - uint32_t max_cam_seg_cnt;/* calculated from MAXPHYS*/ > + uint32_t max_cam_seg_cnt;/* calculated from maxphys */ > > /* > * Hardware management > > Modified: head/sys/dev/mrsas/mrsas.c > ============================================================================== > --- head/sys/dev/mrsas/mrsas.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mrsas/mrsas.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1922,9 +1922,9 @@ mrsas_alloc_mem(struct mrsas_softc *sc) > BUS_SPACE_MAXADDR, /* lowaddr */ > BUS_SPACE_MAXADDR, /* highaddr */ > NULL, NULL, /* filter, filterarg */ > - MAXPHYS, /* maxsize */ > + maxphys, /* maxsize */ > sc->max_num_sge, /* nsegments */ > - MAXPHYS, /* maxsegsize */ > + maxphys, /* maxsegsize */ > 0, /* flags */ > NULL, NULL, /* lockfunc, lockarg */ > &sc->mrsas_parent_tag /* tag */ > @@ -2154,9 +2154,9 @@ mrsas_alloc_mem(struct mrsas_softc *sc) > BUS_SPACE_MAXADDR, > BUS_SPACE_MAXADDR, > NULL, NULL, > - MAXPHYS, > + maxphys, > sc->max_num_sge, /* nsegments */ > - MAXPHYS, > + maxphys, > BUS_DMA_ALLOCNOW, > busdma_lock_mutex, > &sc->io_lock, > > Modified: head/sys/dev/mvs/mvs.c > ============================================================================== > --- head/sys/dev/mvs/mvs.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mvs/mvs.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -370,8 +370,7 @@ mvs_dmainit(device_t dev) > if (bus_dma_tag_create(bus_get_dma_tag(dev), 2, MVS_EPRD_MAX, > BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, > NULL, NULL, > - MVS_SG_ENTRIES * PAGE_SIZE * MVS_MAX_SLOTS, > - MVS_SG_ENTRIES, MVS_EPRD_MAX, > + MVS_SG_ENTRIES * PAGE_SIZE, MVS_SG_ENTRIES, MVS_EPRD_MAX, > 0, busdma_lock_mutex, &ch->mtx, &ch->dma.data_tag)) { > goto error; > } > @@ -438,6 +437,7 @@ mvs_slotsalloc(device_t dev) > slot->dev = dev; > slot->slot = i; > slot->state = MVS_SLOT_EMPTY; > + slot->eprd_offset = MVS_EPRD_OFFSET + MVS_EPRD_SIZE * i; > slot->ccb = NULL; > callout_init_mtx(&slot->timeout, &ch->mtx, 0); > > @@ -1286,8 +1286,7 @@ mvs_dmasetprd(void *arg, bus_dma_segment_t *segs, int > } else { > slot->dma.addr = 0; > /* Get a piece of the workspace for this EPRD */ > - eprd = (struct mvs_eprd *) > - (ch->dma.workrq + MVS_EPRD_OFFSET + (MVS_EPRD_SIZE * slot->slot)); > + eprd = (struct mvs_eprd *)(ch->dma.workrq + slot->eprd_offset); > /* Fill S/G table */ > for (i = 0; i < nsegs; i++) { > eprd[i].prdbal = htole32(segs[i].ds_addr); > @@ -1405,8 +1404,7 @@ mvs_legacy_execute_transaction(struct mvs_slot *slot) > DELAY(10); > if (ch->basic_dma) { > /* Start basic DMA. */ > - eprd = ch->dma.workrq_bus + MVS_EPRD_OFFSET + > - (MVS_EPRD_SIZE * slot->slot); > + eprd = ch->dma.workrq_bus + slot->eprd_offset; > ATA_OUTL(ch->r_mem, DMA_DTLBA, eprd); > ATA_OUTL(ch->r_mem, DMA_DTHBA, (eprd >> 16) >> 16); > ATA_OUTL(ch->r_mem, DMA_C, DMA_C_START | > @@ -1433,7 +1431,7 @@ mvs_execute_transaction(struct mvs_slot *slot) > int i; > > /* Get address of the prepared EPRD */ > - eprd = ch->dma.workrq_bus + MVS_EPRD_OFFSET + (MVS_EPRD_SIZE * slot->slot); > + eprd = ch->dma.workrq_bus + slot->eprd_offset; > /* Prepare CRQB. Gen IIe uses different CRQB format. */ > if (ch->quirks & MVS_Q_GENIIE) { > crqb2e = (struct mvs_crqb_gen2e *) > @@ -2423,7 +2421,7 @@ mvsaction(struct cam_sim *sim, union ccb *ccb) > cpi->transport_version = XPORT_VERSION_UNSPECIFIED; > cpi->protocol = PROTO_ATA; > cpi->protocol_version = PROTO_VERSION_UNSPECIFIED; > - cpi->maxio = MAXPHYS; > + cpi->maxio = maxphys; > if ((ch->quirks & MVS_Q_SOC) == 0) { > cpi->hba_vendor = pci_get_vendor(parent); > cpi->hba_device = pci_get_device(parent); > > Modified: head/sys/dev/mvs/mvs.h > ============================================================================== > --- head/sys/dev/mvs/mvs.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/mvs/mvs.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -392,7 +392,7 @@ > #define MVS_MAX_SLOTS 32 > > /* Pessimistic prognosis on number of required S/G entries */ > -#define MVS_SG_ENTRIES (btoc(MAXPHYS) + 1) > +#define MVS_SG_ENTRIES (btoc(maxphys) + 1) > > /* EDMA Command Request Block (CRQB) Data */ > struct mvs_crqb { > @@ -505,6 +505,7 @@ struct mvs_slot { > int slot; /* Number of this slot */ > int tag; /* Used command tag */ > enum mvs_slot_states state; /* Slot state */ > + u_int eprd_offset; /* EPRD offset */ > union ccb *ccb; /* CCB occupying slot */ > struct ata_dmaslot dma; /* DMA data of this slot */ > struct callout timeout; /* Execution timeout */ > > Modified: head/sys/dev/nvme/nvme.h > ============================================================================== > --- head/sys/dev/nvme/nvme.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/nvme/nvme.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -60,7 +60,7 @@ > #define NVME_GLOBAL_NAMESPACE_TAG ((uint32_t)0xFFFFFFFF) > > /* Cap nvme to 1MB transfers driver explodes with larger sizes */ > -#define NVME_MAX_XFER_SIZE (MAXPHYS < (1<<20) ? MAXPHYS : (1<<20)) > +#define NVME_MAX_XFER_SIZE (maxphys < (1<<20) ? maxphys : (1<<20)) > > /* Register field definitions */ > #define NVME_CAP_LO_REG_MQES_SHIFT (0) > > Modified: head/sys/dev/nvme/nvme_ctrlr.c > ============================================================================== > --- head/sys/dev/nvme/nvme_ctrlr.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/nvme/nvme_ctrlr.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1248,13 +1248,13 @@ nvme_ctrlr_passthrough_cmd(struct nvme_controller *ctr > if (pt->len > 0) { > /* > * vmapbuf calls vm_fault_quick_hold_pages which only maps full > - * pages. Ensure this request has fewer than MAXPHYS bytes when > + * pages. Ensure this request has fewer than maxphys bytes when > * extended to full pages. > */ > addr = (vm_offset_t)pt->buf; > end = round_page(addr + pt->len); > addr = trunc_page(addr); > - if (end - addr > MAXPHYS) > + if (end - addr > maxphys) > return EIO; > > if (pt->len > ctrlr->max_xfer_size) { > > Modified: head/sys/dev/pms/freebsd/driver/ini/src/agdef.h > ============================================================================== > --- head/sys/dev/pms/freebsd/driver/ini/src/agdef.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/pms/freebsd/driver/ini/src/agdef.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -62,7 +62,7 @@ EW 09-17-2004 1.0.0 Constant definitions > #define AGTIAPI_MAX_DEVICE_7H 256 /*Max devices per channel in 7H */ > #define AGTIAPI_MAX_DEVICE_8H 512 /*Max devices per channel in 8H*/ > #define AGTIAPI_MAX_CAM_Q_DEPTH 1024 > -#define AGTIAPI_NSEGS (MAXPHYS / PAGE_SIZE) > +#define AGTIAPI_NSEGS (maxphys / PAGE_SIZE) > /* > ** Adapter specific defines > */ > > Modified: head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c > ============================================================================== > --- head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/pms/freebsd/driver/ini/src/agtiapi.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -1623,8 +1623,8 @@ int agtiapi_alloc_requests( struct agtiapi_softc *pmcs > > nsegs = AGTIAPI_NSEGS; > rsize = AGTIAPI_MAX_DMA_SEGS; // 128 > - AGTIAPI_PRINTK( "agtiapi_alloc_requests: MAXPHYS 0x%x PAGE_SIZE 0x%x \n", > - MAXPHYS, PAGE_SIZE ); > + AGTIAPI_PRINTK( "agtiapi_alloc_requests: maxphys 0x%lx PAGE_SIZE 0x%x \n", > + maxphys, PAGE_SIZE ); > AGTIAPI_PRINTK( "agtiapi_alloc_requests: nsegs %d rsize %d \n", > nsegs, rsize ); // 32, 128 > // This is for csio->data_ptr > > Modified: head/sys/dev/sdhci/sdhci.c > ============================================================================== > --- head/sys/dev/sdhci/sdhci.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/sdhci/sdhci.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -722,19 +722,19 @@ sdhci_dma_alloc(struct sdhci_slot *slot) > int err; > > if (!(slot->quirks & SDHCI_QUIRK_BROKEN_SDMA_BOUNDARY)) { > - if (MAXPHYS <= 1024 * 4) > + if (maxphys <= 1024 * 4) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_4K; > - else if (MAXPHYS <= 1024 * 8) > + else if (maxphys <= 1024 * 8) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_8K; > - else if (MAXPHYS <= 1024 * 16) > + else if (maxphys <= 1024 * 16) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_16K; > - else if (MAXPHYS <= 1024 * 32) > + else if (maxphys <= 1024 * 32) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_32K; > - else if (MAXPHYS <= 1024 * 64) > + else if (maxphys <= 1024 * 64) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_64K; > - else if (MAXPHYS <= 1024 * 128) > + else if (maxphys <= 1024 * 128) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_128K; > - else if (MAXPHYS <= 1024 * 256) > + else if (maxphys <= 1024 * 256) > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_256K; > else > slot->sdma_boundary = SDHCI_BLKSZ_SDMA_BNDRY_512K; > @@ -2534,7 +2534,7 @@ sdhci_cam_action(struct cam_sim *sim, union ccb *ccb) > > switch (ccb->ccb_h.func_code) { > case XPT_PATH_INQ: > - mmc_path_inq(&ccb->cpi, "Deglitch Networks", sim, MAXPHYS); > + mmc_path_inq(&ccb->cpi, "Deglitch Networks", sim, maxphys); > break; > > case XPT_GET_TRAN_SETTINGS: > > Modified: head/sys/dev/siis/siis.c > ============================================================================== > --- head/sys/dev/siis/siis.c Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/siis/siis.c Sat Nov 28 12:12:51 2020 (r368124) > @@ -688,8 +688,7 @@ siis_dmainit(device_t dev) > if (bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, > BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, > NULL, NULL, > - SIIS_SG_ENTRIES * PAGE_SIZE * SIIS_MAX_SLOTS, > - SIIS_SG_ENTRIES, 0xFFFFFFFF, > + SIIS_SG_ENTRIES * PAGE_SIZE, SIIS_SG_ENTRIES, 0xFFFFFFFF, > 0, busdma_lock_mutex, &ch->mtx, &ch->dma.data_tag)) { > goto error; > } > @@ -745,6 +744,7 @@ siis_slotsalloc(device_t dev) > slot->dev = dev; > slot->slot = i; > slot->state = SIIS_SLOT_EMPTY; > + slot->prb_offset = SIIS_PRB_SIZE * i; > slot->ccb = NULL; > callout_init_mtx(&slot->timeout, &ch->mtx, 0); > > @@ -1034,8 +1034,7 @@ siis_dmasetprd(void *arg, bus_dma_segment_t *segs, int > slot->dma.nsegs = nsegs; > if (nsegs != 0) { > /* Get a piece of the workspace for this request */ > - ctp = (struct siis_cmd *)(ch->dma.work + SIIS_CT_OFFSET + > - (SIIS_CT_SIZE * slot->slot)); > + ctp = (struct siis_cmd *)(ch->dma.work + slot->prb_offset); > /* Fill S/G table */ > if (slot->ccb->ccb_h.func_code == XPT_ATA_IO) > prd = &ctp->u.ata.prd[0]; > @@ -1066,8 +1065,7 @@ siis_execute_transaction(struct siis_slot *slot) > > mtx_assert(&ch->mtx, MA_OWNED); > /* Get a piece of the workspace for this request */ > - ctp = (struct siis_cmd *) > - (ch->dma.work + SIIS_CT_OFFSET + (SIIS_CT_SIZE * slot->slot)); > + ctp = (struct siis_cmd *)(ch->dma.work + slot->prb_offset); > ctp->control = 0; > ctp->protocol_override = 0; > ctp->transfer_count = 0; > @@ -1117,8 +1115,7 @@ siis_execute_transaction(struct siis_slot *slot) > /* Issue command to the controller. */ > slot->state = SIIS_SLOT_RUNNING; > ch->rslots |= (1 << slot->slot); > - prb_bus = ch->dma.work_bus + > - SIIS_CT_OFFSET + (SIIS_CT_SIZE * slot->slot); > + prb_bus = ch->dma.work_bus + slot->prb_offset; > ATA_OUTL(ch->r_mem, SIIS_P_CACTL(slot->slot), prb_bus); > ATA_OUTL(ch->r_mem, SIIS_P_CACTH(slot->slot), prb_bus >> 32); > /* Start command execution timeout */ > @@ -1967,7 +1964,7 @@ siisaction(struct cam_sim *sim, union ccb *ccb) > cpi->transport_version = XPORT_VERSION_UNSPECIFIED; > cpi->protocol = PROTO_ATA; > cpi->protocol_version = PROTO_VERSION_UNSPECIFIED; > - cpi->maxio = MAXPHYS; > + cpi->maxio = maxphys; > cpi->hba_vendor = pci_get_vendor(parent); > cpi->hba_device = pci_get_device(parent); > cpi->hba_subvendor = pci_get_subvendor(parent); > > Modified: head/sys/dev/siis/siis.h > ============================================================================== > --- head/sys/dev/siis/siis.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/siis/siis.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -263,18 +263,12 @@ > #define SIIS_OFFSET 0x100 > #define SIIS_STEP 0x80 > > -/* Just to be sure, if building as module. */ > -#if MAXPHYS < 512 * 1024 > -#undef MAXPHYS > -#define MAXPHYS 512 * 1024 > -#endif > /* Pessimistic prognosis on number of required S/G entries */ > -#define SIIS_SG_ENTRIES (roundup(btoc(MAXPHYS), 4) + 1) > -/* Command tables. Up to 32 commands, Each, 128byte aligned. */ > -#define SIIS_CT_OFFSET 0 > -#define SIIS_CT_SIZE (32 + 16 + SIIS_SG_ENTRIES * 16) > +#define SIIS_SG_ENTRIES (roundup(btoc(maxphys), 4) + 1) > +/* Port Request Block + S/G entries. 128byte aligned. */ > +#define SIIS_PRB_SIZE (32 + 16 + SIIS_SG_ENTRIES * 16) > /* Total main work area. */ > -#define SIIS_WORK_SIZE (SIIS_CT_OFFSET + SIIS_CT_SIZE * SIIS_MAX_SLOTS) > +#define SIIS_WORK_SIZE (SIIS_PRB_SIZE * SIIS_MAX_SLOTS) > > struct siis_dma_prd { > u_int64_t dba; > @@ -287,12 +281,12 @@ struct siis_dma_prd { > } __packed; > > struct siis_cmd_ata { > - struct siis_dma_prd prd[1 + SIIS_SG_ENTRIES]; > + struct siis_dma_prd prd[2]; > } __packed; > > struct siis_cmd_atapi { > u_int8_t ccb[16]; > - struct siis_dma_prd prd[SIIS_SG_ENTRIES]; > + struct siis_dma_prd prd[1]; > } __packed; > > struct siis_cmd { > @@ -349,6 +343,7 @@ struct siis_slot { > device_t dev; /* Device handle */ > u_int8_t slot; /* Number of this slot */ > enum siis_slot_states state; /* Slot state */ > + u_int prb_offset; /* PRB offset */ > union ccb *ccb; /* CCB occupying slot */ > struct ata_dmaslot dma; /* DMA data of this slot */ > struct callout timeout; /* Execution timeout */ > > Modified: head/sys/dev/sym/sym_conf.h > ============================================================================== > --- head/sys/dev/sym/sym_conf.h Sat Nov 28 10:38:00 2020 (r368123) > +++ head/sys/dev/sym/sym_conf.h Sat Nov 28 12:12:51 2020 (r368124) > @@ -95,9 +95,9 @@ > * Max number of scatter/gather entries for an I/O. > * Each entry costs 8 bytes in the internal CCB data structure. > * We use at most 33 segments but also no more than required for handling > - * MAXPHYS. > + * legacy MAXPHYS == 128 * 1024. > */ > -#define SYM_CONF_MAX_SG (MIN(33, (MAXPHYS / PAGE_SIZE) + 1)) > +#define SYM_CONF_MAX_SG (MIN(33, (128 * 1024 / PAGE_SIZE) + 1)) > > /* > * Max number of targets. > > *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56ede111-cf89-366e-fbda-aa26f4a78a23>