From owner-svn-src-all@freebsd.org Wed Apr 13 13:14:20 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 682FEB0F41D; Wed, 13 Apr 2016 13:14:20 +0000 (UTC) (envelope-from davidcs@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 38D5217D3; Wed, 13 Apr 2016 13:14:20 +0000 (UTC) (envelope-from davidcs@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u3DDEJ41049085; Wed, 13 Apr 2016 13:14:19 GMT (envelope-from davidcs@FreeBSD.org) Received: (from davidcs@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u3DDEJIP049081; Wed, 13 Apr 2016 13:14:19 GMT (envelope-from davidcs@FreeBSD.org) Message-Id: <201604131314.u3DDEJIP049081@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: davidcs set sender to davidcs@FreeBSD.org using -f From: David C Somayajulu Date: Wed, 13 Apr 2016 13:14:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r297922 - head/sys/dev/bxe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Apr 2016 13:14:20 -0000 Author: davidcs Date: Wed Apr 13 13:14:18 2016 New Revision: 297922 URL: https://svnweb.freebsd.org/changeset/base/297922 Log: reversed commits r297916 r297909 r297898 due to i386 build failures. MFC after:5 days Modified: head/sys/dev/bxe/bxe.c head/sys/dev/bxe/bxe.h head/sys/dev/bxe/bxe_stats.c Modified: head/sys/dev/bxe/bxe.c ============================================================================== --- head/sys/dev/bxe/bxe.c Wed Apr 13 12:32:58 2016 (r297921) +++ head/sys/dev/bxe/bxe.c Wed Apr 13 13:14:18 2016 (r297922) @@ -672,6 +672,7 @@ static void bxe_handle_fp_tq(void *conte static int bxe_add_cdev(struct bxe_softc *sc); static void bxe_del_cdev(struct bxe_softc *sc); +static int bxe_grc_dump(struct bxe_softc *sc); static int bxe_alloc_buf_rings(struct bxe_softc *sc); static void bxe_free_buf_rings(struct bxe_softc *sc); @@ -3448,10 +3449,6 @@ bxe_watchdog(struct bxe_softc *sc, } BLOGE(sc, "TX watchdog timeout on fp[%02d], resetting!\n", fp->index); - if(sc->trigger_grcdump) { - /* taking grcdump */ - bxe_grc_dump(sc); - } BXE_FP_TX_UNLOCK(fp); @@ -15640,6 +15637,30 @@ bxe_sysctl_state(SYSCTL_HANDLER_ARGS) } static int +bxe_sysctl_trigger_grcdump(SYSCTL_HANDLER_ARGS) +{ + struct bxe_softc *sc; + int error, result; + + result = 0; + error = sysctl_handle_int(oidp, &result, 0, req); + + if (error || !req->newptr) { + return (error); + } + + if (result == 1) { + sc = (struct bxe_softc *)arg1; + + BLOGI(sc, "... grcdump start ...\n"); + bxe_grc_dump(sc); + BLOGI(sc, "... grcdump done ...\n"); + } + + return (error); +} + +static int bxe_sysctl_eth_stat(SYSCTL_HANDLER_ARGS) { struct bxe_softc *sc = (struct bxe_softc *)arg1; @@ -15790,16 +15811,14 @@ bxe_add_sysctls(struct bxe_softc *sc) "debug logging mode"); #endif /* #if __FreeBSD_version >= 900000 */ - sc->trigger_grcdump = 0; - SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "trigger_grcdump", - CTLFLAG_RW, &sc->trigger_grcdump, 0, - "trigger grcdump should be invoked" - " before collecting grcdump"); + SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "trigger_grcdump", + CTLTYPE_UINT | CTLFLAG_RW, sc, 0, + bxe_sysctl_trigger_grcdump, "IU", + "set by driver when a grcdump is needed"); - sc->grcdump_started = 0; sc->grcdump_done = 0; SYSCTL_ADD_UINT(ctx, children, OID_AUTO, "grcdump_done", - CTLFLAG_RD, &sc->grcdump_done, 0, + CTLFLAG_RW, &sc->grcdump_done, 0, "set by driver when grcdump is done"); sc->rx_budget = bxe_rx_budget; @@ -18631,7 +18650,7 @@ bxe_get_preset_regs(struct bxe_softc *sc return 0; } -int +static int bxe_grc_dump(struct bxe_softc *sc) { int rval = 0; @@ -18639,53 +18658,12 @@ bxe_grc_dump(struct bxe_softc *sc) uint8_t *buf; uint32_t size; struct dump_header *d_hdr; - uint32_t i; - uint32_t reg_val; - uint32_t reg_addr; - uint32_t cmd_offset; - int context_size; - int allocated; - struct ecore_ilt *ilt = SC_ILT(sc); - struct bxe_fastpath *fp; - struct ilt_client_info *ilt_cli; - int grc_dump_size; - - if (sc->grcdump_done || sc->grcdump_started) + if (sc->grcdump_done) return (rval); - sc->grcdump_started = 1; - BLOGI(sc, "Started collecting grcdump\n"); - - grc_dump_size = (bxe_get_total_regs_len32(sc) * sizeof(uint32_t)) + - sizeof(struct dump_header); - - sc->grc_dump = malloc(grc_dump_size, M_DEVBUF, M_NOWAIT); - - if (sc->grc_dump == NULL) { - BLOGW(sc, "Unable to allocate memory for grcdump collection\n"); - return(ENOMEM); - } - - - - /* Disable parity attentions as long as following dump may - * cause false alarms by reading never written registers. We - * will re-enable parity attentions right after the dump. - */ - - /* Disable parity on path 0 */ - bxe_pretend_func(sc, 0); - ecore_disable_blocks_parity(sc); - /* Disable parity on path 1 */ - bxe_pretend_func(sc, 1); - ecore_disable_blocks_parity(sc); - - /* Return to current function */ - bxe_pretend_func(sc, SC_ABS_FUNC(sc)); - buf = sc->grc_dump; d_hdr = sc->grc_dump; @@ -18717,7 +18695,7 @@ bxe_grc_dump(struct bxe_softc *sc) (preset_idx == 11)) continue; - rval = bxe_get_preset_regs(sc, (uint32_t *)buf, preset_idx); + rval = bxe_get_preset_regs(sc, sc->grc_dump, preset_idx); if (rval) break; @@ -18727,81 +18705,9 @@ bxe_grc_dump(struct bxe_softc *sc) buf += size; } - bxe_pretend_func(sc, 0); - ecore_clear_blocks_parity(sc); - ecore_enable_blocks_parity(sc); - - bxe_pretend_func(sc, 1); ecore_clear_blocks_parity(sc); ecore_enable_blocks_parity(sc); - /* Return to current function */ - bxe_pretend_func(sc, SC_ABS_FUNC(sc)); - - - context_size = (sizeof(union cdu_context) * BXE_L2_CID_COUNT(sc)); - for (i = 0, allocated = 0; allocated < context_size; i++) { - - BLOGI(sc, "cdu_context i %d paddr %#jx vaddr %p size 0x%zx\n", i, - (uintmax_t)sc->context[i].vcxt_dma.paddr, - sc->context[i].vcxt_dma.vaddr, - sc->context[i].size); - allocated += sc->context[i].size; - } - BLOGI(sc, "fw stats start_paddr %#jx end_paddr %#jx vaddr %p size 0x%x\n", - (uintmax_t)sc->fw_stats_req_mapping, - (uintmax_t)sc->fw_stats_data_mapping, - sc->fw_stats_req, (sc->fw_stats_req_size + sc->fw_stats_data_size)); - BLOGI(sc, "def_status_block paddr %p vaddr %p size 0x%zx\n", - (void *)sc->def_sb_dma.paddr, sc->def_sb, - sizeof(struct host_sp_status_block)); - BLOGI(sc, "event_queue paddr %#jx vaddr %p size 0x%x\n", - (uintmax_t)sc->eq_dma.paddr, sc->eq_dma.vaddr, BCM_PAGE_SIZE); - BLOGI(sc, "slow path paddr %#jx vaddr %p size 0x%zx\n", - (uintmax_t)sc->sp_dma.paddr, sc->sp_dma.vaddr, - sizeof(struct bxe_slowpath)); - BLOGI(sc, "slow path queue paddr %#jx vaddr %p size 0x%x\n", - (uintmax_t)sc->spq_dma.paddr, sc->spq_dma.vaddr, BCM_PAGE_SIZE); - BLOGI(sc, "fw_buf paddr %#jx vaddr %p size 0x%x\n", - (uintmax_t)sc->gz_buf_dma.paddr, sc->gz_buf_dma.vaddr, - FW_BUF_SIZE); - for (i = 0; i < sc->num_queues; i++) { - fp = &sc->fp[i]; - BLOGI(sc, "FP status block fp %d paddr %#jx vaddr %p size 0x%zx\n", i, - (uintmax_t)fp->sb_dma.paddr, fp->sb_dma.vaddr, - sizeof(union bxe_host_hc_status_block)); - BLOGI(sc, "TX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i, - (uintmax_t)fp->tx_dma.paddr, fp->tx_dma.vaddr, - (BCM_PAGE_SIZE * TX_BD_NUM_PAGES)); - BLOGI(sc, "RX BD CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i, - (uintmax_t)fp->rx_dma.paddr, fp->rx_dma.vaddr, - (BCM_PAGE_SIZE * RX_BD_NUM_PAGES)); - BLOGI(sc, "RX RCQ CHAIN fp %d paddr %#jx vaddr %p size 0x%zx\n", i, - (uintmax_t)fp->rcq_dma.paddr, fp->rcq_dma.vaddr, - (BCM_PAGE_SIZE * RCQ_NUM_PAGES)); - BLOGI(sc, "RX SGE CHAIN fp %d paddr %#jx vaddr %p size 0x%x\n", i, - (uintmax_t)fp->rx_sge_dma.paddr, fp->rx_sge_dma.vaddr, - (BCM_PAGE_SIZE * RX_SGE_NUM_PAGES)); - } - - ilt_cli = &ilt->clients[1]; - for (i = ilt_cli->start; i <= ilt_cli->end; i++) { - BLOGI(sc, "ECORE_ILT paddr %#jx vaddr %p size 0x%x\n", - (uintmax_t)(((struct bxe_dma *)((&ilt->lines[i])->page))->paddr), - ((struct bxe_dma *)((&ilt->lines[i])->page))->vaddr, BCM_PAGE_SIZE); - } - - - cmd_offset = DMAE_REG_CMD_MEM; - for (i = 0; i < 224; i++) { - reg_addr = (cmd_offset +(i * 4)); - reg_val = REG_RD(sc, reg_addr); - BLOGI(sc, "DMAE_REG_CMD_MEM i=%d reg_addr 0x%x reg_val 0x%08x\n",i, - reg_addr, reg_val); - } - - - BLOGI(sc, "Collection of grcdump done\n"); sc->grcdump_done = 1; return(rval); } @@ -18809,10 +18715,21 @@ bxe_grc_dump(struct bxe_softc *sc) static int bxe_add_cdev(struct bxe_softc *sc) { + int grc_dump_size; + + grc_dump_size = (bxe_get_total_regs_len32(sc) * sizeof(uint32_t)) + + sizeof(struct dump_header); + + sc->grc_dump = malloc(grc_dump_size, M_DEVBUF, M_NOWAIT); + + if (sc->grc_dump == NULL) + return (-1); + sc->eeprom = malloc(BXE_EEPROM_MAX_DATA_LEN, M_DEVBUF, M_NOWAIT); if (sc->eeprom == NULL) { BLOGW(sc, "Unable to alloc for eeprom size buffer\n"); + free(sc->grc_dump, M_DEVBUF); sc->grc_dump = NULL; return (-1); } @@ -18825,8 +18742,11 @@ bxe_add_cdev(struct bxe_softc *sc) if_name(sc->ifp)); if (sc->ioctl_dev == NULL) { + + free(sc->grc_dump, M_DEVBUF); free(sc->eeprom, M_DEVBUF); sc->eeprom = NULL; + return (-1); } @@ -18841,11 +18761,13 @@ bxe_del_cdev(struct bxe_softc *sc) if (sc->ioctl_dev != NULL) destroy_dev(sc->ioctl_dev); + if (sc->grc_dump != NULL) + free(sc->grc_dump, M_DEVBUF); + if (sc->eeprom != NULL) { free(sc->eeprom, M_DEVBUF); sc->eeprom = NULL; } - sc->ioctl_dev = NULL; return; } @@ -19023,26 +18945,15 @@ bxe_eioctl(struct cdev *dev, u_long cmd, grc_dump_size = (bxe_get_total_regs_len32(sc) * sizeof(uint32_t)) + sizeof(struct dump_header); - if ((!sc->trigger_grcdump) || (dump->grcdump == NULL) || - (dump->grcdump_size < grc_dump_size)) { + + if ((sc->grc_dump == NULL) || (dump->grcdump == NULL) || + (dump->grcdump_size < grc_dump_size) || (!sc->grcdump_done)) { rval = EINVAL; break; } - - if((sc->trigger_grcdump) && (!sc->grcdump_done) && - (!sc->grcdump_started)) { - rval = bxe_grc_dump(sc); - } - - if((!rval) && (sc->grcdump_done) && (sc->grcdump_started) && - (sc->grc_dump != NULL)) { - dump->grcdump_dwords = grc_dump_size >> 2; - rval = copyout(sc->grc_dump, dump->grcdump, grc_dump_size); - free(sc->grc_dump, M_DEVBUF); - sc->grc_dump = NULL; - sc->grcdump_started = 0; - sc->grcdump_done = 0; - } + dump->grcdump_dwords = grc_dump_size >> 2; + rval = copyout(sc->grc_dump, dump->grcdump, grc_dump_size); + sc->grcdump_done = 0; break; @@ -19062,7 +18973,6 @@ bxe_eioctl(struct cdev *dev, u_long cmd, snprintf(drv_infop->bus_info, BXE_BUS_INFO_LENGTH, "%d:%d:%d", sc->pcie_bus, sc->pcie_device, sc->pcie_func); break; - case BXE_DEV_SETTING: dev_p = (bxe_dev_setting_t *)data; bxe_get_settings(sc, &dev_set); @@ -19081,20 +18991,20 @@ bxe_eioctl(struct cdev *dev, u_long cmd, reg_p = (bxe_get_regs_t *)data; grc_dump_size = reg_p->reg_buf_len; - if((!sc->grcdump_done) && (!sc->grcdump_started)) { + if (sc->grc_dump == NULL) { + rval = EINVAL; + break; + } + + if(!sc->grcdump_done) { bxe_grc_dump(sc); } - if((sc->grcdump_done) && (sc->grcdump_started) && - (sc->grc_dump != NULL)) { + if(sc->grcdump_done) { rval = copyout(sc->grc_dump, reg_p->reg_buf, grc_dump_size); - free(sc->grc_dump, M_DEVBUF); - sc->grc_dump = NULL; - sc->grcdump_started = 0; sc->grcdump_done = 0; } break; - case BXE_RDW_REG: reg_rdw_p = (bxe_reg_rdw_t *)data; if((reg_rdw_p->reg_cmd == BXE_READ_REG_CMD) && Modified: head/sys/dev/bxe/bxe.h ============================================================================== --- head/sys/dev/bxe/bxe.h Wed Apr 13 12:32:58 2016 (r297921) +++ head/sys/dev/bxe/bxe.h Wed Apr 13 13:14:18 2016 (r297922) @@ -1786,12 +1786,8 @@ struct bxe_softc { int panic; struct cdev *ioctl_dev; - void *grc_dump; - unsigned int trigger_grcdump; - unsigned int grcdump_done; - unsigned int grcdump_started; - + int grcdump_done; void *eeprom; }; /* struct bxe_softc */ @@ -2297,7 +2293,7 @@ void bxe_dump_mem(struct bxe_softc *sc, uint8_t *mem, uint32_t len); void bxe_dump_mbuf_data(struct bxe_softc *sc, char *pTag, struct mbuf *m, uint8_t contents); -extern int bxe_grc_dump(struct bxe_softc *sc); + #if __FreeBSD_version >= 800000 #if __FreeBSD_version >= 1000000 Modified: head/sys/dev/bxe/bxe_stats.c ============================================================================== --- head/sys/dev/bxe/bxe_stats.c Wed Apr 13 12:32:58 2016 (r297921) +++ head/sys/dev/bxe/bxe_stats.c Wed Apr 13 13:14:18 2016 (r297922) @@ -234,10 +234,6 @@ bxe_stats_comp(struct bxe_softc *sc) while (*stats_comp != DMAE_COMP_VAL) { if (!cnt) { BLOGE(sc, "Timeout waiting for stats finished\n"); - if(sc->trigger_grcdump) { - /* taking grcdump */ - bxe_grc_dump(sc); - } break; } @@ -1314,12 +1310,8 @@ bxe_stats_update(struct bxe_softc *sc) if (bxe_storm_stats_update(sc)) { if (sc->stats_pending++ == 3) { if (if_getdrvflags(sc->ifp) & IFF_DRV_RUNNING) { - if(sc->trigger_grcdump) { - /* taking grcdump */ - bxe_grc_dump(sc); - } - atomic_store_rel_long(&sc->chip_tq_flags, CHIP_TQ_REINIT); - taskqueue_enqueue(sc->chip_tq, &sc->chip_tq_task); + atomic_store_rel_long(&sc->chip_tq_flags, CHIP_TQ_REINIT); + taskqueue_enqueue(sc->chip_tq, &sc->chip_tq_task); } } return;