/* * Mausezahn - A fast versatile traffic generator * Copyright (C) 2008-2010 Herbert Haas * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses/gpl-2.0.html * */ #include "mz.h" #include "mops.h" // Remove 802.1Q tags from packet mp // // k indicates which tag to be removed (1..n) // k=0 means: remove all tags! // // RETURN VALUE: 1 upon failure, 0 upon success int mops_dot1Q_remove (struct mops *mp, int k) { int a,b,n; if (k==0) { mp->dot1Q_s=0; mp->use_dot1Q=0; return 0; } n = mp->dot1Q_s/4; // n = total number of tags if (k>n) return 1; if (k==1) { // only delete the single tag mp->dot1Q_s=0; mp->use_dot1Q=0; return 0; } // we have more than one tag: // if (k==n) { // remove last tag (of several) mp->dot1Q_s -=4; return 0; } // remove some non-ending tag: 0, 1, 2, 3 a = (k-1)*4; // target b = k*4; // source (what should be copied) memcpy(&mp->dot1Q[a], &mp->dot1Q[b], (n-k)*4); mp->dot1Q_s -=4; return 0; } // Unset CFI in tag k where k=1..n int mops_dot1Q_nocfi (struct mops *mp, int k) { int n; n = mp->dot1Q_s/4; // n = total number of tags if (k>n) return 1; mp->dot1Q[((k-1)*4)+2] &=0xef; // unset CFI (0xef = 1110 1111) return 0; } // Set CFI in tag k where k=1..n int mops_dot1Q_cfi (struct mops *mp, int k) { int n; n = mp->dot1Q_s/4; // n = total number of tags if (k>n) return 1; mp->dot1Q[((k-1)*4)+2] |=0x10; // set CFI (0x10 = 0001 0000) return 0; } // Assign 802.1Q tag with // v ... VLAN // c ... CoS // i ... tag position (starting from zero!) // // m ... modification: 1 = dot1Q_s is not changed // // NOTE: // When called from for-loop to add all tags the total size dot1Q_s // is updated continuously, therefore use m=1. // // But when changing a particular tag within an existing 802.1Q stack // the total number of tags does not change, therefore use m=0. // // RETURN VALUE: 0 upon success, 1 upon failure // int mops_dot1Q (struct mops *mp, int i, int m, u_int16_t v, u_int16_t c) { u_int8_t *ptr, c8; if (i>=MAX_MOPS_DOT1Q_TAGS) return 1; // max number of tags, see definitions in mops.h if ((v>4095)||(c>7)) return 1; // greater values do not make sense // Format: 0x8100 CoS-CFI-VLAN // where c=CoS, v=VLAN c8 = (u_int8_t) c; mp->dot1Q[4*i+0]= 0x81; mp->dot1Q[4*i+1]= 0x00; ptr = (u_int8_t*) &v; mp->dot1Q[4*i+3]=*ptr; mp->dot1Q[4*i+2]=*(ptr+1); mp->dot1Q[4*i+2]^= (c8 << 5); if (m) { mp->dot1Q_s=4*(1+i); // NOTE: dot1Q_s = current tag position + 1 if (mp->dot1Q_s) mp->use_dot1Q = 1; } return 0; } next.git/commit/net/atm?h=nds-private-remove&id=030305d69fc6963c16003f50d7e8d74b02d0a143'>atm/mpc.h
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2017-01-27 15:00:45 -0600
committerBjorn Helgaas <bhelgaas@google.com>2017-01-27 15:00:45 -0600
commit030305d69fc6963c16003f50d7e8d74b02d0a143 (patch)
tree363a4e34d199178769b7e7eeb26ea2620a55847b /net/atm/mpc.h
parent4d191b1b63c209e37bf27938ef365244d3c41084 (diff)
PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies
In a struct pcie_link_state, link->root points to the pcie_link_state of the root of the PCIe hierarchy. For the topmost link, this points to itself (link->root = link). For others, we copy the pointer from the parent (link->root = link->parent->root). Previously we recognized that Root Ports originated PCIe hierarchies, but we treated PCI/PCI-X to PCIe Bridges as being in the middle of the hierarchy, and when we tried to copy the pointer from link->parent->root, there was no parent, and we dereferenced a NULL pointer: BUG: unable to handle kernel NULL pointer dereference at 0000000000000090 IP: [<ffffffff9e424350>] pcie_aspm_init_link_state+0x170/0x820 Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just like Root Ports do, so link->root for these devices should also point to itself. Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges") Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411 Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181 Tested-by: lists@ssl-mail.com Tested-by: Jayachandran C. <jnair@caviumnetworks.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> CC: stable@vger.kernel.org # v4.2+
Diffstat (limited to 'net/atm/mpc.h')
cess does not try to coredump and result in an attempt to read the memory again from within kernel space. Although there is a HV call to scrub the memory (mem_scrub), there is no easy way to guarantee that the real memory address(es) are not used by other tasks. Clearing the error with mem_scrub would zero the memory and cause the other processes to proceed with bad data. The handling of other non-resumable errors remain unchanged and will cause a panic. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi/drm/armada_drm.h')