Date: Thu, 29 Jun 2017 23:52:48 +0000 (UTC) From: Rick Macklem <rmacklem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r320485 - in projects/pnfs-planb-server-stable11/sys: amd64/amd64 amd64/include arm/arm cam/scsi compat/freebsd32 compat/linux conf contrib/octeon-sdk dev/e1000 dev/hyperv/pcib dev/hype... Message-ID: <201706292352.v5TNqmZB076554@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rmacklem Date: Thu Jun 29 23:52:47 2017 New Revision: 320485 URL: https://svnweb.freebsd.org/changeset/base/320485 Log: Update the kernel to stable/11. Modified: projects/pnfs-planb-server-stable11/sys/amd64/amd64/pmap.c projects/pnfs-planb-server-stable11/sys/amd64/include/pmap.h projects/pnfs-planb-server-stable11/sys/arm/arm/gic.c projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_enc_ses.c projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_sa.c projects/pnfs-planb-server-stable11/sys/compat/freebsd32/capabilities.conf projects/pnfs-planb-server-stable11/sys/compat/freebsd32/freebsd32_sysent.c projects/pnfs-planb-server-stable11/sys/compat/linux/linux_file.c projects/pnfs-planb-server-stable11/sys/compat/linux/linux_misc.c projects/pnfs-planb-server-stable11/sys/conf/kern.post.mk projects/pnfs-planb-server-stable11/sys/conf/newvers.sh projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-app-init.h projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-helper-board.c projects/pnfs-planb-server-stable11/sys/dev/e1000/if_em.c projects/pnfs-planb-server-stable11/sys/dev/hyperv/pcib/vmbus_pcib.c projects/pnfs-planb-server-stable11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c projects/pnfs-planb-server-stable11/sys/dev/jedec_ts/jedec_ts.c projects/pnfs-planb-server-stable11/sys/dev/md/md.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/bcm_osal.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/common_hsi.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_chain.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_cxt.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_cxt.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dbg_fw_funcs.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dbg_fw_funcs.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dbg_values.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dcbx.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dcbx.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dev.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_dev_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_fcoe_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_gtt_reg_addr.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_debug_tools.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_eth.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_fcoe.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_iscsi.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_iwarp.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_rdma.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hsi_roce.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hw.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_hw.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_init_fw_funcs.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_init_fw_funcs.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_init_ops.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_init_ops.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_init_values.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_int.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_int.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_int_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_iov_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_iro.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_iro_values.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_iscsi.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_iscsi_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_l2.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_l2.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_l2_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_ll2.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_ll2_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_mcp.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_mcp.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_mcp_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_ooo.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_proto_if.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_roce.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_roce_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_rt_defs.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_sp_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_sp_commands.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_sp_commands.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_spq.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_sriov.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_vf.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_vf_api.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore_vfpf_if.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/eth_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/fcoe_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/iscsi_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/mcp_private.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/mcp_public.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/mfw_hsi.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/nvm_cfg.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/nvm_map.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/pcics_reg_driver.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/qlnx_def.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/qlnx_os.c projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/qlnx_ver.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/rdma_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/reg_addr.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/spad_layout.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/storage_common.h projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/tcp_common.h projects/pnfs-planb-server-stable11/sys/dev/qlxgbe/ql_hw.c projects/pnfs-planb-server-stable11/sys/dev/qlxgbe/ql_hw.h projects/pnfs-planb-server-stable11/sys/dev/vmware/vmxnet3/if_vmx.c projects/pnfs-planb-server-stable11/sys/dev/xen/netfront/netfront.c projects/pnfs-planb-server-stable11/sys/fs/cuse/cuse.c projects/pnfs-planb-server-stable11/sys/i386/i386/pmap.c projects/pnfs-planb-server-stable11/sys/i386/include/pmap.h projects/pnfs-planb-server-stable11/sys/i386/isa/npx.c projects/pnfs-planb-server-stable11/sys/kern/capabilities.conf projects/pnfs-planb-server-stable11/sys/kern/imgact_elf.c projects/pnfs-planb-server-stable11/sys/kern/init_sysent.c projects/pnfs-planb-server-stable11/sys/kern/kern_cpuset.c projects/pnfs-planb-server-stable11/sys/kern/kern_event.c projects/pnfs-planb-server-stable11/sys/kern/kern_mutex.c projects/pnfs-planb-server-stable11/sys/kern/kern_rwlock.c projects/pnfs-planb-server-stable11/sys/kern/kern_sendfile.c projects/pnfs-planb-server-stable11/sys/kern/kern_sx.c projects/pnfs-planb-server-stable11/sys/kern/subr_blist.c projects/pnfs-planb-server-stable11/sys/kern/subr_prf.c projects/pnfs-planb-server-stable11/sys/kern/vfs_aio.c projects/pnfs-planb-server-stable11/sys/net/route.c projects/pnfs-planb-server-stable11/sys/net/route.h projects/pnfs-planb-server-stable11/sys/netinet/sctp_auth.c projects/pnfs-planb-server-stable11/sys/netinet/sctp_constants.h projects/pnfs-planb-server-stable11/sys/netinet/sctp_input.c projects/pnfs-planb-server-stable11/sys/netinet/sctp_output.c projects/pnfs-planb-server-stable11/sys/netinet/sctp_pcb.c projects/pnfs-planb-server-stable11/sys/ofed/drivers/net/mlx4/en_netdev.c projects/pnfs-planb-server-stable11/sys/sys/blist.h projects/pnfs-planb-server-stable11/sys/ufs/ffs/ffs_softdep.c projects/pnfs-planb-server-stable11/sys/ufs/ffs/softdep.h projects/pnfs-planb-server-stable11/sys/vm/swap_pager.c projects/pnfs-planb-server-stable11/sys/vm/vm_map.c projects/pnfs-planb-server-stable11/sys/vm/vm_page.c projects/pnfs-planb-server-stable11/sys/vm/vnode_pager.c projects/pnfs-planb-server-stable11/sys/x86/acpica/acpi_wakeup.c projects/pnfs-planb-server-stable11/sys/x86/iommu/intel_ctx.c projects/pnfs-planb-server-stable11/sys/x86/iommu/intel_dmar.h projects/pnfs-planb-server-stable11/sys/x86/iommu/intel_qi.c projects/pnfs-planb-server-stable11/sys/x86/x86/intr_machdep.c Directory Properties: projects/pnfs-planb-server-stable11/sys/ (props changed) Modified: projects/pnfs-planb-server-stable11/sys/amd64/amd64/pmap.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/amd64/amd64/pmap.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/amd64/amd64/pmap.c Thu Jun 29 23:52:47 2017 (r320485) @@ -613,6 +613,8 @@ static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_page_t m, vm_prot_t prot, vm_page_t mpte, struct rwlock **lockp); static void pmap_fill_ptp(pt_entry_t *firstpte, pt_entry_t newpte); static int pmap_insert_pt_page(pmap_t pmap, vm_page_t mpte); +static void pmap_invalidate_pde_page(pmap_t pmap, vm_offset_t va, + pd_entry_t pde); static void pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mode); static void pmap_pde_attr(pd_entry_t *pde, int cache_bits, int mask); static void pmap_promote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va, @@ -1838,6 +1840,27 @@ pmap_update_pde(pmap_t pmap, vm_offset_t va, pd_entry_ } #endif /* !SMP */ +static void +pmap_invalidate_pde_page(pmap_t pmap, vm_offset_t va, pd_entry_t pde) +{ + + /* + * When the PDE has PG_PROMOTED set, the 2MB page mapping was created + * by a promotion that did not invalidate the 512 4KB page mappings + * that might exist in the TLB. Consequently, at this point, the TLB + * may hold both 4KB and 2MB page mappings for the address range [va, + * va + NBPDR). Therefore, the entire range must be invalidated here. + * In contrast, when PG_PROMOTED is clear, the TLB will not hold any + * 4KB page mappings for the address range [va, va + NBPDR), and so a + * single INVLPG suffices to invalidate the 2MB page mapping from the + * TLB. + */ + if ((pde & PG_PROMOTED) != 0) + pmap_invalidate_range(pmap, va, va + NBPDR - 1); + else + pmap_invalidate_page(pmap, va); +} + #define PMAP_CLFLUSH_THRESHOLD (2 * 1024 * 1024) void @@ -3472,7 +3495,8 @@ pmap_demote_pde_locked(pmap_t pmap, pd_entry_t *pde, v SLIST_INIT(&free); sva = trunc_2mpage(va); pmap_remove_pde(pmap, pde, sva, &free, lockp); - pmap_invalidate_range(pmap, sva, sva + NBPDR - 1); + if ((oldpde & PG_G) == 0) + pmap_invalidate_pde_page(pmap, sva, oldpde); pmap_free_zero_pages(&free); CTR2(KTR_PMAP, "pmap_demote_pde: failure for va %#lx" " in pmap %p", va, pmap); @@ -3612,25 +3636,8 @@ pmap_remove_pde(pmap_t pmap, pd_entry_t *pdq, vm_offse oldpde = pte_load_clear(pdq); if (oldpde & PG_W) pmap->pm_stats.wired_count -= NBPDR / PAGE_SIZE; - - /* - * When workaround_erratum383 is false, a promotion to a 2M - * page mapping does not invalidate the 512 4K page mappings - * from the TLB. Consequently, at this point, the TLB may - * hold both 4K and 2M page mappings. Therefore, the entire - * range of addresses must be invalidated here. In contrast, - * when workaround_erratum383 is true, a promotion does - * invalidate the 512 4K page mappings, and so a single INVLPG - * suffices to invalidate the 2M page mapping. - */ - if ((oldpde & PG_G) != 0) { - if (workaround_erratum383) - pmap_invalidate_page(kernel_pmap, sva); - else - pmap_invalidate_range(kernel_pmap, sva, - sva + NBPDR - 1); - } - + if ((oldpde & PG_G) != 0) + pmap_invalidate_pde_page(kernel_pmap, sva, oldpde); pmap_resident_count_dec(pmap, NBPDR / PAGE_SIZE); if (oldpde & PG_MANAGED) { CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, oldpde & PG_PS_FRAME); @@ -4010,16 +4017,16 @@ retry: if ((prot & VM_PROT_EXECUTE) == 0) newpde |= pg_nx; if (newpde != oldpde) { - if (!atomic_cmpset_long(pde, oldpde, newpde)) + /* + * As an optimization to future operations on this PDE, clear + * PG_PROMOTED. The impending invalidation will remove any + * lingering 4KB page mappings from the TLB. + */ + if (!atomic_cmpset_long(pde, oldpde, newpde & ~PG_PROMOTED)) goto retry; - if (oldpde & PG_G) { - /* See pmap_remove_pde() for explanation. */ - if (workaround_erratum383) - pmap_invalidate_page(kernel_pmap, sva); - else - pmap_invalidate_range(kernel_pmap, sva, - sva + NBPDR - 1); - } else + if ((oldpde & PG_G) != 0) + pmap_invalidate_pde_page(kernel_pmap, sva, oldpde); + else anychanged = TRUE; } return (anychanged); @@ -4272,7 +4279,7 @@ setpte: if (workaround_erratum383) pmap_update_pde(pmap, va, pde, PG_PS | newpde); else - pde_store(pde, PG_PS | newpde); + pde_store(pde, PG_PROMOTED | PG_PS | newpde); atomic_add_long(&pmap_pde_promotions, 1); CTR2(KTR_PMAP, "pmap_promote_pde: success for va %#lx" @@ -4585,7 +4592,8 @@ pmap_enter_pde(pmap_t pmap, vm_offset_t va, vm_page_t pmap_resident_count_inc(pmap, NBPDR / PAGE_SIZE); /* - * Map the superpage. + * Map the superpage. (This is not a promoted mapping; there will not + * be any lingering 4KB page mappings in the TLB.) */ pde_store(pde, newpde); Modified: projects/pnfs-planb-server-stable11/sys/amd64/include/pmap.h ============================================================================== --- projects/pnfs-planb-server-stable11/sys/amd64/include/pmap.h Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/amd64/include/pmap.h Thu Jun 29 23:52:47 2017 (r320485) @@ -109,6 +109,7 @@ #define PG_MANAGED X86_PG_AVAIL2 #define EPT_PG_EMUL_V X86_PG_AVAIL(52) #define EPT_PG_EMUL_RW X86_PG_AVAIL(53) +#define PG_PROMOTED X86_PG_AVAIL(54) /* PDE only */ #define PG_FRAME (0x000ffffffffff000ul) #define PG_PS_FRAME (0x000fffffffe00000ul) Modified: projects/pnfs-planb-server-stable11/sys/arm/arm/gic.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/arm/arm/gic.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/arm/arm/gic.c Thu Jun 29 23:52:47 2017 (r320485) @@ -1640,7 +1640,7 @@ arm_gicv2m_alloc_msi(device_t dev, device_t child, int mtx_lock(&sc->sc_mutex); found = false; - for (irq = sc->sc_spi_start; irq < sc->sc_spi_end && !found; irq++) { + for (irq = sc->sc_spi_start; irq < sc->sc_spi_end; irq++) { /* Start on an aligned interrupt */ if ((irq & (maxcount - 1)) != 0) continue; @@ -1649,7 +1649,7 @@ arm_gicv2m_alloc_msi(device_t dev, device_t child, int found = true; /* Check this range is valid */ - for (end_irq = irq; end_irq != irq + count - 1; end_irq++) { + for (end_irq = irq; end_irq != irq + count; end_irq++) { /* No free interrupts */ if (end_irq == sc->sc_spi_end) { found = false; @@ -1666,6 +1666,8 @@ arm_gicv2m_alloc_msi(device_t dev, device_t child, int break; } } + if (found) + break; } /* Not enough interrupts were found */ Modified: projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_enc_ses.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_enc_ses.c Thu Jun 29 23:52:47 2017 (r320485) @@ -2684,10 +2684,11 @@ ses_get_elm_devnames(enc_softc_t *enc, encioc_elm_devn cam_periph_unlock(enc->periph); sbuf_new(&sb, NULL, len, SBUF_FIXEDLEN); ses_paths_iter(enc, &enc->enc_cache.elm_map[elmdn->elm_idx], - ses_elmdevname_callback, &sb); + ses_elmdevname_callback, &sb); sbuf_finish(&sb); elmdn->elm_names_len = sbuf_len(&sb); copyout(sbuf_data(&sb), elmdn->elm_devnames, elmdn->elm_names_len + 1); + sbuf_delete(&sb); cam_periph_lock(enc->periph); return (elmdn->elm_names_len > 0 ? 0 : ENODEV); } Modified: projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_sa.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_sa.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/cam/scsi/scsi_sa.c Thu Jun 29 23:52:47 2017 (r320485) @@ -4465,7 +4465,18 @@ saextget(struct cdev *dev, struct cam_periph *periph, if (cgd.serial_num_len > sizeof(tmpstr)) { ts2_len = cgd.serial_num_len + 1; ts2_malloc = 1; - tmpstr2 = malloc(ts2_len, M_SCSISA, M_WAITOK | M_ZERO); + tmpstr2 = malloc(ts2_len, M_SCSISA, M_NOWAIT | M_ZERO); + /* + * The 80 characters allocated on the stack above + * will handle the vast majority of serial numbers. + * If we run into one that is larger than that, and + * we can't malloc the length without blocking, + * bail out with an out of memory error. + */ + if (tmpstr2 == NULL) { + error = ENOMEM; + goto extget_bailout; + } } else { ts2_len = sizeof(tmpstr); ts2_malloc = 0; Modified: projects/pnfs-planb-server-stable11/sys/compat/freebsd32/capabilities.conf ============================================================================== --- projects/pnfs-planb-server-stable11/sys/compat/freebsd32/capabilities.conf Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/compat/freebsd32/capabilities.conf Thu Jun 29 23:52:47 2017 (r320485) @@ -76,9 +76,9 @@ close closefrom connectat #cpuset -#freebsd32_cpuset_getaffinity +freebsd32_cpuset_getaffinity #freebsd32_cpuset_getid -#freebsd32_cpuset_setaffinity +freebsd32_cpuset_setaffinity #freebsd32_cpuset_setid dup dup2 Modified: projects/pnfs-planb-server-stable11/sys/compat/freebsd32/freebsd32_sysent.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/compat/freebsd32/freebsd32_sysent.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/compat/freebsd32/freebsd32_sysent.c Thu Jun 29 23:52:47 2017 (r320485) @@ -552,8 +552,8 @@ struct sysent freebsd32_sysent[] = { { AS(freebsd32_cpuset_setid_args), (sy_call_t *)freebsd32_cpuset_setid, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 485 = freebsd32_cpuset_setid */ #endif { AS(freebsd32_cpuset_getid_args), (sy_call_t *)freebsd32_cpuset_getid, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 486 = freebsd32_cpuset_getid */ - { AS(freebsd32_cpuset_getaffinity_args), (sy_call_t *)freebsd32_cpuset_getaffinity, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 487 = freebsd32_cpuset_getaffinity */ - { AS(freebsd32_cpuset_setaffinity_args), (sy_call_t *)freebsd32_cpuset_setaffinity, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 488 = freebsd32_cpuset_setaffinity */ + { AS(freebsd32_cpuset_getaffinity_args), (sy_call_t *)freebsd32_cpuset_getaffinity, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 487 = freebsd32_cpuset_getaffinity */ + { AS(freebsd32_cpuset_setaffinity_args), (sy_call_t *)freebsd32_cpuset_setaffinity, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 488 = freebsd32_cpuset_setaffinity */ { AS(faccessat_args), (sy_call_t *)sys_faccessat, AUE_FACCESSAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 489 = faccessat */ { AS(fchmodat_args), (sy_call_t *)sys_fchmodat, AUE_FCHMODAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 490 = fchmodat */ { AS(fchownat_args), (sy_call_t *)sys_fchownat, AUE_FCHOWNAT, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 491 = fchownat */ Modified: projects/pnfs-planb-server-stable11/sys/compat/linux/linux_file.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/compat/linux/linux_file.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/compat/linux/linux_file.c Thu Jun 29 23:52:47 2017 (r320485) @@ -394,9 +394,9 @@ linux_getdents(struct thread *td, struct linux_getdent td->td_retval[0] = retval; out: - free(lbuf, M_LINUX); + free(lbuf, M_TEMP); out1: - free(buf, M_LINUX); + free(buf, M_TEMP); return (error); } @@ -522,9 +522,9 @@ linux_readdir(struct thread *td, struct linux_readdir_ if (error == 0) td->td_retval[0] = linuxreclen; - free(lbuf, M_LINUX); + free(lbuf, M_TEMP); out: - free(buf, M_LINUX); + free(buf, M_TEMP); return (error); } #endif /* __i386__ || (__amd64__ && COMPAT_LINUX32) */ Modified: projects/pnfs-planb-server-stable11/sys/compat/linux/linux_misc.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/compat/linux/linux_misc.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/compat/linux/linux_misc.c Thu Jun 29 23:52:47 2017 (r320485) @@ -2516,6 +2516,7 @@ linux_getrandom(struct thread *td, struct linux_getran { struct uio uio; struct iovec iov; + int error; if (args->flags & ~(LINUX_GRND_NONBLOCK|LINUX_GRND_RANDOM)) return (EINVAL); @@ -2532,7 +2533,10 @@ linux_getrandom(struct thread *td, struct linux_getran uio.uio_rw = UIO_READ; uio.uio_td = td; - return (read_random_uio(&uio, args->flags & LINUX_GRND_NONBLOCK)); + error = read_random_uio(&uio, args->flags & LINUX_GRND_NONBLOCK); + if (error == 0) + td->td_retval[0] = args->count - uio.uio_resid; + return (error); } int Modified: projects/pnfs-planb-server-stable11/sys/conf/kern.post.mk ============================================================================== --- projects/pnfs-planb-server-stable11/sys/conf/kern.post.mk Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/conf/kern.post.mk Thu Jun 29 23:52:47 2017 (r320485) @@ -200,10 +200,10 @@ _meta_filemon= 1 # lookups. For install, only do this if no other targets are specified. # Also skip generating or including .depend.* files if in meta+filemon mode # since it will track dependencies itself. OBJS_DEPEND_GUESS is still used. -.if !empty(.MAKEFLAGS:M-V${_V_READ_DEPEND}) || make(obj) || make(clean*) || \ +.if !empty(.MAKEFLAGS:M-V${_V_READ_DEPEND}) || make(*obj) || \ + ${.TARGETS:M*clean*} == ${.TARGETS} || \ ${.TARGETS:M*install*} == ${.TARGETS} || \ - make(kernel-obj) || make(kernel-clean*) || \ - make(kernel-install*) || defined(_meta_filemon) + defined(_meta_filemon) _SKIP_READ_DEPEND= 1 .MAKE.DEPENDFILE= /dev/null .endif Modified: projects/pnfs-planb-server-stable11/sys/conf/newvers.sh ============================================================================== --- projects/pnfs-planb-server-stable11/sys/conf/newvers.sh Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/conf/newvers.sh Thu Jun 29 23:52:47 2017 (r320485) @@ -44,7 +44,7 @@ TYPE="FreeBSD" REVISION="11.1" -BRANCH="BETA1" +BRANCH="BETA3" if [ -n "${BRANCH_OVERRIDE}" ]; then BRANCH=${BRANCH_OVERRIDE} fi Modified: projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-app-init.h ============================================================================== --- projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-app-init.h Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-app-init.h Thu Jun 29 23:52:47 2017 (r320485) @@ -311,6 +311,7 @@ enum cvmx_board_types_enum { #endif #if defined(OCTEON_VENDOR_UBIQUITI) CVMX_BOARD_TYPE_CUST_UBIQUITI_E100=20002, + CVMX_BOARD_TYPE_CUST_UBIQUITI_USG= 20004, #endif #if defined(OCTEON_VENDOR_RADISYS) CVMX_BOARD_TYPE_CUST_RADISYS_RSYS4GBE=20002, @@ -457,6 +458,7 @@ static inline const char *cvmx_board_type_to_string(en #endif #if defined(OCTEON_VENDOR_UBIQUITI) ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_UBIQUITI_E100) + ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_UBIQUITI_USG) #endif #if defined(OCTEON_VENDOR_RADISYS) ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_RADISYS_RSYS4GBE) Modified: projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-helper-board.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-helper-board.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/contrib/octeon-sdk/cvmx-helper-board.c Thu Jun 29 23:52:47 2017 (r320485) @@ -598,6 +598,7 @@ int cvmx_helper_board_get_mii_address(int ipd_port) #endif #if defined(OCTEON_VENDOR_UBIQUITI) case CVMX_BOARD_TYPE_CUST_UBIQUITI_E100: + case CVMX_BOARD_TYPE_CUST_UBIQUITI_USG: if (ipd_port > 2) return -1; return (7 - ipd_port); @@ -1499,7 +1500,8 @@ int __cvmx_helper_board_hardware_enable(int interface) } } #if defined(OCTEON_VENDOR_UBIQUITI) - else if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CUST_UBIQUITI_E100) + else if (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CUST_UBIQUITI_E100 || + cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CUST_UBIQUITI_USG) { /* Configure ASX cloks for all ports on interface 0. */ if (interface == 0) @@ -1590,6 +1592,7 @@ cvmx_helper_board_usb_clock_types_t __cvmx_helper_boar #endif #if defined(OCTEON_VENDOR_UBIQUITI) case CVMX_BOARD_TYPE_CUST_UBIQUITI_E100: + case CVMX_BOARD_TYPE_CUST_UBIQUITI_USG: #endif #if defined(OCTEON_BOARD_CAPK_0100ND) case CVMX_BOARD_TYPE_CN3010_EVB_HS5: Modified: projects/pnfs-planb-server-stable11/sys/dev/e1000/if_em.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/e1000/if_em.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/e1000/if_em.c Thu Jun 29 23:52:47 2017 (r320485) @@ -5115,7 +5115,7 @@ em_enable_intr(struct adapter *adapter) if (hw->mac.type == e1000_82574) { E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK); - ims_mask |= adapter->ims; + ims_mask |= EM_MSIX_MASK; } E1000_WRITE_REG(hw, E1000_IMS, ims_mask); } Modified: projects/pnfs-planb-server-stable11/sys/dev/hyperv/pcib/vmbus_pcib.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/hyperv/pcib/vmbus_pcib.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/hyperv/pcib/vmbus_pcib.c Thu Jun 29 23:52:47 2017 (r320485) @@ -574,6 +574,8 @@ new_pcichild_device(struct hv_pcibus *hbus, struct pci hpdev->desc = *desc; mtx_lock(&hbus->device_list_lock); + if (TAILQ_EMPTY(&hbus->children)) + hbus->pci_domain = desc->ser & 0xFFFF; TAILQ_INSERT_TAIL(&hbus->children, hpdev, link); mtx_unlock(&hbus->device_list_lock); return (hpdev); Modified: projects/pnfs-planb-server-stable11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c Thu Jun 29 23:52:47 2017 (r320485) @@ -2095,6 +2095,7 @@ storvsc_io_done(struct hv_storvsc_request *reqp) struct vmscsi_req *vm_srb = &reqp->vstor_packet.u.vm_srb; bus_dma_segment_t *ori_sglist = NULL; int ori_sg_count = 0; + const struct scsi_generic *cmd; /* destroy bounce buffer if it is used */ if (reqp->bounce_sgl_count) { @@ -2145,16 +2146,14 @@ storvsc_io_done(struct hv_storvsc_request *reqp) callout_drain(&reqp->callout); } #endif + cmd = (const struct scsi_generic *) + ((ccb->ccb_h.flags & CAM_CDB_POINTER) ? + csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes); ccb->ccb_h.status &= ~CAM_SIM_QUEUED; ccb->ccb_h.status &= ~CAM_STATUS_MASK; int srb_status = SRB_STATUS(vm_srb->srb_status); if (vm_srb->scsi_status == SCSI_STATUS_OK) { - const struct scsi_generic *cmd; - - cmd = (const struct scsi_generic *) - ((ccb->ccb_h.flags & CAM_CDB_POINTER) ? - csio->cdb_io.cdb_ptr : csio->cdb_io.cdb_bytes); if (srb_status != SRB_STATUS_SUCCESS) { /* * If there are errors, for example, invalid LUN, @@ -2252,11 +2251,23 @@ storvsc_io_done(struct hv_storvsc_request *reqp) } } } else { - mtx_lock(&sc->hs_lock); - xpt_print(ccb->ccb_h.path, - "storvsc scsi_status = %d\n", - vm_srb->scsi_status); - mtx_unlock(&sc->hs_lock); + /** + * On Some Windows hosts TEST_UNIT_READY command can return + * SRB_STATUS_ERROR and sense data, for example, asc=0x3a,1 + * "(Medium not present - tray closed)". This error can be + * ignored since it will be sent to host periodically. + */ + boolean_t unit_not_ready = \ + vm_srb->scsi_status == SCSI_STATUS_CHECK_COND && + cmd->opcode == TEST_UNIT_READY && + srb_status == SRB_STATUS_ERROR; + if (!unit_not_ready && bootverbose) { + mtx_lock(&sc->hs_lock); + xpt_print(ccb->ccb_h.path, + "storvsc scsi_status = %d, srb_status = %d\n", + vm_srb->scsi_status, srb_status); + mtx_unlock(&sc->hs_lock); + } ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR; } Modified: projects/pnfs-planb-server-stable11/sys/dev/jedec_ts/jedec_ts.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/jedec_ts/jedec_ts.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/jedec_ts/jedec_ts.c Thu Jun 29 23:52:47 2017 (r320485) @@ -114,7 +114,7 @@ ts_attach(device_t dev) device_printf(dev, "failed to read Manufacturer ID\n"); return (ENXIO); } - err = ts_readw_be(dev, 6, &devid); + err = ts_readw_be(dev, 7, &devid); if (err != 0) { device_printf(dev, "failed to read Device ID\n"); return (ENXIO); Modified: projects/pnfs-planb-server-stable11/sys/dev/md/md.c ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/md/md.c Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/md/md.c Thu Jun 29 23:52:47 2017 (r320485) @@ -969,6 +969,16 @@ unmapped_step: return (error); } +static void +md_swap_page_free(vm_page_t m) +{ + + vm_page_xunbusy(m); + vm_page_lock(m); + vm_page_free(m); + vm_page_unlock(m); +} + static int mdstart_swap(struct md_s *sc, struct bio *bp) { @@ -1041,15 +1051,17 @@ mdstart_swap(struct md_s *sc, struct bio *bp) cpu_flush_dcache(p, len); } } else if (bp->bio_cmd == BIO_WRITE) { - if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL) + if (len == PAGE_SIZE || m->valid == VM_PAGE_BITS_ALL) + rv = VM_PAGER_OK; + else rv = vm_pager_get_pages(sc->object, &m, 1, NULL, NULL); - else - rv = VM_PAGER_OK; if (rv == VM_PAGER_ERROR) { vm_page_xunbusy(m); break; - } + } else if (rv == VM_PAGER_FAIL) + pmap_zero_page(m); + if ((bp->bio_flags & BIO_UNMAPPED) != 0) { pmap_copy_pages(bp->bio_ma, ma_offs, &m, offs, len); @@ -1059,34 +1071,40 @@ mdstart_swap(struct md_s *sc, struct bio *bp) } else { physcopyin(p, VM_PAGE_TO_PHYS(m) + offs, len); } + m->valid = VM_PAGE_BITS_ALL; + vm_page_dirty(m); + vm_pager_page_unswapped(m); } else if (bp->bio_cmd == BIO_DELETE) { - if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL) + if (len == PAGE_SIZE || m->valid == VM_PAGE_BITS_ALL) + rv = VM_PAGER_OK; + else rv = vm_pager_get_pages(sc->object, &m, 1, NULL, NULL); - else - rv = VM_PAGER_OK; if (rv == VM_PAGER_ERROR) { vm_page_xunbusy(m); break; - } - if (len != PAGE_SIZE) { - pmap_zero_page_area(m, offs, len); - vm_page_clear_dirty(m, offs, len); - m->valid = VM_PAGE_BITS_ALL; - } else + } else if (rv == VM_PAGER_FAIL) { + md_swap_page_free(m); + m = NULL; + } else { + /* Page is valid. */ + if (len != PAGE_SIZE) { + pmap_zero_page_area(m, offs, len); + vm_page_dirty(m); + } vm_pager_page_unswapped(m); + if (len == PAGE_SIZE) { + md_swap_page_free(m); + m = NULL; + } + } } - vm_page_xunbusy(m); - vm_page_lock(m); - if (bp->bio_cmd == BIO_DELETE && len == PAGE_SIZE) - vm_page_free(m); - else + if (m != NULL) { + vm_page_xunbusy(m); + vm_page_lock(m); vm_page_activate(m); - vm_page_unlock(m); - if (bp->bio_cmd == BIO_WRITE) { - vm_page_dirty(m); - vm_pager_page_unswapped(m); + vm_page_unlock(m); } /* Actions on further pages start at offset 0 */ Modified: projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/bcm_osal.h ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/bcm_osal.h Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/bcm_osal.h Thu Jun 29 23:52:47 2017 (r320485) @@ -34,12 +34,17 @@ #include "ecore_status.h" #include <sys/bitstring.h> +#if __FreeBSD_version >= 1200000 +#include <compat/linuxkpi/common/include/linux/bitops.h> +#else #if __FreeBSD_version >= 1100090 #include <compat/linuxkpi/common/include/linux/bitops.h> #else #include <ofed/include/linux/bitops.h> #endif +#endif +#define OSAL_NUM_CPUS() mp_ncpus /* * prototypes of freebsd specific functions required by ecore */ @@ -60,6 +65,7 @@ extern int qlnx_pci_find_capability(void *ecore_dev, i extern uint32_t qlnx_direct_reg_rd32(void *p_hwfn, uint32_t *reg_addr); extern void qlnx_direct_reg_wr32(void *p_hwfn, void *reg_addr, uint32_t value); +extern void qlnx_direct_reg_wr64(void *p_hwfn, void *reg_addr, uint64_t value); extern uint32_t qlnx_reg_rd32(void *p_hwfn, uint32_t reg_addr); extern void qlnx_reg_wr32(void *p_hwfn, uint32_t reg_addr, uint32_t value); @@ -129,6 +135,8 @@ rounddown_pow_of_two(unsigned long x) #endif /* #ifndef QLNX_RDMA */ +#define OSAL_UNUSED + #define OSAL_CPU_TO_BE64(val) htobe64(val) #define OSAL_BE64_TO_CPU(val) be64toh(val) @@ -199,6 +207,8 @@ typedef struct osal_list_t #define REG_WR(hwfn, addr, val) qlnx_reg_wr32(hwfn, addr, val) #define REG_WR16(hwfn, addr, val) qlnx_reg_wr16(hwfn, addr, val) #define DIRECT_REG_WR(p_hwfn, addr, value) qlnx_direct_reg_wr32(p_hwfn, addr, value) +#define DIRECT_REG_WR64(p_hwfn, addr, value) \ + qlnx_direct_reg_wr64(p_hwfn, addr, value) #define DIRECT_REG_RD(p_hwfn, addr) qlnx_direct_reg_rd32(p_hwfn, addr) #define REG_RD(hwfn, addr) qlnx_reg_rd32(hwfn, addr) #define DOORBELL(hwfn, addr, value) \ Modified: projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/common_hsi.h ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/common_hsi.h Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/common_hsi.h Thu Jun 29 23:52:47 2017 (r320485) @@ -88,7 +88,7 @@ #define CORE_SPQE_PAGE_SIZE_BYTES 4096 /* - * Usually LL2 queues are opened in pairs TX-RX. + * Usually LL2 queues are opened in pairs – TX-RX. * There is a hard restriction on number of RX queues (limited by Tstorm RAM) and TX counters (Pstorm RAM). * Number of TX queues is almost unlimited. * The constants are different so as to allow asymmetric LL2 connections @@ -99,13 +99,13 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// -// Include firmware version number only- do not add constants here to avoid redundunt compilations +// Include firmware verison number only- do not add constants here to avoid redundunt compilations /////////////////////////////////////////////////////////////////////////////////////////////////// #define FW_MAJOR_VERSION 8 -#define FW_MINOR_VERSION 18 -#define FW_REVISION_VERSION 14 +#define FW_MINOR_VERSION 30 +#define FW_REVISION_VERSION 0 #define FW_ENGINEERING_VERSION 0 /***********************/ @@ -113,60 +113,60 @@ /***********************/ /* PCI functions */ -#define MAX_NUM_PORTS_K2 (4) #define MAX_NUM_PORTS_BB (2) -#define MAX_NUM_PORTS (MAX_NUM_PORTS_K2) +#define MAX_NUM_PORTS_K2 (4) +#define MAX_NUM_PORTS_E5 (MAX_NUM_PORTS_K2) +#define MAX_NUM_PORTS (MAX_NUM_PORTS_E5) -#define MAX_NUM_PFS_K2 (16) #define MAX_NUM_PFS_BB (8) -#define MAX_NUM_PFS (MAX_NUM_PFS_K2) +#define MAX_NUM_PFS_K2 (16) +#define MAX_NUM_PFS_E5 (MAX_NUM_PFS_K2) +#define MAX_NUM_PFS (MAX_NUM_PFS_E5) #define MAX_NUM_OF_PFS_IN_CHIP (16) /* On both engines */ #define MAX_NUM_VFS_BB (120) #define MAX_NUM_VFS_K2 (192) -#define E4_MAX_NUM_VFS (MAX_NUM_VFS_K2) -#define E5_MAX_NUM_VFS (240) -#define COMMON_MAX_NUM_VFS (E5_MAX_NUM_VFS) +#define MAX_NUM_VFS_E4 (MAX_NUM_VFS_K2) +#define MAX_NUM_VFS_E5 (240) +#define COMMON_MAX_NUM_VFS (MAX_NUM_VFS_E5) #define MAX_NUM_FUNCTIONS_BB (MAX_NUM_PFS_BB + MAX_NUM_VFS_BB) #define MAX_NUM_FUNCTIONS_K2 (MAX_NUM_PFS_K2 + MAX_NUM_VFS_K2) -#define MAX_NUM_FUNCTIONS (MAX_NUM_PFS + E4_MAX_NUM_VFS) +#define MAX_NUM_FUNCTIONS (MAX_NUM_PFS + MAX_NUM_VFS_E4) /* in both BB and K2, the VF number starts from 16. so for arrays containing all */ /* possible PFs and VFs - we need a constant for this size */ #define MAX_FUNCTION_NUMBER_BB (MAX_NUM_PFS + MAX_NUM_VFS_BB) #define MAX_FUNCTION_NUMBER_K2 (MAX_NUM_PFS + MAX_NUM_VFS_K2) -#define MAX_FUNCTION_NUMBER (MAX_NUM_PFS + E4_MAX_NUM_VFS) +#define MAX_FUNCTION_NUMBER_E4 (MAX_NUM_PFS + MAX_NUM_VFS_E4) +#define MAX_FUNCTION_NUMBER_E5 (MAX_NUM_PFS + MAX_NUM_VFS_E5) +#define COMMON_MAX_FUNCTION_NUMBER (MAX_NUM_PFS + MAX_NUM_VFS_E5) #define MAX_NUM_VPORTS_K2 (208) #define MAX_NUM_VPORTS_BB (160) -#define MAX_NUM_VPORTS (MAX_NUM_VPORTS_K2) +#define MAX_NUM_VPORTS_E4 (MAX_NUM_VPORTS_K2) +#define MAX_NUM_VPORTS_E5 (256) +#define COMMON_MAX_NUM_VPORTS (MAX_NUM_VPORTS_E5) #define MAX_NUM_L2_QUEUES_K2 (320) #define MAX_NUM_L2_QUEUES_BB (256) #define MAX_NUM_L2_QUEUES (MAX_NUM_L2_QUEUES_K2) /* Traffic classes in network-facing blocks (PBF, BTB, NIG, BRB, PRS and QM) */ -// 4-Port K2. #define NUM_PHYS_TCS_4PORT_K2 (4) +#define NUM_PHYS_TCS_4PORT_E5 (6) #define NUM_OF_PHYS_TCS (8) - +#define PURE_LB_TC NUM_OF_PHYS_TCS #define NUM_TCS_4PORT_K2 (NUM_PHYS_TCS_4PORT_K2 + 1) +#define NUM_TCS_4PORT_E5 (NUM_PHYS_TCS_4PORT_E5 + 1) #define NUM_OF_TCS (NUM_OF_PHYS_TCS + 1) -#define LB_TC (NUM_OF_PHYS_TCS) - /* Num of possible traffic priority values */ #define NUM_OF_PRIO (8) -#define MAX_NUM_VOQS_K2 (NUM_TCS_4PORT_K2 * MAX_NUM_PORTS_K2) -#define MAX_NUM_VOQS_BB (NUM_OF_TCS * MAX_NUM_PORTS_BB) -#define MAX_NUM_VOQS (MAX_NUM_VOQS_K2) -#define MAX_PHYS_VOQS (NUM_OF_PHYS_TCS * MAX_NUM_PORTS_BB) - /* CIDs */ -#define E4_NUM_OF_CONNECTION_TYPES (8) -#define E5_NUM_OF_CONNECTION_TYPES (16) +#define NUM_OF_CONNECTION_TYPES_E4 (8) +#define NUM_OF_CONNECTION_TYPES_E5 (16) #define NUM_OF_TASK_TYPES (8) #define NUM_OF_LCIDS (320) #define NUM_OF_LTIDS (320) @@ -375,11 +375,13 @@ /* number of TX queues in the QM */ #define MAX_QM_TX_QUEUES_K2 512 #define MAX_QM_TX_QUEUES_BB 448 +#define MAX_QM_TX_QUEUES_E5 MAX_QM_TX_QUEUES_K2 #define MAX_QM_TX_QUEUES MAX_QM_TX_QUEUES_K2 /* number of Other queues in the QM */ #define MAX_QM_OTHER_QUEUES_BB 64 #define MAX_QM_OTHER_QUEUES_K2 128 +#define MAX_QM_OTHER_QUEUES_E5 MAX_QM_OTHER_QUEUES_K2 #define MAX_QM_OTHER_QUEUES MAX_QM_OTHER_QUEUES_K2 /* number of queues in a PF queue group */ @@ -413,7 +415,9 @@ #define CAU_FSM_ETH_TX 1 /* Number of Protocol Indices per Status Block */ -#define PIS_PER_SB 12 +#define PIS_PER_SB_E4 12 +#define PIS_PER_SB_E5 8 +#define MAX_PIS_PER_SB OSAL_MAX_T(u8, PIS_PER_SB_E4, PIS_PER_SB_E5) #define CAU_HC_STOPPED_STATE 3 /* fsm is stopped or not valid for this sb */ @@ -427,7 +431,8 @@ #define MAX_SB_PER_PATH_K2 (368) #define MAX_SB_PER_PATH_BB (288) -#define MAX_TOT_SB_PER_PATH MAX_SB_PER_PATH_K2 +#define MAX_SB_PER_PATH_E5 (512) +#define MAX_TOT_SB_PER_PATH MAX_SB_PER_PATH_E5 #define MAX_SB_PER_PF_MIMD 129 #define MAX_SB_PER_PF_SIMD 64 @@ -588,7 +593,7 @@ // ILT Records #define PXP_NUM_ILT_RECORDS_BB 7600 #define PXP_NUM_ILT_RECORDS_K2 11000 -#define MAX_NUM_ILT_RECORDS MAX(PXP_NUM_ILT_RECORDS_BB,PXP_NUM_ILT_RECORDS_K2) +#define MAX_NUM_ILT_RECORDS OSAL_MAX_T(u16, PXP_NUM_ILT_RECORDS_BB,PXP_NUM_ILT_RECORDS_K2) // Host Interface @@ -633,7 +638,8 @@ /******************/ /* Number of PBF command queue lines. Each line is 32B. */ -#define PBF_MAX_CMD_LINES 3328 +#define PBF_MAX_CMD_LINES_E4 3328 +#define PBF_MAX_CMD_LINES_E5 5280 /* Number of BTB blocks. Each block is 256B. */ #define BTB_MAX_BLOCKS 1440 @@ -737,8 +743,8 @@ union rdma_eqe_data */ struct malicious_vf_eqe_data { - u8 vfId /* Malicious VF ID */; - u8 errId /* Malicious VF error */; + u8 vf_id /* Malicious VF ID */; + u8 err_id /* Malicious VF error */; __le16 reserved[3]; }; @@ -747,7 +753,7 @@ struct malicious_vf_eqe_data */ struct initial_cleanup_eqe_data { - u8 vfId /* VF ID */; + u8 vf_id /* VF ID */; u8 reserved[7]; }; @@ -1059,7 +1065,7 @@ struct db_rdma_dpm_data { __le16 icid /* internal CID */; __le16 prod_val /* aggregated value to update */; - struct db_rdma_dpm_params params /* parameters passed to RDMA firmware */; + struct db_rdma_dpm_params params /* parametes passed to RDMA firmware */; }; @@ -1113,25 +1119,25 @@ enum igu_seg_access /* - * Enumeration for L3 type field of parsing_and_err_flags_union. L3Type: 0 - unknown (not ip) ,1 - Ipv4, 2 - Ipv6 (this field can be filled according to the last-ethertype) + * Enumeration for L3 type field of parsing_and_err_flags. L3Type: 0 - unknown (not ip) ,1 - Ipv4, 2 - Ipv6 (this field can be filled according to the last-ethertype) */ enum l3_type { - e_l3Type_unknown, - e_l3Type_ipv4, - e_l3Type_ipv6, + e_l3_type_unknown, + e_l3_type_ipv4, + e_l3_type_ipv6, MAX_L3_TYPE }; /* - * Enumeration for l4Protocol field of parsing_and_err_flags_union. L4-protocol 0 - none, 1 - TCP, 2- UDP. if the packet is IPv4 fragment, and its not the first fragment, the protocol-type should be set to none. + * Enumeration for l4Protocol field of parsing_and_err_flags. L4-protocol 0 - none, 1 - TCP, 2- UDP. if the packet is IPv4 fragment, and its not the first fragment, the protocol-type should be set to none. */ enum l4_protocol { - e_l4Protocol_none, - e_l4Protocol_tcp, - e_l4Protocol_udp, + e_l4_protocol_none, + e_l4_protocol_tcp, + e_l4_protocol_udp, MAX_L4_PROTOCOL }; @@ -1146,11 +1152,11 @@ struct parsing_and_err_flags #define PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT 0 #define PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK 0x3 /* L4-protocol 0 - none, 1 - TCP, 2- UDP. if the packet is IPv4 fragment, and its not the first fragment, the protocol-type should be set to none. (use enum l4_protocol) */ #define PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT 2 -#define PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK 0x1 /* Set if the packet is IPv4 fragment. */ +#define PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK 0x1 /* Set if the packet is IPv4/IPv6 fragment. */ #define PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT 4 -#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK 0x1 /* Set if VLAN tag exists. Invalid if tunnel type are IP GRE or IP GENEVE. */ +#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK 0x1 /* corresponds to the same 8021q tag that is selected for 8021q-tag fiel. This flag should be set if the tag appears in the packet, regardless of its value. */ #define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT 5 -#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK 0x1 /* Set if L4 checksum was calculated. */ +#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK 0x1 /* Set if L4 checksum was calculated. taken from the EOP descriptor. */ #define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT 6 #define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_MASK 0x1 /* Set for PTP packet. */ #define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_SHIFT 7 @@ -1162,11 +1168,11 @@ struct parsing_and_err_flags #define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT 10 #define PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK 0x1 /* Set if GRE/VXLAN/GENEVE tunnel detected. */ #define PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT 11 -#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_MASK 0x1 /* Set if VLAN tag exists in tunnel header. */ +#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_MASK 0x1 /* This flag should be set if the tag appears in the packet tunnel header, regardless of its value.. */ #define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_SHIFT 12 #define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK 0x1 /* Set if either tunnel-ipv4-version-mismatch or tunnel-ipv4-hdr-len-error or tunnel-ipv4-cksm is set or tunneling ipv6 ver mismatch */ #define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT 13 -#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK 0x1 /* Set if GRE or VXLAN/GENEVE UDP checksum was calculated. */ +#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK 0x1 /* taken from the EOP descriptor. */ #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_SHIFT 14 #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_MASK 0x1 /* Set if tunnel L4 checksum validation failed. Valid only if tunnel L4 checksum was calculated. */ #define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_SHIFT 15 @@ -1419,21 +1425,42 @@ enum rss_hash_type /* * status block structure */ -struct status_block +struct status_block_e4 { - __le16 pi_array[PIS_PER_SB]; + __le16 pi_array[PIS_PER_SB_E4]; __le32 sb_num; -#define STATUS_BLOCK_SB_NUM_MASK 0x1FF -#define STATUS_BLOCK_SB_NUM_SHIFT 0 -#define STATUS_BLOCK_ZERO_PAD_MASK 0x7F -#define STATUS_BLOCK_ZERO_PAD_SHIFT 9 -#define STATUS_BLOCK_ZERO_PAD2_MASK 0xFFFF -#define STATUS_BLOCK_ZERO_PAD2_SHIFT 16 +#define STATUS_BLOCK_E4_SB_NUM_MASK 0x1FF +#define STATUS_BLOCK_E4_SB_NUM_SHIFT 0 +#define STATUS_BLOCK_E4_ZERO_PAD_MASK 0x7F +#define STATUS_BLOCK_E4_ZERO_PAD_SHIFT 9 +#define STATUS_BLOCK_E4_ZERO_PAD2_MASK 0xFFFF +#define STATUS_BLOCK_E4_ZERO_PAD2_SHIFT 16 __le32 prod_index; -#define STATUS_BLOCK_PROD_INDEX_MASK 0xFFFFFF -#define STATUS_BLOCK_PROD_INDEX_SHIFT 0 -#define STATUS_BLOCK_ZERO_PAD3_MASK 0xFF -#define STATUS_BLOCK_ZERO_PAD3_SHIFT 24 +#define STATUS_BLOCK_E4_PROD_INDEX_MASK 0xFFFFFF +#define STATUS_BLOCK_E4_PROD_INDEX_SHIFT 0 +#define STATUS_BLOCK_E4_ZERO_PAD3_MASK 0xFF +#define STATUS_BLOCK_E4_ZERO_PAD3_SHIFT 24 +}; + + +/* + * status block structure + */ +struct status_block_e5 +{ + __le16 pi_array[PIS_PER_SB_E5]; + __le32 sb_num; +#define STATUS_BLOCK_E5_SB_NUM_MASK 0x1FF +#define STATUS_BLOCK_E5_SB_NUM_SHIFT 0 +#define STATUS_BLOCK_E5_ZERO_PAD_MASK 0x7F +#define STATUS_BLOCK_E5_ZERO_PAD_SHIFT 9 +#define STATUS_BLOCK_E5_ZERO_PAD2_MASK 0xFFFF +#define STATUS_BLOCK_E5_ZERO_PAD2_SHIFT 16 + __le32 prod_index; +#define STATUS_BLOCK_E5_PROD_INDEX_MASK 0xFFFFFF +#define STATUS_BLOCK_E5_PROD_INDEX_SHIFT 0 +#define STATUS_BLOCK_E5_ZERO_PAD3_MASK 0xFF +#define STATUS_BLOCK_E5_ZERO_PAD3_SHIFT 24 }; Modified: projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore.h ============================================================================== --- projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore.h Thu Jun 29 23:35:55 2017 (r320484) +++ projects/pnfs-planb-server-stable11/sys/dev/qlnx/qlnxe/ecore.h Thu Jun 29 23:52:47 2017 (r320485) @@ -39,8 +39,8 @@ #include "mcp_public.h" #define ECORE_MAJOR_VERSION 8 -#define ECORE_MINOR_VERSION 18 -#define ECORE_REVISION_VERSION 13 +#define ECORE_MINOR_VERSION 30 +#define ECORE_REVISION_VERSION 0 #define ECORE_ENGINEERING_VERSION 0 #define ECORE_VERSION \ @@ -110,13 +110,13 @@ do { \ #define GET_FIELD(value, name) \ (((value) >> (name##_SHIFT)) & name##_MASK) -#define ECORE_MFW_GET_FIELD(name, field) \ - (((name) & (field ## _MASK)) >> (field ## _SHIFT)) +#define GET_MFW_FIELD(name, field) \ + (((name) & (field ## _MASK)) >> (field ## _OFFSET)) -#define ECORE_MFW_SET_FIELD(name, field, value) \ +#define SET_MFW_FIELD(name, field, value) \ do { \ - (name) &= ~((field ## _MASK) << (field ## _SHIFT)); \ - (name) |= (((value) << (field ## _SHIFT)) & (field ## _MASK)); \ + (name) &= ~((field ## _MASK) << (field ## _OFFSET)); \ + (name) |= (((value) << (field ## _OFFSET)) & (field ## _MASK)); \ } while (0) static OSAL_INLINE u32 DB_ADDR(u32 cid, u32 DEMS) @@ -401,6 +401,11 @@ enum ecore_wol_support { ECORE_WOL_SUPPORT_PME, }; +enum ecore_db_rec_exec { + DB_REC_DRY_RUN, + DB_REC_REAL_DEAL, +}; + struct ecore_hw_info { /* PCI personality */ enum ecore_pci_personality personality; @@ -450,10 +455,7 @@ struct ecore_hw_info { #ifndef ETH_ALEN #define ETH_ALEN 6 /* @@@ TBD - define somewhere else for Windows */ #endif - unsigned char hw_mac_addr[ETH_ALEN]; - u64 node_wwn; /* For FCoE only */ - u64 port_wwn; /* For FCoE only */ u16 num_iscsi_conns; u16 num_fcoe_conns; @@ -537,6 +539,12 @@ struct ecore_qm_info { u8 num_pf_rls; }; +struct ecore_db_recovery_info { + osal_list_t list; + osal_spinlock_t lock; + u32 db_recovery_counter; +}; + struct storm_stats { u32 address; u32 len; @@ -605,6 +613,11 @@ struct ecore_hwfn { struct ecore_ptt *p_main_ptt; struct ecore_ptt *p_dpc_ptt; + /* PTP will be used only by the leading funtion. + * Usage of all PTP-apis should be synchronized as result. + */ + struct ecore_ptt *p_ptp_ptt; + struct ecore_sb_sp_info *p_sp_sb; struct ecore_sb_attn_info *p_sb_attn; @@ -661,6 +674,9 @@ struct ecore_hwfn { /* L2-related */ struct ecore_l2_info *p_l2_info; + + /* Mechanism for recovering from doorbell drop */ + struct ecore_db_recovery_info db_recovery_info; }; enum ecore_mf_mode { @@ -694,7 +710,7 @@ struct ecore_dev { #define ECORE_IS_AH(dev) ((dev)->type == ECORE_DEV_TYPE_AH) #define ECORE_IS_K2(dev) ECORE_IS_AH(dev) -#define ECORE_IS_E5(dev) false +#define ECORE_IS_E5(dev) ((dev)->type == ECORE_DEV_TYPE_E5) #define ECORE_E5_MISSING_CODE OSAL_BUILD_BUG_ON(false) @@ -703,6 +719,7 @@ struct ecore_dev { #define ECORE_DEV_ID_MASK 0xff00 #define ECORE_DEV_ID_MASK_BB 0x1600 #define ECORE_DEV_ID_MASK_AH 0x8000 +#define ECORE_DEV_ID_MASK_E5 0x8100 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201706292352.v5TNqmZB076554>