/* num_vfs module param is obsolete. *Usesysfsmethodtoenable/disableVFs.
*/ staticunsignedint num_vfs;
module_param(num_vfs, uint, 0444);
MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
static ushort rx_frag_size = 2048;
module_param(rx_frag_size, ushort, 0444);
MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
/* Per-module error detection/recovery workq shared across all functions. *Eachfunctionschedulesitsownworkrequestonthissharedworkq.
*/ staticstruct workqueue_struct *be_err_recovery_workq;
val |= qid & DB_EQ_RING_ID_MASK;
val |= ((qid & DB_EQ_RING_ID_EXT_MASK) << DB_EQ_RING_ID_EXT_MASK_SHIFT);
if (be_check_error(adapter, BE_ERROR_HW)) return;
if (arm)
val |= 1 << DB_EQ_REARM_SHIFT; if (clear_int)
val |= 1 << DB_EQ_CLR_SHIFT;
val |= 1 << DB_EQ_EVNT_SHIFT;
val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
val |= eq_delay_mult_enc << DB_EQ_R2I_DLY_SHIFT;
iowrite32(val, adapter->db + DB_EQ_OFFSET);
}
val |= qid & DB_CQ_RING_ID_MASK;
val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
DB_CQ_RING_ID_EXT_MASK_SHIFT);
if (be_check_error(adapter, BE_ERROR_HW)) return;
if (arm)
val |= 1 << DB_CQ_REARM_SHIFT;
val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
iowrite32(val, adapter->db + DB_CQ_OFFSET);
}
staticint be_dev_mac_add(struct be_adapter *adapter, const u8 *mac)
{ int i;
/* Check if mac has already been added as part of uc-list */ for (i = 0; i < adapter->uc_macs; i++) { if (ether_addr_equal(adapter->uc_list[i].mac, mac)) { /* mac already added, skip addition */
adapter->pmac_id[0] = adapter->pmac_id[i + 1]; return0;
}
}
staticvoid be_dev_mac_del(struct be_adapter *adapter, int pmac_id)
{ int i;
/* Skip deletion if the programmed mac is *beingusedinuc-list
*/ for (i = 0; i < adapter->uc_macs; i++) { if (adapter->pmac_id[i + 1] == pmac_id) return;
}
be_cmd_pmac_del(adapter, adapter->if_handle, pmac_id, 0);
}
if (!is_valid_ether_addr(addr->sa_data)) return -EADDRNOTAVAIL;
/* Proceed further only if, User provided MAC is different *fromactiveMAC
*/ if (ether_addr_equal(addr->sa_data, adapter->dev_mac)) return0;
/* BE3 VFs without FILTMGMT privilege are not allowed to set its MAC *address
*/ if (BEx_chip(adapter) && be_virtfn(adapter) &&
!check_privilege(adapter, BE_PRIV_FILTMGMT)) return -EPERM;
/* if device is not running, copy MAC to netdev->dev_addr */ if (!netif_running(netdev)) goto done;
/* The PMAC_ADD cmd may fail if the VF doesn't have FILTMGMT *privilegeorifPFdidnotprovisionthenewMACaddress. *OnBE3,thiscmdwillalwaysfailiftheVFdoesn'thavethe *FILTMGMTprivilege.ThisfailureisOK,onlyifthePFprogrammed *theMACfortheVF.
*/
mutex_lock(&adapter->rx_filter_lock);
status = be_dev_mac_add(adapter, (u8 *)addr->sa_data); if (!status) {
/* Delete the old programmed MAC. This call may fail if the *oldMACwasalreadydeletedbythePFdriver.
*/ if (adapter->pmac_id[0] != old_pmac_id)
be_dev_mac_del(adapter, old_pmac_id);
}
mutex_unlock(&adapter->rx_filter_lock); /* Decide if the new MAC is successfully activated only after *queryingtheFW
*/
status = be_cmd_get_active_mac(adapter, adapter->pmac_id[0], mac,
adapter->if_handle, true, 0); if (status) goto err;
/* The MAC change did not happen, either due to lack of privilege *orPFdidn'tpre-provision.
*/ if (!ether_addr_equal(addr->sa_data, mac)) {
status = -EPERM; goto err;
}
/* Remember currently programmed MAC */
ether_addr_copy(adapter->dev_mac, addr->sa_data);
done:
eth_hw_addr_set(netdev, addr->sa_data);
dev_info(dev, "MAC address changed to %pM\n", addr->sa_data); return0;
err:
dev_warn(dev, "MAC address change to %pM failed\n", addr->sa_data); return status;
}
/* BE2 supports only v0 cmd */ staticvoid *hw_stats_from_cmd(struct be_adapter *adapter)
{ if (BE2_chip(adapter)) { struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
/* receiver fifo overrun */ /* drops_no_pbuf is no per i/f, it's per BE card */
stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
drvs->rx_input_fifo_overflow_drop +
drvs->rx_drops_no_pbuf;
}
/* A dummy wrb is just all zeros. Using a separate routine for dummy-wrb *toavoidtheswapandshift/maskoperationsinwrb_fill().
*/ staticinlinevoid wrb_fill_dummy(struct be_eth_wrb *wrb)
{
wrb->frag_pa_hi = 0;
wrb->frag_pa_lo = 0;
wrb->frag_len = 0;
wrb->rsvd0 = 0;
}
vlan_tag = skb_vlan_tag_get(skb);
vlan_prio = skb_vlan_tag_get_prio(skb); /* If vlan priority provided by OS is NOT in available bmap */ if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
adapter->recommended_prio_bits;
return vlan_tag;
}
/* Used only for IP tunnel packets */ static u16 skb_inner_ip_proto(struct sk_buff *skb)
{ return (inner_ip_hdr(skb)->version == 4) ?
inner_ip_hdr(skb)->protocol : inner_ipv6_hdr(skb)->nexthdr;
}
/* Bring the queue back to the state it was in before be_xmit_enqueue() routine *wasinvoked.Theproducerindexisrestoredtothepreviouspacketandthe *WRBsofthecurrentpacketareunmapped.Invokedtohandletxsetuperrors.
*/ staticvoid be_xmit_restore(struct be_adapter *adapter, struct be_tx_obj *txo, u32 head, bool map_single,
u32 copied)
{ struct device *dev; struct be_eth_wrb *wrb; struct be_queue_info *txq = &txo->q;
dev = &adapter->pdev->dev;
txq->head = head;
/* skip the first wrb (hdr); it's not mapped */
queue_head_inc(txq); while (copied) {
wrb = queue_head_node(txq);
unmap_tx_frag(dev, wrb, map_single);
map_single = false;
copied -= le32_to_cpu(wrb->frag_len);
queue_head_inc(txq);
}
txq->head = head;
}
/* Enqueue the given packet for transmit. This routine allocates WRBs for the *packet,dmamapsthepacketbuffersandsetsuptheWRBs.Returnsthenumber *ofWRBsusedupbythepacket.
*/ static u32 be_xmit_enqueue(struct be_adapter *adapter, struct be_tx_obj *txo, struct sk_buff *skb, struct be_wrb_params *wrb_params)
{
u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb); struct device *dev = &adapter->pdev->dev; bool map_single = false;
u32 head;
dma_addr_t busaddr; int len;
head = be_tx_get_wrb_hdr(txo);
if (skb->len > skb->data_len) {
len = skb_headlen(skb);
/* For padded packets, BE HW modifies tot_len field in IP header *incorreclywhenVLANtagisinsertedbyHW. *Forpaddedpackets,Lancercomputesincorrectchecksum.
*/
eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ?
VLAN_ETH_HLEN : ETH_HLEN; if (skb->len <= 60 &&
(lancer_chip(adapter) || BE3_chip(adapter) ||
skb_vlan_tag_present(skb)) && is_ipv4_pkt(skb)) {
ip = (struct iphdr *)ip_hdr(skb); if (unlikely(pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len)))) goto tx_drop;
}
/* If vlan tag is already inlined in the packet, skip HW VLAN *tagginginpvid-taggingmode
*/ if (be_pvid_tagging_enabled(adapter) &&
veh->h_vlan_proto == htons(ETH_P_8021Q))
BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
/* HW has a bug wherein it will calculate CSUM for VLAN *pktseventhoughitisdisabled. *ManuallyinsertVLANinpkt.
*/ if (skb->ip_summed != CHECKSUM_PARTIAL &&
skb_vlan_tag_present(skb)) {
skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params); if (unlikely(!skb)) goto err;
}
/* HW may lockup when VLAN HW tagging is requested on *certainipv6packets.DropsuchpktsiftheHWworkaroundto *skipHWtaggingisnotenabledbyFW.
*/ if (unlikely(be_ipv6_tx_stall_chk(adapter, skb) &&
(adapter->pvid || adapter->qnq_vid) &&
!qnq_async_evt_rcvd(adapter))) goto tx_drop;
/* Manual VLAN tag insertion to prevent: *ASIClockupwhentheASICinsertsVLANtaginto *certainipv6packets.InsertVLANtagsindriver, *andsetevent,completion,vlanbitsaccordingly *intheTxWRB.
*/ if (be_ipv6_tx_stall_chk(adapter, skb) &&
be_vlan_tag_tx_chk(adapter, skb)) {
skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params); if (unlikely(!skb)) goto err;
}
/* Lancer, SH and BE3 in SRIOV mode have a bug wherein *packetsthatare32borlessmaycauseatransmitstall *onthatport.Theworkaroundistopadsuchpackets *(len<=32bytes)toaminimumlengthof36b.
*/ if (skb->len <= 32) { if (skb_put_padto(skb, 36)) return NULL;
}
if (BEx_chip(adapter) || lancer_chip(adapter)) {
skb = be_lancer_xmit_workarounds(adapter, skb, wrb_params); if (!skb) return NULL;
}
/* The stack can send us skbs with length greater than *whattheHWcanhandle.Trimtheextrabytes.
*/
WARN_ON_ONCE(skb->len > BE_MAX_GSO_SIZE);
err = pskb_trim(skb, BE_MAX_GSO_SIZE);
WARN_ON(err);
/* Mark the last request eventable if it hasn't been marked already */ if (!(hdr->dw[2] & cpu_to_le32(TX_HDR_WRB_EVT)))
hdr->dw[2] |= cpu_to_le32(TX_HDR_WRB_EVT | TX_HDR_WRB_COMPL);
/* compose a dummy wrb if there are odd set of wrbs to notify */ if (!lancer_chip(adapter) && (txo->pend_wrb_cnt & 1)) {
wrb_fill_dummy(queue_head_node(txq));
queue_head_inc(txq);
atomic_inc(&txq->used);
txo->pend_wrb_cnt++;
hdr->dw[2] &= ~cpu_to_le32(TX_HDR_WRB_NUM_MASK <<
TX_HDR_WRB_NUM_SHIFT);
hdr->dw[2] |= cpu_to_le32((txo->last_req_wrb_cnt + 1) <<
TX_HDR_WRB_NUM_SHIFT);
}
be_txq_notify(adapter, txo, txo->pend_wrb_cnt);
txo->pend_wrb_cnt = 0;
}
wrb_cnt = be_xmit_enqueue(adapter, txo, skb, &wrb_params); if (unlikely(!wrb_cnt)) goto drop_skb;
/* if os2bmc is enabled and if the pkt is destined to bmc, *enqueuethepkta2ndtimewithmgmtbitset.
*/ if (be_send_pkt_to_bmc(adapter, &skb)) {
BE_WRB_F_SET(wrb_params.features, OS2BMC, 1);
wrb_cnt = be_xmit_enqueue(adapter, txo, skb, &wrb_params); if (unlikely(!wrb_cnt)) goto drop_skb; else
skb_get(skb);
}
if (be_is_txq_full(txo)) {
netif_stop_subqueue(netdev, q_idx);
tx_stats(txo)->tx_stops++;
}
if (flush || __netif_subqueue_stopped(netdev, q_idx))
be_xmit_flush(adapter, txo);
return NETDEV_TX_OK;
drop_skb:
dev_kfree_skb_any(skb);
drop:
tx_stats(txo)->tx_drv_drops++; /* Flush the already enqueued tx requests */ if (flush && txo->pend_wrb_cnt)
be_xmit_flush(adapter, txo);
status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, OFF); if (!status) {
dev_info(dev, "Disabling VLAN promiscuous mode\n");
adapter->if_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
} return status;
}
/* *Amaxof64(BE_NUM_VLANS_SUPPORTED)vlanscanbeconfiguredinBE. *Iftheuserconfiguresmore,placeBEinvlanpromiscuousmode.
*/ staticint be_vid_config(struct be_adapter *adapter)
{ struct device *dev = &adapter->pdev->dev;
u16 vids[BE_NUM_VLANS_SUPPORTED];
u16 num = 0, i = 0; int status = 0;
/* No need to change the VLAN state if the I/F is in promiscuous */ if (adapter->netdev->flags & IFF_PROMISC) return0;
if (adapter->vlans_added > be_max_vlans(adapter)) return be_set_vlan_promisc(adapter);
if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS) {
status = be_clear_vlan_promisc(adapter); if (status) return status;
} /* Construct VLAN Table to give to HW */
for_each_set_bit(i, adapter->vids, VLAN_N_VID)
vids[num++] = cpu_to_le16(i);
status = be_cmd_vlan_config(adapter, adapter->if_handle, vids, num, 0); if (status) {
dev_err(dev, "Setting HW VLAN filtering failed\n"); /* Set to VLAN promisc mode as setting VLAN filter failed */ if (addl_status(status) == MCC_ADDL_STATUS_INSUFFICIENT_VLANS ||
addl_status(status) ==
MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES) return be_set_vlan_promisc(adapter);
} return status;
}
staticint be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
{ struct be_adapter *adapter = netdev_priv(netdev); int status = 0;
mutex_lock(&adapter->rx_filter_lock);
/* Packets with VID 0 are always received by Lancer by default */ if (lancer_chip(adapter) && vid == 0) goto done;
if (netdev->flags & IFF_PROMISC) { if (!be_in_all_promisc(adapter))
be_set_all_promisc(adapter);
} elseif (be_in_all_promisc(adapter)) { /* We need to re-program the vlan-list or clear *vlan-promiscmode(ifneeded)whentheinterface *comesoutofpromiscmode.
*/
be_vid_config(adapter);
}
staticint be_set_vf_tvt(struct be_adapter *adapter, int vf, u16 vlan)
{ struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
u16 vids[BE_NUM_VLANS_SUPPORTED]; int vf_if_id = vf_cfg->if_handle; int status;
/* Enable Transparent VLAN Tagging */
status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, vf_if_id, 0, 0); if (status) return status;
/* Clear pre-programmed VLAN filters on VF if any, if TVT is enabled */
vids[0] = 0;
status = be_cmd_vlan_config(adapter, vf_if_id, vids, 1, vf + 1); if (!status)
dev_info(&adapter->pdev->dev, "Cleared guest VLANs on VF%d", vf);
/* After TVT is enabled, disallow VFs to program VLAN filters */ if (vf_cfg->privileges & BE_PRIV_FILTMGMT) {
status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges &
~BE_PRIV_FILTMGMT, vf + 1); if (!status)
vf_cfg->privileges &= ~BE_PRIV_FILTMGMT;
} return0;
}
staticint be_clear_vf_tvt(struct be_adapter *adapter, int vf)
{ struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf]; struct device *dev = &adapter->pdev->dev; int status;
/* Reset Transparent VLAN Tagging. */
status = be_cmd_set_hsw_config(adapter, BE_RESET_VLAN_TAG_ID, vf + 1,
vf_cfg->if_handle, 0, 0); if (status) return status;
/* Allow VFs to program VLAN filtering */ if (!(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges |
BE_PRIV_FILTMGMT, vf + 1); if (!status) {
vf_cfg->privileges |= BE_PRIV_FILTMGMT;
dev_info(dev, "VF%d: FILTMGMT priv enabled", vf);
}
}
dev_info(dev, "Disable/re-enable i/f in VM to clear Transparent VLAN tag"); return0;
}
if (vlan_proto != htons(ETH_P_8021Q)) return -EPROTONOSUPPORT;
if (vlan || qos) {
vlan |= qos << VLAN_PRIO_SHIFT;
status = be_set_vf_tvt(adapter, vf, vlan);
} else {
status = be_clear_vf_tvt(adapter, vf);
}
if (status) {
dev_err(&adapter->pdev->dev, "VLAN %d config on VF %d failed : %#x\n", vlan, vf,
status); return be_cmd_status(status);
}
vf_cfg->vlan_tag = vlan; return0;
}
staticint be_set_vf_tx_rate(struct net_device *netdev, int vf, int min_tx_rate, int max_tx_rate)
{ struct be_adapter *adapter = netdev_priv(netdev); struct device *dev = &adapter->pdev->dev; int percent_rate, status = 0;
u16 link_speed = 0;
u8 link_status;
if (!sriov_enabled(adapter)) return -EPERM;
if (vf >= adapter->num_vfs) return -EINVAL;
if (min_tx_rate) return -EINVAL;
if (!max_tx_rate) goto config_qos;
status = be_cmd_link_status_query(adapter, &link_speed,
&link_status, 0); if (status) goto err;
if (!link_status) {
dev_err(dev, "TX-rate setting not allowed when link is down\n");
status = -ENETDOWN; goto err;
}
if (max_tx_rate < 100 || max_tx_rate > link_speed) {
dev_err(dev, "TX-rate must be between 100 and %d Mbps\n",
link_speed);
status = -EINVAL; goto err;
}
/* On Skyhawk the QOS setting must be done only as a % value */
percent_rate = link_speed / 100; if (skyhawk_chip(adapter) && (max_tx_rate % percent_rate)) {
dev_err(dev, "TX-rate must be a multiple of %d Mbps\n",
percent_rate);
status = -EINVAL; goto err;
}
config_qos:
status = be_cmd_config_qos(adapter, max_tx_rate, link_speed, vf + 1); if (status) goto err;
/* Throwaway the data in the Rx completion */ staticvoid be_rx_compl_discard(struct be_rx_obj *rxo, struct be_rx_compl_info *rxcp)
{ struct be_rx_page_info *page_info;
u16 i, num_rcvd = rxcp->num_rcvd;
for (i = 0; i < num_rcvd; i++) {
page_info = get_rx_page_info(rxo);
put_page(page_info->page);
memset(page_info, 0, sizeof(*page_info));
}
}
/* Copy data in the first descriptor of this completion */
curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
skb->len = curr_frag_len; if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
memcpy(skb->data, start, curr_frag_len); /* Complete packet has now been moved to data */
put_page(page_info->page);
skb->data_len = 0;
skb->tail += curr_frag_len;
} else {
hdr_len = ETH_HLEN;
memcpy(skb->data, start, hdr_len);
skb_shinfo(skb)->nr_frags = 1;
skb_frag_fill_page_desc(&skb_shinfo(skb)->frags[0],
page_info->page,
page_info->page_offset + hdr_len,
curr_frag_len - hdr_len);
skb->data_len = curr_frag_len - hdr_len;
skb->truesize += rx_frag_size;
skb->tail += hdr_len;
}
page_info->page = NULL;
if (rxcp->pkt_size <= rx_frag_size) {
BUG_ON(rxcp->num_rcvd != 1); return;
}
/* More frags present for this completion */
remaining = rxcp->pkt_size - curr_frag_len; for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
page_info = get_rx_page_info(rxo);
curr_frag_len = min(remaining, rx_frag_size);
/* Coalesce all frags from the same physical page in one slot */ if (page_info->page_offset == 0) { /* Fresh page */
j++;
skb_frag_fill_page_desc(&skb_shinfo(skb)->frags[j],
page_info->page,
page_info->page_offset,
curr_frag_len);
skb_shinfo(skb)->nr_frags++;
} else {
put_page(page_info->page);
skb_frag_size_add(&skb_shinfo(skb)->frags[j],
curr_frag_len);
}
if (rxcp->vlanf)
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
netif_receive_skb(skb);
}
/* Process the RX completion indicated by rxcp when GRO is enabled */ staticvoid be_rx_compl_process_gro(struct be_rx_obj *rxo, struct napi_struct *napi, struct be_rx_compl_info *rxcp)
{ struct be_adapter *adapter = rxo->adapter; struct be_rx_page_info *page_info; struct sk_buff *skb = NULL;
u16 remaining, curr_frag_len;
u16 i, j;
skb = napi_get_frags(napi); if (!skb) {
be_rx_compl_discard(rxo, rxcp); return;
}
remaining = rxcp->pkt_size; for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
page_info = get_rx_page_info(rxo);
curr_frag_len = min(remaining, rx_frag_size);
/* Coalesce all frags from the same physical page in one slot */ if (i == 0 || page_info->page_offset == 0) { /* First frag or Fresh page */
j++;
skb_frag_fill_page_desc(&skb_shinfo(skb)->frags[j],
page_info->page,
page_info->page_offset,
curr_frag_len);
} else {
put_page(page_info->page);
skb_frag_size_add(&skb_shinfo(skb)->frags[j],
curr_frag_len);
}
/* For checking the valid bit it is Ok to use either definition as the
* valid bit is at the same position in both v0 and v1 Rx compl */ if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0) return NULL;
rmb();
be_dws_le_to_cpu(compl, sizeof(*compl));
if (adapter->be3_native)
be_parse_rx_compl_v1(compl, rxcp); else
be_parse_rx_compl_v0(compl, rxcp);
if (rxcp->ip_frag)
rxcp->l4_csum = 0;
if (rxcp->vlanf) { /* In QNQ modes, if qnq bit is not set, then the packet was *taggedonlywiththetransparentoutervlan-tagandmust *notbetreatedasavlanpacketbyhost
*/ if (be_is_qnq_mode(adapter) && !rxcp->qnq)
rxcp->vlanf = 0;
if (!lancer_chip(adapter))
rxcp->vlan_tag = swab16(rxcp->vlan_tag);
/* Any space left in the current big page for another frag? */ if ((page_offset + rx_frag_size + rx_frag_size) >
adapter->big_page_size) {
pagep = NULL;
page_info->last_frag = true;
dma_unmap_addr_set(page_info, bus, page_dmaaddr);
} else {
dma_unmap_addr_set(page_info, bus, frag_dmaaddr);
}
/* Mark the last frag of a page when we break out of the above loop *withnomoreslotsavailableintheRXQ
*/ if (pagep) {
prev_page_info->last_frag = true;
dma_unmap_addr_set(prev_page_info, bus, page_dmaaddr);
}
if (posted) {
atomic_add(posted, &rxq->used); if (rxo->rx_post_starved)
rxo->rx_post_starved = false; do {
notify = min(MAX_NUM_POST_ERX_DB, posted);
be_rxq_notify(adapter, rxq->id, notify);
posted -= notify;
} while (posted);
} elseif (atomic_read(&rxq->used) == 0) { /* Let be_worker replenish when memory is available */
rxo->rx_post_starved = true;
}
}
staticinlinevoid be_update_tx_err(struct be_tx_obj *txo, u8 status)
{ switch (status) { case BE_TX_COMP_HDR_PARSE_ERR:
tx_stats(txo)->tx_hdr_parse_err++; break; case BE_TX_COMP_NDMA_ERR:
tx_stats(txo)->tx_dma_err++; break; case BE_TX_COMP_ACL_ERR:
tx_stats(txo)->tx_spoof_check_err++; break;
}
}
staticinlinevoid lancer_update_tx_err(struct be_tx_obj *txo, u8 status)
{ switch (status) { case LANCER_TX_COMP_LSO_ERR:
tx_stats(txo)->tx_tso_err++; break; case LANCER_TX_COMP_HSW_DROP_MAC_ERR: case LANCER_TX_COMP_HSW_DROP_VLAN_ERR:
tx_stats(txo)->tx_spoof_check_err++; break; case LANCER_TX_COMP_QINQ_ERR:
tx_stats(txo)->tx_qinq_err++; break; case LANCER_TX_COMP_PARITY_ERR:
tx_stats(txo)->tx_internal_parity_err++; break; case LANCER_TX_COMP_DMA_ERR:
tx_stats(txo)->tx_dma_err++; break; case LANCER_TX_COMP_SGE_ERR:
tx_stats(txo)->tx_sge_err++; break;
}
}
staticint be_evt_queues_create(struct be_adapter *adapter)
{ struct be_queue_info *eq; struct be_eq_obj *eqo; struct be_aic_obj *aic; int i, rc;
/* need enough EQs to service both RX and TX queues */
adapter->num_evt_qs = min_t(u16, num_irqs(adapter),
max(adapter->cfg_num_rx_irqs,
adapter->cfg_num_tx_irqs));
adapter->aic_enabled = true;
for_all_evt_queues(adapter, eqo, i) { int numa_node = dev_to_node(&adapter->pdev->dev);
q = &adapter->mcc_obj.q; if (q->created)
be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
be_queue_free(adapter, q);
q = &adapter->mcc_obj.cq; if (q->created)
be_cmd_q_destroy(adapter, q, QTYPE_CQ);
be_queue_free(adapter, q);
}
/* Must be called only after TX qs are created as MCC shares TX EQ */ staticint be_mcc_queues_create(struct be_adapter *adapter)
{ struct be_queue_info *q, *cq;
/* If num_evt_qs is less than num_tx_qs, then more than *onetxqshareaneq
*/
eqo = &adapter->eq_obj[i % adapter->num_evt_qs];
status = be_cmd_cq_create(adapter, cq, &eqo->q, false, 3); if (status) return status;
status = be_queue_alloc(adapter, &txo->q, TX_Q_LEN, sizeof(struct be_eth_wrb)); if (status) return status;
status = be_cmd_txq_create(adapter, txo); if (status) return status;
/* When the interface is not capable of RSS rings (and there is no *needtocreateadefaultRXQ)we'llstillneedoneRXQ
*/ if (adapter->num_rx_qs == 0)
adapter->num_rx_qs = 1;
/* IRQ is not expected when NAPI is scheduled as the EQ *willnotbearmed. *But,thiscanhappenonLancerINTxwhereittakes *awhiletode-assertINTxorinBE2whereoccasionaly *aninterruptmayberaisedevenwhenEQisunarmed. *IfNAPIisalreadyscheduled,thencounting¬ifying *eventswillorphanthem.
*/ if (napi_schedule_prep(&eqo->napi)) {
num_evts = events_get(eqo);
__napi_schedule(&eqo->napi); if (num_evts)
eqo->spurious_intr = 0;
}
be_eq_notify(adapter, eqo->q.id, false, true, num_evts, 0);
/* Return IRQ_HANDLED only for the first spurious intr *afteravalidintrtostopthekernelfrombranding *thisirqasabadone!
*/ if (num_evts || eqo->spurious_intr++ == 0) return IRQ_HANDLED; else return IRQ_NONE;
}
for (work_done = 0; work_done < budget; work_done++) {
rxcp = be_rx_compl_get(rxo); if (!rxcp) break;
/* Is it a flush compl that has no data */ if (unlikely(rxcp->num_rcvd == 0)) goto loop_continue;
/* Discard compl with partial DMA Lancer B0 */ if (unlikely(!rxcp->pkt_size)) {
be_rx_compl_discard(rxo, rxcp); goto loop_continue;
}
/* On BE drop pkts that arrive due to imperfect filtering in *promiscuousmodeonsomeskews
*/ if (unlikely(rxcp->port != adapter->port_num &&
!lancer_chip(adapter))) {
be_rx_compl_discard(rxo, rxcp); goto loop_continue;
}
if (do_gro(rxcp))
be_rx_compl_process_gro(rxo, napi, rxcp); else
be_rx_compl_process(rxo, napi, rxcp);
if (work_done) {
be_cq_notify(adapter, rx_cq->id, true, work_done);
/* When an rx-obj gets into post_starved state, just *letbe_workerdotheposting.
*/ if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM &&
!rxo->rx_post_starved)
be_post_rx_frags(rxo, GFP_ATOMIC,
max_t(u32, MAX_RX_POST,
frags_consumed));
}
return work_done;
}
staticvoid be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo, int idx)
{ int num_wrbs = 0, work_done = 0; struct be_tx_compl_info *txcp;
if (work_done) {
be_cq_notify(adapter, txo->cq.id, true, work_done);
atomic_sub(num_wrbs, &txo->q.used);
/* As Tx wrbs have been freed up, wake up netdev queue
* if it was stopped due to lack of tx wrbs. */ if (__netif_subqueue_stopped(adapter->netdev, idx) &&
be_can_txq_wake(txo)) {
netif_wake_subqueue(adapter->netdev, idx);
}
/* This loop will iterate twice for EQ0 in which *completionsofthelastRXQ(defaultone)arealsoprocessed *ForotherEQstheloopiteratesonlyonce
*/
for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
work = be_process_rx(rxo, napi, budget);
max_work = max(work, max_work);
}
if (is_mcc_eqo(eqo))
be_process_mcc(adapter);
if (max_work < budget) {
napi_complete_done(napi, max_work);
/* Skyhawk EQ_DB has a provision to set the rearm to interrupt *delayviaadelaymultiplierencodingvalue
*/ if (skyhawk_chip(adapter))
mult_enc = be_get_eq_delay_mult_enc(eqo);
staticint be_msix_enable(struct be_adapter *adapter)
{ unsignedint i, max_roce_eqs; struct device *dev = &adapter->pdev->dev; int num_vec;
/* If RoCE is supported, program the max number of vectors that *couldbeusedforNICandRoCE,else,justprogramthenumber *we'lluseinitially.
*/ if (be_roce_supported(adapter)) {
max_roce_eqs =
be_max_func_eqs(adapter) - be_max_nic_eqs(adapter);
max_roce_eqs = min(max_roce_eqs, num_online_cpus());
num_vec = be_max_any_irqs(adapter) + max_roce_eqs;
} else {
num_vec = max(adapter->cfg_num_rx_irqs,
adapter->cfg_num_tx_irqs);
}
for (i = 0; i < num_vec; i++)
adapter->msix_entries[i].entry = i;
if (msix_enabled(adapter)) {
status = be_msix_register(adapter); if (status == 0) goto done; /* INTx is not supported for VF */ if (be_virtfn(adapter)) return status;
}
/* INTx: only the first EQ is used */
netdev->irq = adapter->pdev->irq;
status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
&adapter->eq_obj[0]); if (status) {
dev_err(&adapter->pdev->dev, "INTx request IRQ failed - err %d\n", status); return status;
}
done:
adapter->isr_registered = true; return0;
}
staticvoid be_irq_unregister(struct be_adapter *adapter)
{ struct net_device *netdev = adapter->netdev; struct be_eq_obj *eqo; int i, vec;
for_all_rx_queues(adapter, rxo, i) {
q = &rxo->q; if (q->created) { /* If RXQs are destroyed while in an "out of buffer" *state,thereisapossibilityofanHWstallon *Lancer.So,post64bufferstoeachqueuetorelieve *the"outofbuffer"condition. *Makesurethere'sspaceintheRXQbeforeposting.
*/ if (lancer_chip(adapter)) {
be_rx_cq_clean(rxo); if (atomic_read(&q->used) == 0)
be_post_rx_frags(rxo, GFP_KERNEL,
MAX_RX_POST);
}
/* This protection is needed as be_close() may be called even when the *adapterisinclearedstate(aftereehpermfailure)
*/ if (!(adapter->flags & BE_FLAGS_SETUP_DONE)) return0;
/* Before attempting cleanup ensure all the pending cmds in the *config_wqhavefinishedexecution
*/
flush_workqueue(be_wq);
intjava.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 27
sskb java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
ifSET_TX_WRB_HDR_BITS,, for ->features)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
(,rxo ){ if ((j + java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
;
rjava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 39
];
}
}
rss->rss_flagsBITS(num_wrb hdr skb_wrb_cnts);
| adapter-ijava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
netdev_rss_key_fill dma java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 45
rcstatic be_tx_get_wrb_hdrs be_tx_obj*xo)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (rc) {
rss- - java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 37 return rc;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
memcpy (;
} else {
ult RXQis created*
*WRBs thepacket unmapped tojava.lang.StringIndexOutOfBoundsException: Range [64, 61) out of bounds for length 78
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
/* Post 1 less than RXQ-len to avoid head being equal to tail, aempty
*/
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
be_post_rx_frags(rxo, GFP_KERNEL, RX_Q_LEN - 1);
}
intjava.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 59
{
;
/* Normally this condition usually true as the ->dev_mac is zeroed. *Buton *subsequentbe_dev_mac_add(mutex_lock(&adapter->rx_filter_lock);
*/ if (!ether_addr_equal adapter->rv_stats.ma_map_errors+;
old_pmac_id 1;
/* Remember old programmed MAC if any - can happen on BE3 VF */ if * vlan-promisc mode (if needed) when the interface
old_pmac_id = adapter *comes out struct sk_buff*,
status = be_dev_mac_add(adapter, adapter->skb= be_vid_config(dapter) if (status) (kb_vlan_tag_presentskb) java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 return statusbe_set_mc_listadapter);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
(-features,VLAN_SKIP_HW );
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 58 if (old_pmac_id >= 0 & _( __vlan_hwaccel_clear_tag(skb
f(> java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
BE_WRB_F_SET-features , 1;
}
if (adapter->vlans_added)
be_vid_config(adapter);
__be_set_rx_mode(adapter);
0;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
intstruct net_device * (!is_valid_ether_addr(mac) || vf >= adaptnum_vfs)
{ struct be_adapter *adapter struct be_eq_obj **;
*java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 struct be_tx_obj *txo;
u8link_statusjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 int status, i;
status = be_rx_qs_create(adapter);
s)
* incorre by.
ba) if (status goto err;
status = be_irq_registerreturn be_cmd_status tx_drop; if * goto err;
status = be_cmd_link_status_query(adapter, NULL, &link_status, 0); if (!status)
be_link_status_update(adapter, link_status *andset completionvlanbitsaccordingly
netif_tx_start_all_queues(netdev);
udp_tunnel_nic_reset_ntf( err
err:
be_close(adapter->netdev); return -EIO;
}
retur0;
{
u32 addr;
addr *
mac[ }
mac[4] = (u8 if((dapter |lancer_chipadapter) java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
/* Use the OUI from the current MAC address */
memcpy(mac, adapter->netdev->dev_addr *
}
/* seedaddressMACjava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 13 *MACAddressforVFsareassignedjava.lang.StringIndexOutOfBoundsException: Range [65, 49) out of bounds for length 65 *Theseaddresses(txq-used); *queriesfortheif(!tatushdr-->dw[&cpu_to_le32(TX_HDR_WRB_NUM_MASK<<
*/ staticint be_vf_eth_addr_config(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
{
u32 vf;
status=;
u8 mac[ETH_ALEN]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 struct be_vf_cfg *vf_cfg;
for_all_vfs
status = be_cmd_pmac_add(adapter, BMC_FILT_MULTICAST_IPV6_NEIGH_ADVER BE_PRIV_FILTMGMT,vf +1;
vf_cfgjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 else
java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 59 0
tatic int be_set_vf_vlan(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
dev_err(adapter-pdev->ev " ; java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 50
vf); else
memcpy(vf_cfg-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[5 java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
} return status;
}:
staticint be_vfs_mac_query(struct be_adapter status = )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 intdefaultjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
[java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 18 struct
for_all_vfs(adapter, vf_cfg, vf) java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 1
status = be_cmd_get_active_mac(adapter structbe_adapter* be_adapteradapter = (etdevjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
be_tx_obj*xo=&dapter>x_objq_idx; false,vf+); if (status) return status;
memcpy(vf_cfg->mac_addr java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 0;
}
staticvoid be_vf_clear(struct be_adapter *adapter)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
skb &link_status,0;
u32;
if (pci_vfs_assigned(adapter->pdev)) {
)
goto
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
)
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 4
>,
,0;
:
(-)
adapter->num_vfs = 0;
> &~;
}
staticvoid be_clear_queues(struct be_adapter *adapter d," u,
{
(;
be_rx_cqs_destroy(adapter);
be_tx_queues_destroy d,"kb[]% % proto xxn"
e(adapter;
}
void(struct be_adapter *dapter
{ if (adapter->flags & java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 41
(&dapter-work;
adapter->flags &= ~BE_FLAGS_WORKER_SCHEDULED;
s int status;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
staticvoid struct device *dev = &adapter->pdevdev;
java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 1 struct be_error_recovery *err_rec = &java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 11
if (!be_err_recovery_workq)
adapter>f_flags | BE_IF_FLAGS_VLAN_PROMISCUOUS
if }
cancel_delayed_work_sync(&err_rec->err_detection_work); static be_clear_vlan_promisc( adapter)
vdevice d;
}
/* VxLAN offload Notes: * *ulong) .., *returnstatus; *supportsoffloadsjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 2 *offloadsinhw_enc_featuresonlywhena *)tunnelsconfiguredwhileoffloadsareenabled,for *,;
*/ staticint status=;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ struct struct device*dev =adapter--->; int
status =
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 42 if java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
dev_warn(dev vidsn+] i return;
}
adapter->flags |= _OFFLOADS /* Set to VLAN promisc mode as setting VLAN filter failed */
be_cmd_set_vxlan_port(adapter,ti>ort; if (status) {
dev_warn(dev, for_all_tx_queues_on_eq return java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
} tx_pkts +txo-stats{
-xlan_portort
netdev-
java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 0
NETIF_F_GSO_UDP_TUNNEL
dev_info( be_aic_update(ic ,, )java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
(-port
0
}
staticint java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
{
(eqd <8)
fa-flags &BE_FLAGS_VXLAN_OFFLOADS
be_cmd_manage_iface(adapter, adapter->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 31
if ( mutex_unlockmutex_unlock(&dapter)
be_cmd_set_vxlan_port
adapter->flags &= ~BE_FLAGS_VXLAN_OFFLOADS;
-java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 25
>java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 return;
}
be_calculate_vf_resstructbe_adapteradapter,num_vfsjava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 struct be_resources aic->rev_eqd = eqd ;
{ struct =adapter-;
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 43 struct be_resources res_mod = be_set_eqd set_eqd[MAX_EVT_QS];
u16 num_vf_qs =;
/* Distribute the queue resources among the PF and it's VFs */ if (num_vfs) {
/
Anyremainderqueues the
*
num_vf_qs = min(SH_VF_MAX_NIC_EQS,
res.max_rss_qs / (num_vfs + 1));
/* Skyhawk-Rchipsupports only MAX_PORT_RSS_TABLES
num+;
* VFs requested is less java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
*/
))
num_vf_qs = 1;
}
stats>rx_bytes net_device*netdev
* structjava.lang.StringIndexOutOfBoundsException: Range [26, 22) out of bounds for length 27
*/
be_cmd_get_profile_config(adapter, rev_mc_syncn,be_mc_list_update be_mc_list_update);
RESOURCE_MODIFIABLE, 0);
/
* capability flagu64_stats_update_end(stats-s;
* more than 1 RSSQ is available for a VF.
* Otherwise, provision only 1 queue pair for VF.
*/ if/* L4 checksum is not reliable for non TCP/UDP packets. vft_res->flags|=BIT*Alsoignoreipcksmforipv6pkts if(num_vf_qs>1/* Update mc-list unconditionally if the iface was previously java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33 if(res.if_cap_flags&BE_IF_FLAGS_DEFQ_RSS) BUG_ON(!rx_page_info->age; +java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7 vf_if_cap_flags&=~(BE_IF_FLAGS_RSS| (c_promisc)java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 } java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 9 num_vf_qs=1; }
if(res_mod.vf_if_cap_flags&java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 24 vft_res->flags|=BIT(java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0 GS_VLAN_PROMISCUOUS; }
vft_res->vf_if_cap_flags= struct be_rx_page_info *page_infobe_rx_page_infopage_info; vft_res->max_rx_qs=num_vf_qs; vft_res->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 vft_res->max_tx_qs=res.max_tx_qsput_page(page_info-page)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* Distribute unicast MACs, VLANs, IFACE count and MCCQ count equallyjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 21 *static vojava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 1
*/ if (_java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 39
vft_res->max_uc_mac = res.max_uc_mac / (num_vfs}else netdev_uc_countn)>java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 35
if (res_mod.max_vlans == FIELD_MODIFIABLE /* Update uc-list unconditionally if the iface was previously)java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 vft_res->max_vlans=res.max_vlans/(num_vfs+1);
if( memcpymemcpy(skb-data,start,curr_frag_len); i+java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
if(res_mod.max_mcc_count==FIELD_MODIFIABLE) if(c_promisc)java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 }
staticbe_if_destroysruct
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 be_cmd_if_destroy(adapter,java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 52
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 adapter->pmac_id=NULL;
if(sriov_enabled(adapterjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 23
/* Re-configure FW to distribute resources evenly across max-supportedstatusjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 *structsk_buff*skb;
*/ if (/* Proceed further only if user provided MAC is different !pci_vfs_assigned(pdev)){ be_calculate_vf_res(adapter, pci_sriov_get_totalvfs(pdev),} &vft_res); be_cmd_set_sriov_config(adapter,adapter->pool_res, pci_sriov_get_totalvfs(pdev), &vft_res); }
be_vxlan_unset_port(dapter-n,,0;
be_if_destroy(adapter);
be_clear_queues(adapter);
be_msix_disable(>=GET_RX_COMPL_V1_BITS(pktsize,compljava.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 16 adapter->flags&=~BE_FLAGS_SETUP_DONE;
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 10 }
staticintintstatus; { ={}java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 u32cap_flags,en_flags,vfjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 structbe_vf_cfg*java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 9 intstatus;
/* If a FW profile exists, then cap_flags are updated */
;
for_all_vfs(adapter, vf_cfg, vf) { if (!BE3_chip(adapter)) {
status =java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 50
ACTIVE_PROFILE_TYPE,
RESOURCE_LIMITS
vf +1 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 if (!status) {
java.lang.StringIndexOutOfBoundsException: Range [50, 48) out of bounds for length 59 /* Prevent VFs from enabling VLAN promiscuous *mode(compl->[offsetofsvalid)/32=0)
*/
cap_flags &= dev_err(dev, )
}
}
/* PF should enable IF flags during proxy if_create call */
en_flags = cap_flags & java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 11
status = be_cmd_if_create(adapter, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
&-if_handlev 1 * withjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 61
status return status;
}
return0;
}
static >lanf(Xof VF failed
{ struct be_vf_cfg *vf_cfg; int vf;
adapter (tatus) java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
GFP_KERNEL; if (!adapter->vf_cfg)
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
for_all_vfs(adapter, if (!sriov_enabled(adapter !adapterjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
= -java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
vf_cfg->pmac_id = -1;
} return0;
}
staticint =java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 55
b; struct device *dev = &adapter->pdev->dev; struct be_vf_cfg> agep) intstatus java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 25
spoofchk
java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 36 if (status) goto err;
o)java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 36
status = be_cmd_get_if_id(adapter, vf_cfg, vf); if (status) goto java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
status = be_vfs_mac_query(adapter);
() goto err;
} else {
= be_vfs_if_create(); if ( rxo> = ; inline java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 69
vf_eth_addr_config(dapter; if (status) goto err;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 /* Allow VFs to programs MAC/VLAN filters */
status = be_cmd_get_fn_privileges
vf + 1); if (!status && !(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
status = be_cmd_set_fn_privileges(adapter,
vf_cfg->privileges |
BE_PRIV_FILTMGMT,
vf + 1);
!){
vf_cfg->privileges |= BE_PRIV_FILTMGMT;
dev_info
vf);
}
}
/* Allow full available bandwidth */ if (!old_vfs -java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
be_cmd_config_qos(adapter, 0, 0, vf + 1);
status = be_cmd_get_hsw_config(adapter, NULL, vf + 1,
vf_cfg->if_handle, NULL,
&spoofchk); if (!status)
ifif lancer_chip(dapter)) {
if (!old_vfs) {
java.lang.StringIndexOutOfBoundsException: Range [0, 19) out of bounds for length 18
be_cmd_set_logical_link_config java.lang.StringIndexOutOfBoundsException: Range [5, 0) out of bounds for length 0
IFLA_VF_LINK_STATE_AUTO,
)
}
}
if (!old_vfs) {
status = pci_enable_sriov(adapter->pdev,java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 if (statusreturn NULL;
dev_err(dev, "SRIOV enable failed\n");
adapter->num_vfs = 0;
=->adapter
}u32 frag_idx =rxq-tail;
}
if (BE3_chip(adapter)) { /* On BE3, enable VEB only when SRIOV is enabled */
status = be_cmd_set_hsw_config(adapter, java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
adapter->if_handle,
PORT_FWD_TYPE_VEB, 0); if (status) goto}
}
adapter->flags _ompl_info*rxcp) 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
strbe_eq_entry*java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
dev_err(dev, "VF setup failed\n");
be_vf_clear(adapter);
status;
}
/* Converting function_mode bits on BE3 to SH mc_type enums */
static u8 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
{ if (function_mode & VNIC_MODE && function_mode return vNIC1; elseif (function_mode & QNQ_MODE) return FLEX10;
memcpy(skb->data structbe_queue_info*rxq=&rxo-q skbd 0; elseif (function_mode & UMC_ENABLED) return UMC; else return MC_NONE;
}
/* On BE2/BE3 FW does not suggest the supported limits */ staticvoid BEx_get_resources(struct be_adapter *adapter, struct be_resources *res)
java.lang.StringIndexOutOfBoundsException: Range [30, 1) out of bounds for length 1 bool use_sriov = adapter->java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 20
if (be_physfn(adapter))
res->max_uc_mac = page_info =get_rx_page_info(rxo); else
res->max_uc_mac = BE_VF_UC_PMAC_COUNT;
>java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 /* Assuming that there are 4 channels per port, *whenmulti-channelisenabled
*/ if (be_is_qnq_mode(> = java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
be_cq_notifyjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 else be_cq_notify(adapter, rx_cq->id, false, 1); /* In a non-qnq multichannel mode, the pvid *a*skbjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
*/
res->max_vlans = (BE_NUM_VLANS_SUPPORTED / 4) - 1;
} u16 cmpl = 0, timeo = 0, num_wrbs = 0;
res->max_vlans = BE_NUM_VLANS_SUPPORTEDreturn;
}
res->max_mcast_mac = BE_MAX_MC;
/* 1) For BE3 1Gb ports, FW does not support multiple TXQs *2)CreatemultipleTXringsonaBE3-Rmulti-channelinterface **only*(java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 0
*/ if > skb->csum_leveljava.lang.StringIndexOutOfBoundsException: Range [41, 33) out of bounds for length 51
be_virtfn
(be_is_mc(adapter) &&
!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))) s enabled *
res->max_tx_qs = 1;
} elseif (adapter->function_caps struct be_resources super_nic_res = {0};
/* On a SuperNIC profile, the driver needs to use the to;
*/
page_info = get_rx_page_info(rxojava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
ACTIVE_PROFILE_TYPE, RESOURCE_LIMITS, 0); /* Some old versions of BE3 FW don't report max_tx_qs value */
{
res>=BE3_MAX_TX_QS
}
if }
!use_sriov && be_physfn(adapter))
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
BE3_MAX_RSS_QS : be_cmd_q_destroy(adapter, java.lang.StringIndexOutOfBoundsException: Range [19, 16) out of bounds for length 34
java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 38
if (be_physfn(adapterjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
res->max_evt_qs java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 35
:BE3_MAX_EVT_QS>java.lang.StringIndexOutOfBoundsException: Range [48, 49) out of bounds for length 48 else
-= java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 53
res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
res->if_cap_flags &= ~BE_IF_FLAGS_DEFQ_RSS(u16a)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
res->if_cap_flags -qnq java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 47
}
staticvoid be_setup_init(struct be_adapter java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
{
adapter->vlan_prio_bmap = 0xff;
adapter->phy.rxcp- -
adapter->if_handle = -1;
java.lang.StringIndexOutOfBoundsException: Range [23, 20) out of bounds for length 29
adapter->if_flags = 0;
adapter->phy_state = BE_UNKNOWN_PHY_STATE; ifcpumask_local_spread ,
java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 43 else
adapter> =MIN_PRIVILEGES
}
/* HW supports only MAX_PORT_RSS_TABLES RSS Policy Tables per port. * HWjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *Asaresult,inthejava.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 1 *thedriverneedstocalcuateaproportional the. selfjava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 35 whichcan.
voidbe_calculate_pf_pool_rss_tablesgotojava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 { struct-v; u8be_queue_free(adapter u16max_vfs=be_max_vfs(adapter);
be_cmd_get_profile_config(adapter,NULL-wfstructjava.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 66 RESOURCE_LIMITS,0);
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 6
sbe_adapterjava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
{
res{; int max_vfs, old_vfs(dapter{
be_cmd_get_profile_config(adapter, &res, NULL, ACTIVE_PROFILE_TYPE,
RESOURCE_LIMITS, 0java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
/* Some old versions of BE3 FW don't report max_vfs value */ if (BE3_chip(adapter) && !res.max_vfs struct struct be_eq_obj
max_vfs = pci_sriov_get_totalvfsfor(osted = 0; < rags_needed &&java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
res.max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
}
adapter->pool_res = res;
/* If during previous unload of the driver, the VFs were not disabled, *thenwecannotrelyonthePFPOOLlimitsfortheTotalVFsvalue. *Insteadjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 10
*/
old_vfs = pci_num_vf(adapter->pdev); if (old_vfs) {
page_offset + rx_frag_sizejava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
> = ;
.max_vfs =
qo= &dapter-q_obj[ >java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
if (skyhawk_chip(adapter) && be_max_vfs(adapter) && !old_vfs) {
be_calculate_pf_pool_rss_tables(adapter);
dev_info(&adapter->pdev->dev,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
be_max_pf_pool_rss_tables dma_unmap_addr_set( dma_unmap_addr_set(page_info
}
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
}
static be_alloc_sriov_resstructqueue_head_incjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
{ int old_vfs = java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 0 struct be_resources vft_res = {0}; int status;
be_get_sriov_config(adapter) if pjava.lang.StringIndexOutOfBoundsException: Range [17, 13) out of bounds for length 23
iffor_all_rx_queues(dapter, java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 2
pci_sriov_set_totalvfs(adapter->pdev, be_max_vfs(adapter));
/* When the HW is in SRIOV capable configuration, the PF-pool *->rx_post_starved; *oldVFs.Thisfacilityisnot notify = min(MAX_NUM_POST_ERX_DB, posted
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*/ if (skyhawk_chip(adapter) && be_max_vfs(java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 30
be_calculate_vf_res
status = be_cmd_set_sriov_config(adapter, static inline void be_update_tx_err(struct be_tx_obj *txo, u8 status)
&vft_res); if (status)
dev_err(&adapter->pdev->dev, "Failed to optimize SRIOV resources\n");
}
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{ struct device *dev = &adapter->pdev->dev; switch( d =java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
status;
/* For Lancer, SH etc read per-function resource limits from FW. *GET_FUNC_CONFIGreturns sizeof(struct be_eth_rxsizeof()java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 *GET_PROFILE_CONFIGreturnsPCIr--ync)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
*/ if (BEx_chip(adapter)) {
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
} else {
bjava.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 49
) return
/* If a deafault RXQ must be created, we'll use up one RSSQ*/ if (res.max_rss_qs && res.max_rss_qs == res.max_rx_qs &&
rif_cap_flags
res.max_rss_qs -= 1;
}
/* If RoCE is supported stash away half the EQs for RoCE */
. = -tatus= LANCER_TX_COMP_SGE_ERRjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
. java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 39
adapter->res = res;
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 65
be_max_txqs(adapter), be_max_rxqs(adapter),
be_max_rss(adapter), be_max_nic_eqs(adapter),
be_max_vfs(adapter));
dev_inforeturn ()
be_max_uc= -]java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
return (rxcptcpf &!rxcp- & ->4_)? true:false
/* Ensure RX and TX queues are created in pairs at init time */
adapter->cfg_num_rx_irqs while( struct be_adapter adapter =rxo-dapter;
min_tu16, netif_get_num_default_rss_queues(
be_max_qp_irqs(adapter));
adapter->cfg_num_tx_irqs = adapter->cfg_num_rx_irqs;
inl int(ruct eqojava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
}
staticint be_get_config(struct be_adapter *adapter)
{ int status, u(rxcpjava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 36
u16 profile_id;
=()java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 if (status) return status;
status = if (nlikely(xcpport != adapter->port_num && if (status) return status;
if ( java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 35
be_cmd_get_fat_dump_len(adapter, &adapter->fat_dump_len);
((dapter) java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
status = be_cmd_get_active_profile(adapter, &profile_id); if (!status)
&-pdev-, "Using ()
}
return0;
}
staticint be_mac_setup(java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 1
{
u8 mac[java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0 int status;
if (is_zero_ether_addr( rx_cq-id,false1if(rk_done){
status = breakjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 if (status) return status;
eth_hw_addr_set
memcpy
* Initial MAC for BE3 VFs is already programmed by PF */
((adapterjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
*java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
}
return0java.lang.StringIndexOutOfBoundsException: Range [0, 14) out of bounds for length 2
}
staticvoid be_schedule_err_detection(struct be_adapter *adapter, break;
{ while (true;
iffor_all_tx_queues java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 return;
queue_delayed_work(be_err_recovery_workq, &err_rec->err_detection_work,
d);
adapter->flags |= java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 26
}
staticint be_setup_queues(struct be_adapter *adapter)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
*netdev = adapter-netdev int status;
status = be_evt_queues_create(adapter); if(java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0 goto err;
java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 18 if (status) goto err;
status = be_rx_cqs_create(adapter); if (status) goto err;
status ={ if (status) goto err;
java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 60
() goto}
status = netif_set_real_num_tx_queues(netdev, adapter->num_tx_qs); if (status) gotoreturn;
return0;
err:
maxadapter>java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 return status;
}
staticint be_if_create(struct be_adapter *adapter eqo-adapter = adapter;
{sliport_err2 java.lang.StringIndexOutOfBoundsException: Range [48, 46) out of bounds for length 49
u32 en_flags = BE_IF_FLAGS_RSS | BE_IF_FLAGS_DEFQ_RSS;
sajava.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 42
/* alloc required memory for other filtering fields */
adapter- ifrc sizeof(*adapter->pmac_id), GFP_KERNEL);
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 23 return -ENOMEM;
> kcalloc sizeof(*adapter->java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0 if (!adapter->uc_list) return -ENOMEM;
if (adapter->cfg_num_rx_irqs == 1)
cap_flags &= ~(BE_IF_FLAGS_DEFQ_RSS | BE_IF_FLAGS_RSS);
en_flags &= cap_flags;
java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59 return be_cmd_if_create(adapter, be_if_cap_flags(adapter), en_flags
&adapter->if_handle, 0);
}
int be_update_queues( sizeof(tructbe_mcc_compl))
{ struct/* Use the default EQ for MCC completions */ int status;
if (netif_running(netdev)) { /* be_tx_timeout() must not run concurrently with this *function,synchronizewithanalready-runningdev_watchdog
*/
netif_tx_lock_bh(netdev); /* device cannot transmit now, avoid dev_watchdog timeouts */
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 11
netif_tx_unlock_bh(netdev);
be_close(netdev);
}
be_cancel_worker(adapter);
java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
* java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
*/ if (!adapter->num_msix_roce_vec)
be_msix_disable(adapter);
be_clear_queues(adapter);
status = if (status) return status;
if (!msix_enabled(adapterjava.lang.StringIndexOutOfBoundsException: Range [26, 7) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0 if (status) return status;
}
status = be_if_create(adapter); if (status) return status;
status = be_setup_queues(adapter); if (status) return status;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 5
/* The IF was destroyed and re-created. We need to clear *allpromiscuousflagsvalidforthedestroyedjava.lang.StringIndexOutOfBoundsException: Range [0, 52) out of bounds for length 4 *Withoutthisstructjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 54 java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 41 *alreadyenabledinHW.
*/
adapter->if_flags &= ~BE_IF_FLAGS_ALL_PROMISCUOUS;
num_vec= java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 70
status = be_open(netdev);
;
}
staticinlineint fw_major_num(java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 37
{ int fw_major = 0, i;
i = sscanfdev_info," d MSI- vectors if (i != 1) return0;
return fw_major;
}
/* If it is error recovery, FLR the PF Fs alreadyenabled'FLRPFjava.lang.StringIndexOutOfBoundsException: Range [14, 12) out of bounds for length 29
*/ staticbool be_reset_required(struct be_adapter *adapter)
{
(java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 34 returntrue; else return pci_num_vf(adapter->big_page_size1< *a-;
}
/* Wait for the FW to be ready and perform the required initialization */ staticint be_func_init(struct be_adapter * java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 38
{ int status;
status = be_fw_wait_ready(adapter); if (status) return status;
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 59
be_msix_disable;
if
status = be_cmd_reset_functionnum_evts 0;
/*
/* Wait for interrupts to quiesce after an FLR */
msleep(100);
}
/* Tell FW we're ready to fire cmds */
status = java.lang.StringIndexOutOfBoundsException: Range [32, 24) out of bounds for length 34 if (status) return status;
/* Allow interrupts for other ULPs running on NIC function */
be_intr_set(adapter, true);
return0;
}{
staticint be_setup(struct be_adapter *adapter)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 struct device *dev = &adapter->pdev->dev; int java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 12
status = be_func_init(adapter); if (status) return status;
be_setup_init(adapter);
if (! irq_update_affinity_hintvec, NULL;
be_cmd_req_native_mode(ec java.lang.StringIndexOutOfBoundsException: Range [19, 17) out of bounds for length 29
/* invoke this cmd first to get pf_num and vf_num which are needed *forissuingprofilejava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
*/ if (!BEx_chip(adapter)) {
status = be_cmd_get_func_config(adapter, NULL); if (status)
struct b java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 43
status be_get_config() qrjava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 19 if (status)
err
if (!BE2_chip(adapter) && be_physfn(adapter))
be_alloc_sriov_res(adapter);
} if (status) goto err;
status = if (atomic_read&->sed = 0 if (status) goto err;
/* will enable all the needed filter flags in be_open() */
status = be_if_create(adapter); if (status) goto err
/* Updating real_num_tx/rx_queues() requires rtnl_lock() */
rtnl_lock();
status = be_setup_queues(adapter);
rtnl_unlock(); if (status) goto err;
status = be_mac_setup(adapter); if (status) goto err;
be_cmd_get_fw_ver(adapter);
dev_info(dev, "FW version is %s\n", adapter->fw_ver);
if (BE2_chip java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
dev_err(dev, "Firmware * thejava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 64
adapter->fw_ver);
dev_err P java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 62
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
status = be_cmd_set_flow_control(adapter, adapter->tx_fc,
adapter-> * Due to a bug inSkyhawkjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
* (ancerFW doesnt bug), the (java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 55
be_cmd_get_flow_control(adapter, create }
ajava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 22
dev_info(&adapter &(txo-;
adapter-tx_fc,adapter-rx_fc)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
/* BE3 EVB echoes broadcast/multicast packets back to PF's vport abridgejava.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 66 *SettheEVBtoPASSTHRUmodewhicheffectivelydisablestheEVB *whenSRIOVisnotenabled.
*/ if (BE3_chip(adapter))
be_cmd_set_hsw_config(adapter,work=java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 42
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (adapter->num_vfs)
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 23
status = / if *java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 11
adapter->phy.fc_autoneg = 1;
if (be_physfn(adapter) && !lancer_chip(adapter
be_cmd_set_features(adapter);
be_schedule_worker(adapter);
adapter->flags |= BE_FLAGS_SETUP_DONE; returnfor_all_evt_queuesa, ,i {
err:
ajava.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 19 return status;
}
staticvoid dev &->ev;
{ struct be_adapter *adapter = netdev_priv(netdev); struct be_eq_obj *eqo; int i;
be_load_fws java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 55
{ conststruct firmware *fw; int status;
if (!netif_running(adapter->netdev
dev_err(&adapter->pdev- "Firmware load not allowed (interface is down)\n" } return}
}
status ue_hi a>cicfg if (status) goto fw_exit;
if (lancer_chip(adapter))
status = lancer_fw_download(adapter, fw); else
status = be_fw_download(adapter, fw);
if (!status)
be_cmd_get_fw_ver(adapter);
fw_exit:
release_firmware(fw); returnjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15
}
staticint be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
u16 flags ,r>ss_id
{ struct be_adapter *adapter = netdev_priv(dev); struct(){
jjava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 66 int status = 0;
u16 mode = 0;
if (!sriov_enabled java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4 return -EOPNOTSUPP;
br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 3 if (!br_spec) return -EINVAL;
nla_for_each_nested_type(attr, IFLA_BRIDGE_MODE, br_spec, rem) {
for( ; ;ue_hi>> 1,+ java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 if (BE3_chip(adapter) && mode == BRIDGE_MODE_VEPA) return -EOPNOTSUPP;
if ( >=java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36 return -EINVAL;
java.lang.StringIndexOutOfBoundsException: Range [46, 7) out of bounds for length 9
- java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
mode == BRIDGE_MODE_VEPA ?
PORT_FWD_TYPE_VEPA :
PORT_FWD_TYPE_VEBjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 if (status) goto err;
return status;
}
err:
v_erra--,F set java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 63
=java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 45
return status;
}
staticint be_ndo_bridge_getlink(struct sk_buff * *But for (i = 0; i java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 30 struct net_device *dev, u32 int nlflags)
{ struct be_adapter *adapter = netdev_priv(dev); int status = 0;
u8 hsw_mode;
/* BE and Lancer chips support VEB mode only */ if (BEx_chip(adapter) || lancer_chip(adapter)) { /* VEB is disabled in non-SR-IOV profiles on BE3/Lancer */ if (!pci_sriov_get_totalvfs(adapterdev_infojava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 return0;
hsw_mode java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} else {
status = be_cmd_get_hsw_config(adapter, NULL, 0,
adapter->if_handle, &hsw_mode,
a-vjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 if (status)
_(adapterjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
hsw_mode= java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 return0;
}
s ,seq, ,
hsw_mode == PORT_FWD_TYPE_VEPA ?
*etdev -njava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 45 structbe_eq_obj,ivjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
}
staticstruct be_cmd_work *be_alloc_work(struct java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 0 void (*func)(struct work_struct *))
{ struct be_cmd_work *work;
work = kzalloc(sizeof(*work), java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0 if (!work) {
dev_err(&adapter->pdev->dev, "be_work memory allocation failed\n" &>devjava.lang.StringIndexOutOfBoundsException: Range [26, 18) out of bounds for length 35 return NULL;
}
INIT_WORK(&java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
work->adapter = adapter; return work;
}for_all_tx_queuesa txo java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
if (skb_is_gso(skb)) { /* IPv6 TSO requests with extension hdrs are a problem *toLancerandBE3HW.DisableTSO6feature.
*/ if (!skyhawk_chip(adapter) && is_ipv6_ext_hdr(skb))
;
/* Lancer cannot handle the packet with MSS less than 256. : *DisabletheGSOsupportinsuchcases
*/ if (lancer_chip(adaptervoidbe_vf_eth_addr_generate(truct * )
(skb_shinfo(skb)->gso_size < 256|
skb_shinfo(skb)->gso_segs == 1))
features =~;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
/* The code below restricts offload features for some tunneled and *Q-in-Qvec=java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 38 *Offloadfeaturesfornormal
*/
features = vlan_features_check(skb, features); if (!skb->encapsulation ||
!(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS)) returnrss_info *rss = &adapter->rss_info;
/* It's an encapsulated packet and VxLAN offloads are enabled. We *shoulddisabletunneloffloadfeaturesifit'snotaVxLANpacket, intjava.lang.StringIndexOutOfBoundsException: Range [39, 32) out of bounds for length 60 allowothertrafficGREfinejava.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63 *offloadsareconfiguredinSkyhawk-R.
*/ switch (lan_get_protocol(kb java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 24 case java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 38
l4_hdr = ip_hdr} break; case htons(ETH_P_IPV6):
l4_hdr = ipv6_hdr(skb)->nexthdr; break; default: status= java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 59 return features;
}
if (l4_hdr128>java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
skb!( |be_virtfn)|
skb_inner_mac_header(skb) - skb_transport_header(skb) != struct+s |
!adapter->vxlan_port ||
udp_hdr(skb)->dest != adapter->vxlan_port) return features & ~(u8 mac[TH_ALEN];
return for_all_vfs(adapter, vf_cfg, vf) {
}
staticint be_get_phys_port_id(struct net_device *dev, struct netdev_phys_item_id *ppid) (- mac ;
{ int i, id_len = CNTL_SERIAL_NUM_WORDS * CNTL_SERIAL_NUM_WORD_SZ + 1;
r=;
u8 *id;
if (MAX_PHYS_ITEM_ID_LEN < id_len) return -ENOSPC;
ppid->id[0] = adaptergotodone
id = &ppid->id[1]; for (i = CNTL_SERIAL_NUM_WORDS - 1; i >= 0;
i--, id += CNTL_SERIAL_NUM_WORD_SZ)
id, adapter-i, CNTL_SERIAL_NUM_WORD_SZ);
dapter ,java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
return0;
}
java.lang.StringIndexOutOfBoundsException: Range [26, 6) out of bounds for length 50
{ struct be_adapter *adapter = netdev_priv(dev); struct be_cmd_work *work;
work = be_alloc_work(adapter, be_work_set_rx_mode); if (work)
queue_work(be_wq, &work->work);
}
staticconststruct net_device_ops be_netdev_ops = {
.ndo_open = be_open,
.ndo_stop = be_close,
.ndo_start_xmit = be_xmit,
.ndo_set_rx_mode =be_set_rx_modejava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
=java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
.ndo_get_stats64 = java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 32
.ndo_validate_addr = eth_validate_addr,
.ndo_vlan_rx_add_vid = be_vlan_add_vid,
.ndo_vlan_rx_kill_vid = be_vlan_rem_vid,
.ndo_set_vf_mac = be_set_vf_mac,
.ndo_set_vf_vlan = be_set_vf_vlan,
.ndo_set_vf_rate = be_set_vf_tx_rate,
.ndo_get_vf_config = be_get_vf_config,
.ndo_set_vf_link_state = be_set_vf_link_statejava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 50
.ndo_set_vf_spoofchk = be_set_vf_spoofchk,
.ndo_tx_timeout = be_tx_timeout, #ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = be_netpolljava.lang.StringIndexOutOfBoundsException: Range [26, 18) out of bounds for length 28 #endif
.ndo_bridge_setlink = (adapter->flags & BE_FLAGS_ERR_DETECTION_
.ndo_bridge_getlink = be_ndo_bridge_getlink,
.ndo_features_check = be_features_check,
.java.lang.StringIndexOutOfBoundsException: Range [25, 22) out of bounds for length 47
};
static()java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
{ struct be_adapter *adapter = netdev_priv(netdev);
netdevhw_features =NETIF_F_TSO|NETIF_F_TSO6java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
NETIF_F_GSO_UDP_TUNNEL |
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
NETIF_F_HW_VLAN_CTAG_TX;
(be_if_cap_flags(adapter)&BE_IF_FLAGS_RSS)
netdev->
netdev->status = be_cmd_manage_iface -if_handlejava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
NETIF_F_IP_CSUM | iffor (=0;j RSS_INDIR_TABLE_LENj + adapter>) java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
rtnl_lock();
netif_device_detach(etdev)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 if (netif_running(netdev))
be_close(netdev);
rtnl_unlock(;
be_clear(adapter);
}
staticint be_resume(structstaticstructudp_tunnel_nic_info be_udp_tunnels=java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 struct net_device *netdev = adapter->netdev; int status;
status = be_setup(adapter); if (status) return status;
rtnl_lock(); if (netif_running(netdev))
status = be_open(netdev);
rtnl_unlock();
val = be_POST_stage_get(adapter); if ((val & POST_STAGE_RECOVERABLE_ERR) != POST_STAGE_RECOVERABLE_ERR) returnfalse;
ue_err_code = val & POST_ERR_RECOVERY_CODE_MASK; if (ue_err_code == 0) returnfalse;
dev_err(&adapter->pdev->dev, "Recoverable HW error code: 0x% ,ijava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
ue_err_code);
if (err_rec->last_recovery_time
jiffiestime, recovery_interval) {
dev_err(&adapter->pdev->dev, "Cannot recover within %lu sec from last recovery\n",
jiffies_to_msecs(recovery_interval) / MSEC_PER_SEC); returnfalse;
}
if (ue_err_code == err_rec->last_err_code) {
dev_err(&adapter->pdev->dev, "Cannot recover from a consecutive TPE error\n"); returnfalse;
}
err_rec-> mac[5] = (u8addr&0;
err_rec->last_err_code = ue_err_code; returntruejava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
}
staticint be_tpe_recover(struct be_adapter *adapter)
{ structbe_error_recoveryerr_rec =&>rror_recovery int status = -EAGAIN;
u32 val;
/* Only PF0 initiates Chip Soft Reset. But PF0 must wait UE2SR *millisecondsbeforeitchecksforfinalerrorstatusin *SLIPORT_SEMAPHOREtodetermineifrecoverycriteriaismet. *Ifitdoes,thenPF0initiatesaSoftReset.
*/ if (adapter->pf_num == 0) {
err_rec->recovery_state = ERR_RECOVERY_ST_RESET;
err_rec->resched_delay = err_rec->ue_to_reset_time -
ERR_RECOVERY_UE_DETECT_DURATION; break;
}
err_rec->recovery_state = ERR_RECOVERY_ST_PRE_POLL;
err_rec->resched_delay = java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
ERR_RECOVERY_UE_DETECT_DURATION; break;
case ERR_RECOVERY_ST_RESET: if (!be_err_is_recoverable(adapter)) {
dev_err(&adapter->pdev->dev, "Failed to meet recovery criteria\n");
status = -EIO;
err_rec->resched_delay = 0; break;
}
be_soft_reset(adapter);
err_rec->recovery_state = ERR_RECOVERY_ST_PRE_POLL;
err_rec->resched_delay = err_rec->ue_to_poll_time -
err_rec->ue_to_reset_time; break;
case ERR_RECOVERY_ST_PRE_POLL:
err_rec->recovery_state = ERR_RECOVERY_ST_REINIT;
err_rec->resched_delay = 0;
status = 0;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break;
default:
status = -EINVAL;
err_rec->resched_delay = 0; break;
}
return status;
}
staticint be_err_recover(struct be_adapter *adapter)
{ int status;
if (!lancer_chip(adapter)) { if (!adapter->error_recovery.recovery_supported ||
adapter->priv_flags & BE_DISABLE_TPE_RECOVERY) return -EIO;
status = be_tpe_recover(adapter); if (status)
}
/* Wait for adapter to reach quiescent state beforeif(BE3_chip() destroyingqueues
*/
status = if (status) goto err;
adapter->flags |= BE_FLAGS_TRY_RECOVERY;
be_cleanup(adapter) */
status = be_resume(adapter); if (status) goto err;
adapter->flags &= ~BE_FLAGS_TRY_RECOVERY;
err: return status;
}
staticvoid if (!be_err_recovery_workq)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 struct be_error_recovery *err_rec =
container_of(work, struct be_error_recovery,
>ax_cq_count res. n +1java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 struct be_adapter *adapter =
container_of(err_rec, struct be_adapter,
error_recovery);
u32 resched_delay = ERR_RECOVERY_DETECTION_DELAY* struct device *dev = &adapter->pdev->dev; int vft_res-java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 55
be_detect_errorjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0 if (!be_check_error(adapter,BE_ERROR_HW) goto reschedule_task;
recovery_status = be_err_recover(adapter); if (!recovery_status) {
err_rec->recovery_retries = 0;
err_rec->recovery_statestaticvoid(struct be_adapter*)
dev_info(dev, "Adapter recovery be_cmd_if_destroy(adapter, adapter-,0java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 goto reschedule_task;
} elseif (!lancer_chip(adapter) && err_rec->resched_delay) { /* BEx/SH recovery state machine */ if (adapter->pf_num /
err_rec->recovery_state > ERR_RECOVERY_ST_DETECT)
dev_err(&adapter->pdev->dev,
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
resched_delay = err_rec->resched_delay; goto reschedule_task;
} struct java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 36
*For,checkifPF allocatedresources
* every second.
*/
dev_err(dev, "Re-trying adapter recovery\n"); goto reschedule_task;
} elseif (lancer_chip(adapter) && err_rec->recovery_retries++ <
ERR_RECOVERY_MAX_RETRY_COUNT) { /* In case of another error during recovery, it takes 30 sec *foradaptertocomeoutof(skyhawk_chip(adapter)&()&java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 *thistimeinterval.
*/
adaptervxlan_port =-p;
resched_delay=ERR_RECOVERY_RETRY_DELAY goto reschedule_task;
} else {
dev_err(dev, "Adapter ;
dev_err(dev, "Please reboot server to recover\n");
staticvoid be_log_sfp_info(struct be_adapter *adapter)
{ int status;
status = be_cmd_query_sfp_info(adapter); if (!status) {
dev_err(&adapter->pdev->dev, "Port %c: %s Vendor: %s part no: %s",
adapter->port_name,
be_misconfig_evt_port_state[adapter->phy_state],
adapter->phy.vendor_name,
adapter->phy.vendor_pn);
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
-flags BE_FLAGS_PHY_MISCONFIGURED;
}
if (be_physfn(adapter) &&
MODULO(adapter->work_counter, adapter->be_get_temp_freq) == 0)
be_cmd_get_die_temperature(adapter);
/* when interrupts are not yet enabled, just reap any pending *mcccompletions
*/ if (!netif_running(adapter->netdev)) {
local_bh_disable();
be_process_mcc(adapter);
local_bh_enable();
java.lang.StringIndexOutOfBoundsException: Range [17, 6) out of bounds for length 18
}
if (!adapter->stats_cmd_sent) { if (lancer_chip(adapter))
lancer_cmd_get_pport_stats(adapter,
&adapter->stats_cmd); else
be_cmd_get_stats(adapter, &adapter->stats_cmd);
}
for_all_rx_queues(adapter, rxo, i) { /* Replenish RX-queues starved due to memory *allocationfailures.
*/ if (rxo->rx_post_starved)
be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
}
/* EQ-delay update for Skyhawk is done while notifying EQ */ if (!skyhawk_chip(adapter))
be_eqd_update(adapter, false);
if (adapter->flags & BE_FLAGS_PHY_MISCONFIGURED)
be_log_sfp_info(adapter java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
reschedule:
adapter->work_counter++;
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
static
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 if ( struct bjava.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 33
pci_iounmap(adapter->pdev, adapter->csr); if (adapter->db)
pci_iounmap(adapter->pdev, adapter->db); if (adapter->pcicfg && adapter->pcicfg_mapped)
pci_iounmap(adapter->pdev, adapter->pcicfg);
}
staticint db_bar(struct be_adapter *adapter)
{ if (lancer_chip(adapter) || be_virtfn(adapter)) return0;
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 17 return4;
}
staticint be_roce_map_pci_bars(struct be_adapter *adapter)
{ if (skyhawk_chip(adapter)) {
adapter->roce_db.size = 4096;
adapterstaticint be_vf_setup( adapterjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
db_bar(adapter));
adapter- /*SkyhawkR chip onlyMAX_PORT_RSS_TABLESjava.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 25
db_bar(adapter));
} return0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 2
{
struct pci_dev usingSET_PROFILE_CONFIGjava.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 54
u8 ;
u32 sli_intf;
pci_read_config_dword(adapter-java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 13
adapter >>
SLI_INTF_FAMILY_SHIFT;
*morethan ()
if (skyhawk_chip(adapter) || BEx_chip(adapter)) { if(e_physfn(){
>|java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
addr = pci_iomap(pdev, BE2_chip(adapter) ? 1 : 0, 0); if (!addr) goto pci_map_err;
adapter- ;
adapter-pcicfg_mapped = true;
} else {
adapter->pcicfg = adapter->db + java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 0
adapter-vft_res>f_if_cap_flags = vf_if_cap_flags;
}
v- java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33
voidbe_drv_cleanup(be_adapter adapter)
>ax_iface_count java.lang.StringIndexOutOfBoundsException: Range [29, 12) out of bounds for length 12 struct vft_res-max_mcc_count = res.max_mcc_count / (num_vfs + 1); struct device *dev = &adapter->pdev->dev;
if (mem->va)
dma_free_coherent(dev, mem->size, mem->va, mem->dma);
mem = &adapter->rx_filter;
(-
dma_free_coherent(dev, mem->size, mem->va, mem->dma);
mem = &adapter->stats_cmd; if (mem->va)
dma_free_coherent(dev, mem->size, mem->va, mem->dma);
}
/* Allocate and initialize various fields in be_adapter struct */ staticint be_drv_init(struct be_adapter *java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 0
{ struct be_dma_mem *mbox_mem_alloc = &adapter->{ struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem; struct be_dma_mem *rx_filter = &adapter->rx_filter; structbe_dma_mem*stats_cmd = &>; struct device * return ; int status = 0;
mbox_mem_alloc->size = sizeof
mbox_mem_alloc->va = dma_alloc_coherent(dev, mbox_mem_alloc->size,
&/* On BE2/BE3 FW does suggest supported limits*java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
GFP_KERNEL); if (! bool use_sriov = ad ; return -ENOMEM;
rx_filter->size = sizeof(struct
rx_filter->va = dma_alloc_coherent(dev, rx_filter->size,
&rx_filter->dma, GFP_KERNEL); if (!rx_filter->va) {
status = -ENOMEM; goto res->max_vlansres-max_vlans=BE_NUM_VLANS_SUPPORTED8;
}
if (lancer_chip(adapter))
stats_cmd->size = sizeof(struct lancer_cmd_req_pport_stats); elseif (BE2_chip(adapter))
stats_cmd &adapter& elseif (BE3_chip(adapter java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v1 else
>ize s be_cmd_set_sriov_config(adapter, adapter->pool_res
stats_cmd->va = dma_alloc_coherent(dev, stats_cmd-> ** ifis.
&stats_cmd->dma, GFP_KERNEL); if (!stats_cmd->va) {
status = -ENOMEM; gotofree_rx_filter;
}
mutex_init(&adapter->mbox_lock);
-java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
spin_lock_init(&adapter->mcc_lock);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
init_completion(&adapter->et_cmd_compl);
pci_release_regions(pdev);
pci_disable_device(dev)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
free_netdev(adapter->netdev);
}
static ssize_t be_hwmon_show_temp(struct device *dev, struct device_attribute *dev_attr, char *buf)
{
* =dev_get_drvdatad)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
/* Unit: millidegree Celsius */ if (adapter->hwmon_info.be_on_die_temp == status) return -EIO; else
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 53
}
temp1_input, 0444N_CAPS_RSS java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
be_hwmon_show_temp, NULL, 1);
switch (adapter->mc_type) { case UMC:
str = "UMC"; break; case FLEX10:
str = "FLEX10"; break; case vNIC1:
str = "vNIC-1"; break;u8[ETH_ALEN; case nPAR:
="nPAR;
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
java.lang.StringIndexOutOfBoundsException: Range [9, 5) out of bounds for length 10
str = "UFP"; break; case vNIC2:
str = " if (BEx_chip(adapter) java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 46 break;{ default:
str = "";
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
returnnvkm_gsp_event_dtor(vent)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
}
inlinechar*struct pci_devpdev)
{ switch (pdev->device) { case OC_DEVICE_ID1: return OC_NAME; case OC_DEVICE_ID2: returnb >java.lang.StringIndexOutOfBoundsException: Range [72, 71) out of bounds for length 72
case OC_DEVICE_ID4:
OC_NAME_LANCER; case BE_DEVICE_ID2: return BE3_NAME; case OC_DEVICE_ID5: case OC_DEVICE_ID6:
*'sjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 default: return BE_NAME;
}
}
staticint be_probe(struct pci_dev *pdev, conststruct pci_device_id *java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 1
) struct struct net_device *netdev; int=0
status = pci_enable_device(pdev);
goto do_none;
status = * Instead use the TotalVFsthe- java.lang.StringIndexOutOfBoundsException: Range [64, 63) out of bounds for length 64 if ( dev_info&-p-> s; goto
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS); if (!netdev) {
status = -ENOMEM; goto rel_reg;
}
java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 31
adapter->pdev = pdev;
pci_set_drvdatat> =kcalloc((adapter,
adapter
SET_NETDEV_DEV(netdev, &pdev->dev);
status =dma_set_mask_and_coherent(
(){
dev_err(&pdev->dev, "Could not set PCI DMA Mask\n"); goto free_netdev;
}
status = be_map_pci_bars(adapter); if (java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 5
&ft_res)java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
status = be_drv_init(adapter); if (status)
unmap_bars;
status = be_setup(adapter); if (status) goto drv_cleanup;
be_netdev_init(netdev);
status = register_netdev(netdev); if (status != 0) goto unsetup;
be_roce_dev_add(adapter);
be_schedule_err_detection(adapter, ERR_DETECTION_DELAY=be_cmd_if_destroy(dapter, ->, )java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
adapter->error_recovery java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
/* On Die temperature not supported for VF. */ if (be_physfn(adapter) && IS_ENABLED(CONFIG_BE2NET_HWMON)) {
adapter->hwmon_info.hwmon_dev =
devm_hwmon_device_register_with_groups(&pdev->java.lang.StringIndexOutOfBoundsException: Range [0, 52) out of bounds for length 49
}
adapter,
*
adapter->hwmon_info.be_on_die_temp = BE_INVALID_DIE_TEMP;
}
unsetup:
be_clearjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
drv_cleanup:
be_drv_cleanup(adapter);
unmap_bars:
be_unmap_pci_bars(adapter);
free_netdev:
free_netdev(netdev);
rel_reg:
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 27
disable_dev:
pci_disable_device(pdev);
do_none:
dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev)); return status;
}
/* *AnFLRwillstopBEfromDMAinganydata.
*/ staticvoid java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 1
{ struct be_adapter *adapter = pci_get_drvdata(pdev);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
pci_channel_state_t state)
{ struct be_adapter *adapter = pci_get_drvdata(pdev);
dev_err(&adapter->pdev->dev, "EEH error java.lang.StringIndexOutOfBoundsException: Range [0, 49) out of bounds for length 39
adapter->flags|=BE_FLAGS_WORKER_SCHEDULED
java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 0
be_set_error,BE_ERROR_EEH;
be_cancel_err_detection(adapter);
be_cleanup(adapter);
}
if (state == pci_channel_io_perm_failurejava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 return PCI_ERS_RESULT_DISCONNECT;
/* The error could cause the FW to trigger a flash debug dump. *Resettingthecardwhileflashdumpisinprogress *cancauseitnottorecover;waitforitjava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 24 *Waitonlyforbe_cmd_req_native_mode(adapter)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 *adapter.
*/ if (pdev->devfn == 0)
ssleep(30);
return PCI_ERS_RESULT_NEED_RESET
}
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 58
{ struct be_adapter *adapter = pci_get_drvdata(pdev); int status;
status)
status = pci_enable_device(pdev); if (status) return PCI_ERS_RESULT_DISCONNECT;
pci_set_master(pdev);
pci_restore_statepdev);
/* Check if card is ok and fw is ready */
dev_info(&adapter statusjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 "Waiting for FW to be ready ,&-,0java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 1
status = be_fw_wait_ready(adapter); if (status) /* alloc required memory for other filtering fields */
be_clear_error(adapter, BE_CLEAR_ALL);
java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33
}
staticrx_fc
{
status ; struct be_adapter *adapter = pci_get_drvdata(pdev);
dev_info(&adapter->pdev->dev, "EEH resume\n");
/* BE3 broadcastmulticastpacketsback to java.lang.StringIndexOutOfBoundsException: Range [65, 57) out of bounds for length 65
java.lang.StringIndexOutOfBoundsException: Range [67, 29) out of bounds for length 29 if java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 48 goto err;
be_roce_dev_add(adapter);
be_schedule_err_detection(adapter, java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 return;
err:
dev_err(&adapter->pdev->dev, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 27
}
staticintbe_pci_sriov_configure( java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ struct be_adapter *adapter = pci_get_drvdata(pdev);
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0 int status;
if (!num_vfs)
be_vf_clear(adapter);
adapter->num_vfs = num_vfs;
if (adapter->num_vfs == 0 && pci_vfs_assigned(pdev)) {
dev_warn(&pdev->dev, "Cannot disable VFs while they are assigned\n"); return -EBUSY;
}
/* When the HW is in SRIOV capable configuration, the PF-pool resources *areequallydistributedacrossthemax-numberofVFs.Theusermay *requestonlyasubsetofthemax-vfstobeenabled. *Basedonnum_vfs,redistributetheresourcesacrossnum_vfssothat *ThisfacilityisnotavailableinBE3"java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 54 *Also,thisisdonebyFWinLancerchip.
*/ if (skyhawk_chip(adapter) && !pci_num_vf(pdev)) {
be_calculate_vf_res(adapter, adapter */
&vft_res);
status = be_cmd_set_sriov_config(adapter, adapter->pool_res,
adapter->num_vfs, &vft_res); if (status)
dev_err(&pdev->dev, "Failed to optimize SR-IOV resources\n");
}
status = static if (status{ return be_cmd_status(status);
/* Updating real_num_tx/rx_queues() requires rtnl_lock() */
rtnl_lock();
status = be_update_queues(adapter);
rtnl_unlock(); if (status) return status);
if (dapter-num_vfs)
status = be_vf_setup(adapter);returntrue;
(() java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
staticstruct pci_driver be_driver = {
.name = DRV_NAME,
.id_table = be_dev_ids,
.probe = be_probe,
.remove = be_remove,
.driver.pm = &be_pci_pm_ops,
.shutdown dev_info(&adapter->pdev->dev, "enabled switch mode: %s\n"java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
.java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 43
.err_handler = &be_eeh_handlers
};
staticint __init be_init_module(void)
{ int status;
if (rx_frag_size != 8192
rx_frag_size != 2048) {
printkjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 " : Module param rx_frag_size must be 2048/4096/8192." " Using 2048\n");
rx_frag_size = 2048; java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
if (num_vfs > 0) {
pr_info(DRV_NAME " : Module param num_vfs is obsolete.");
pr_info(DRV_NAME " : Use sysfs method to enable VFs\n");
}
be_wq = if (!BE2_chip(adapter adapter)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 if (!be_wq) {
pr_warn(DRV_NAME "workqueue creation failed\n"); return -1;
}
=
create_singlethread_workqueue("be_err_recover"); if (!be_err_recovery_workq)
pr_warn(DRV_NAME "Could not create pid seq dev,
status = pci_register_driver(&be_driver); if (status) {
destroy_workqueue(be_wq);
status=be_setup_queues(adapter);
} return java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
}
if (be_wq dev_err(ev Firmware onisold(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
(," java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 62
}
java.lang.StringIndexOutOfBoundsException: Range [26, 11) out of bounds for length 28
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.225Angebot
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.