10 Jul, 2013

2 commits

  • Pull networking updates from David Miller:
    "This is a re-do of the net-next pull request for the current merge
    window. The only difference from the one I made the other day is that
    this has Eliezer's interface renames and the timeout handling changes
    made based upon your feedback, as well as a few bug fixes that have
    trickeled in.

    Highlights:

    1) Low latency device polling, eliminating the cost of interrupt
    handling and context switches. Allows direct polling of a network
    device from socket operations, such as recvmsg() and poll().

    Currently ixgbe, mlx4, and bnx2x support this feature.

    Full high level description, performance numbers, and design in
    commit 0a4db187a999 ("Merge branch 'll_poll'")

    From Eliezer Tamir.

    2) With the routing cache removed, ip_check_mc_rcu() gets exercised
    more than ever before in the case where we have lots of multicast
    addresses. Use a hash table instead of a simple linked list, from
    Eric Dumazet.

    3) Add driver for Atheros CQA98xx 802.11ac wireless devices, from
    Bartosz Markowski, Janusz Dziedzic, Kalle Valo, Marek Kwaczynski,
    Marek Puzyniak, Michal Kazior, and Sujith Manoharan.

    4) Support reporting the TUN device persist flag to userspace, from
    Pavel Emelyanov.

    5) Allow controlling network device VF link state using netlink, from
    Rony Efraim.

    6) Support GRE tunneling in openvswitch, from Pravin B Shelar.

    7) Adjust SOCK_MIN_RCVBUF and SOCK_MIN_SNDBUF for modern times, from
    Daniel Borkmann and Eric Dumazet.

    8) Allow controlling of TCP quickack behavior on a per-route basis,
    from Cong Wang.

    9) Several bug fixes and improvements to vxlan from Stephen
    Hemminger, Pravin B Shelar, and Mike Rapoport. In particular,
    support receiving on multiple UDP ports.

    10) Major cleanups, particular in the area of debugging and cookie
    lifetime handline, to the SCTP protocol code. From Daniel
    Borkmann.

    11) Allow packets to cross network namespaces when traversing tunnel
    devices. From Nicolas Dichtel.

    12) Allow monitoring netlink traffic via AF_PACKET sockets, in a
    manner akin to how we monitor real network traffic via ptype_all.
    From Daniel Borkmann.

    13) Several bug fixes and improvements for the new alx device driver,
    from Johannes Berg.

    14) Fix scalability issues in the netem packet scheduler's time queue,
    by using an rbtree. From Eric Dumazet.

    15) Several bug fixes in TCP loss recovery handling, from Yuchung
    Cheng.

    16) Add support for GSO segmentation of MPLS packets, from Simon
    Horman.

    17) Make network notifiers have a real data type for the opaque
    pointer that's passed into them. Use this to properly handle
    network device flag changes in arp_netdev_event(). From Jiri
    Pirko and Timo Teräs.

    18) Convert several drivers over to module_pci_driver(), from Peter
    Huewe.

    19) tcp_fixup_rcvbuf() can loop 500 times over loopback, just use a
    O(1) calculation instead. From Eric Dumazet.

    20) Support setting of explicit tunnel peer addresses in ipv6, just
    like ipv4. From Nicolas Dichtel.

    21) Protect x86 BPF JIT against spraying attacks, from Eric Dumazet.

    22) Prevent a single high rate flow from overruning an individual cpu
    during RX packet processing via selective flow shedding. From
    Willem de Bruijn.

    23) Don't use spinlocks in TCP md5 signing fast paths, from Eric
    Dumazet.

    24) Don't just drop GSO packets which are above the TBF scheduler's
    burst limit, chop them up so they are in-bounds instead. Also
    from Eric Dumazet.

    25) VLAN offloads are missed when configured on top of a bridge, fix
    from Vlad Yasevich.

    26) Support IPV6 in ping sockets. From Lorenzo Colitti.

    27) Receive flow steering targets should be updated at poll() time
    too, from David Majnemer.

    28) Fix several corner case regressions in PMTU/redirect handling due
    to the routing cache removal, from Timo Teräs.

    29) We have to be mindful of ipv4 mapped ipv6 sockets in
    upd_v6_push_pending_frames(). From Hannes Frederic Sowa.

    30) Fix L2TP sequence number handling bugs, from James Chapman."

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1214 commits)
    drivers/net: caif: fix wrong rtnl_is_locked() usage
    drivers/net: enic: release rtnl_lock on error-path
    vhost-net: fix use-after-free in vhost_net_flush
    net: mv643xx_eth: do not use port number as platform device id
    net: sctp: confirm route during forward progress
    virtio_net: fix race in RX VQ processing
    virtio: support unlocked queue poll
    net/cadence/macb: fix bug/typo in extracting gem_irq_read_clear bit
    Documentation: Fix references to defunct linux-net@vger.kernel.org
    net/fs: change busy poll time accounting
    net: rename low latency sockets functions to busy poll
    bridge: fix some kernel warning in multicast timer
    sfc: Fix memory leak when discarding scattered packets
    sit: fix tunnel update via netlink
    dt:net:stmmac: Add dt specific phy reset callback support.
    dt:net:stmmac: Add support to dwmac version 3.610 and 3.710
    dt:net:stmmac: Allocate platform data only if its NULL.
    net:stmmac: fix memleak in the open method
    ipv6: rt6_check_neigh should successfully verify neigh if no NUD information are available
    net: ipv6: fix wrong ping_v6_sendmsg return value
    ...

    Linus Torvalds
     
  • linux-net@vger.kernel.org was replaced by netdev@oss.sgi.com was replaced
    by netdev@vger.kernel.org.

    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: David S. Miller

    Geert Uytterhoeven
     

05 Jul, 2013

1 commit

  • Pull trivial tree updates from Jiri Kosina:
    "The usual stuff from trivial tree"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (34 commits)
    treewide: relase -> release
    Documentation/cgroups/memory.txt: fix stat file documentation
    sysctl/net.txt: delete reference to obsolete 2.4.x kernel
    spinlock_api_smp.h: fix preprocessor comments
    treewide: Fix typo in printk
    doc: device tree: clarify stuff in usage-model.txt.
    open firmware: "/aliasas" -> "/aliases"
    md: bcache: Fixed a typo with the word 'arithmetic'
    irq/generic-chip: fix a few kernel-doc entries
    frv: Convert use of typedef ctl_table to struct ctl_table
    sgi: xpc: Convert use of typedef ctl_table to struct ctl_table
    doc: clk: Fix incorrect wording
    Documentation/arm/IXP4xx fix a typo
    Documentation/networking/ieee802154 fix a typo
    Documentation/DocBook/media/v4l fix a typo
    Documentation/video4linux/si476x.txt fix a typo
    Documentation/virtual/kvm/api.txt fix a typo
    Documentation/early-userspace/README fix a typo
    Documentation/video4linux/soc-camera.txt fix a typo
    lguest: fix CONFIG_PAE -> CONFIG_x86_PAE in comment
    ...

    Linus Torvalds
     

04 Jul, 2013

1 commit

  • Conflicts:
    drivers/net/ethernet/freescale/fec_main.c
    drivers/net/ethernet/renesas/sh_eth.c
    net/ipv4/gre.c

    The GRE conflict is between a bug fix (kfree_skb --> kfree_skb_list)
    and the splitting of the gre.c code into seperate files.

    The FEC conflict was two sets of changes adding ethtool support code
    in an "!CONFIG_M5272" CPP protected block.

    Finally the sh_eth.c conflict was between one commit add bits set
    in the .eesr_err_check mask whilst another commit removed the
    .tx_error_check member and assignments.

    Signed-off-by: David S. Miller

    David S. Miller
     

01 Jul, 2013

1 commit

  • Pablo Neira Ayuso says:

    ====================
    The following batch contains Netfilter/IPVS updates for net-next,
    they are:

    * Enforce policy to several nfnetlink subsystem, from Daniel
    Borkmann.

    * Use xt_socket to match the third packet (to perform simplistic
    socket-based stateful filtering), from Eric Dumazet.

    * Avoid large timeout for picked up from the middle TCP flows,
    from Florian Westphal.

    * Exclude IPVS from struct net if IPVS is disabled and removal
    of unnecessary included header file, from JunweiZhang.

    * Release SCTP connection immediately under load, to mimic current
    TCP behaviour, from Julian Anastasov.

    * Replace and enhance SCTP state machine, from Julian Anastasov.

    * Add tweak to reduce sync traffic in the presence of persistence,
    also from Julian Anastasov.

    * Add tweak for the IPVS SH scheduler not to reject connections
    directed to a server, choose a new one instead, from Alexander
    Frolkin.

    * Add support for sloppy TCP and SCTP modes, that creates state
    information on any packet, not only initial handshake packets,
    from Alexander Frolkin.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

26 Jun, 2013

4 commits

  • Add sync_persist_mode flag to reduce sync traffic
    by syncing only persistent templates.

    Signed-off-by: Julian Anastasov
    Tested-by: Aleksey Chudov
    Signed-off-by: Simon Horman

    Julian Anastasov
     
  • Currently, we fail only when all of the ips in arp_ip_target are gone.
    However, in some situations we might need to fail if even one host from
    arp_ip_target becomes unavailable.

    All situations, obviously, rely on the idea that we need *completely*
    functional network, with all interfaces/addresses working correctly.

    One real world example might be:
    vlans on top on bond (hybrid port). If bond and vlans have ips assigned
    and we have their peers monitored via arp_ip_target - in case of switch
    misconfiguration (trunk/access port), slave driver malfunction or
    tagged/untagged traffic dropped on the way - we will be able to switch
    to another slave.

    Though any other configuration needs that if we need to have access to all
    arp_ip_targets.

    This patch adds this possibility by adding a new parameter -
    arp_all_targets (both as a module parameter and as a sysfs knob). It can be
    set to:

    0 or any (the default) - which works exactly as it's working now -
    the slave is up if any of the arp_ip_targets are up.

    1 or all - the slave is up if all of the arp_ip_targets are up.

    This parameter can be changed on the fly (via sysfs), and requires the mode
    to be active-backup and arp_validate to be enabled (it obeys the
    arp_validate config on which slaves to validate).

    Internally it's done through:

    1) Add target_last_arp_rx[BOND_MAX_ARP_TARGETS] array to slave struct. It's
    an array of jiffies, meaning that slave->target_last_arp_rx[i] is the
    last time we've received arp from bond->params.arp_targets[i] on this
    slave.

    2) If we successfully validate an arp from bond->params.arp_targets[i] in
    bond_validate_arp() - update the slave->target_last_arp_rx[i] with the
    current jiffies value.

    3) When getting slave's last_rx via slave_last_rx(), we return the oldest
    time when we've received an arp from any address in
    bond->params.arp_targets[].

    If the value of arp_all_targets == 0 - we still work the same way as
    before.

    Also, update the documentation to reflect the new parameter.

    v3->v4:
    Kill the forgotten rtnl_unlock(), rephrase the documentation part to be
    more clear, don't fail setting arp_all_targets if arp_validate is not set -
    it has no effect anyway but can be easier to set up. Also, print a warning
    if the last arp_ip_target is removed while the arp_interval is on, but not
    the arp_validate.

    v2->v3:
    Use _bh spinlock, remove useless rtnl_lock() and use jiffies for new
    arp_ip_target last arp, instead of slave_last_rx(). On bond_enslave(),
    use the same initialization value for target_last_arp_rx[] as is used
    for the default last_arp_rx, to avoid useless interface flaps.

    Also, instead of failing to remove the last arp_ip_target just print a
    warning - otherwise it might break existing scripts.

    v1->v2:
    Correctly handle adding/removing hosts in arp_ip_target - we need to
    shift/initialize all slave's target_last_arp_rx. Also, don't fail module
    loading on arp_all_targets misconfiguration, just disable it, and some
    minor style fixes.

    Signed-off-by: Veaceslav Falico
    Signed-off-by: David S. Miller

    Veaceslav Falico
     
  • Add some details to bonding documentation on how backup slave arp
    validation works.

    Signed-off-by: Veaceslav Falico
    Signed-off-by: David S. Miller

    Veaceslav Falico
     
  • Cc: Patrick McHardy
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     

24 Jun, 2013

1 commit


13 Jun, 2013

1 commit

  • commit 6648bd7e0e62c0c8c03b (ipv4: Add sysctl knob to control
    early socket demux) introduced such sysctl, but forgot to add
    doc into Documentation/networking/ip-sysctl.txt. This patch adds it.

    Basically I grab the doc from the description of commit 41063e9dd11956f2d285
    (ipv4: Early TCP socket demux.) and the above commit.

    Cc: Eric Dumazet
    Cc: Alexander Duyck
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     

08 Jun, 2013

2 commits


05 Jun, 2013

1 commit


28 May, 2013

3 commits


24 May, 2013

1 commit


25 Apr, 2013

1 commit


20 Apr, 2013

1 commit


09 Apr, 2013

2 commits

  • This patch reviews the driver documentation file;
    for example, there were some new fields (in the driver
    module parameter section) and the ptp files were
    not documented.

    Signed-off-by: Giuseppe Cavallaro
    Signed-off-by: David S. Miller

    Giuseppe CAVALLARO
     
  • Check for NULL before calling the following operations from "struct
    ieee802154_mlme_ops": assoc_req, assoc_resp, disassoc_req, start_req,
    and scan_req.

    This fixes a current oops where those functions are called but not
    implemented. It also updates the documentation to clarify that they
    are now optional by design. If a call to an unimplemented function
    is attempted, the kernel returns EOPNOTSUPP via netlink.

    The following operations are still required: get_phy, get_pan_id,
    get_short_addr, and get_dsn.

    Note that the places where this patch changes the initialization
    of "ret" should not affect the rest of the code since "ret" was
    always set (again) before returning its value.

    Signed-off-by: Werner Almesberger
    Signed-off-by: David S. Miller

    Werner Almesberger
     

31 Mar, 2013

1 commit

  • Lost in space for a long time, but it finally came back to us from
    some ancient code tombs. This patch adds a minimal runnable example
    of Linux' packet mmap(2) from Chetan Loke's TPACKET_V3. Special
    thanks to David S. Miller, and also Eric Leblond and Victor Julien!

    Cc: Eric Leblond
    Cc: Victor Julien
    Signed-off-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Daniel Borkmann
     

27 Mar, 2013

1 commit


21 Mar, 2013

3 commits

  • This patch implements F-RTO (foward RTO recovery):

    When the first retransmission after timeout is acknowledged, F-RTO
    sends new data instead of old data. If the next ACK acknowledges
    some never-retransmitted data, then the timeout was spurious and the
    congestion state is reverted. Otherwise if the next ACK selectively
    acknowledges the new data, then the timeout was genuine and the
    loss recovery continues. This idea applies to recurring timeouts
    as well. While F-RTO sends different data during timeout recovery,
    it does not (and should not) change the congestion control.

    The implementaion follows the three steps of SACK enhanced algorithm
    (section 3) in RFC5682. Step 1 is in tcp_enter_loss(). Step 2 and
    3 are in tcp_process_loss(). The basic version is not supported
    because SACK enhanced version also works for non-SACK connections.

    The new implementation is functionally in parity with the old F-RTO
    implementation except the one case where it increases undo events:
    In addition to the RFC algorithm, a spurious timeout may be detected
    without sending data in step 2, as long as the SACK confirms not
    all the original data are dropped. When this happens, the sender
    will undo the cwnd and perhaps enter fast recovery instead. This
    additional check increases the F-RTO undo events by 5x compared
    to the prior implementation on Google Web servers, since the sender
    often does not have new data to send for HTTP.

    Note F-RTO may detect spurious timeout before Eifel with timestamps
    does so.

    Signed-off-by: Yuchung Cheng
    Acked-by: Eric Dumazet
    Acked-by: Neal Cardwell
    Signed-off-by: David S. Miller

    Yuchung Cheng
     
  • The patch series refactor the F-RTO feature (RFC4138/5682).

    This is to simplify the loss recovery processing. Existing F-RTO
    was developed during the experimental stage (RFC4138) and has
    many experimental features. It takes a separate code path from
    the traditional timeout processing by overloading CA_Disorder
    instead of using CA_Loss state. This complicates CA_Disorder state
    handling because it's also used for handling dubious ACKs and undos.
    While the algorithm in the RFC does not change the congestion control,
    the implementation intercepts congestion control in various places
    (e.g., frto_cwnd in tcp_ack()).

    The new code implements newer F-RTO RFC5682 using CA_Loss processing
    path. F-RTO becomes a small extension in the timeout processing
    and interfaces with congestion control and Eifel undo modules.
    It lets congestion control (module) determines how many to send
    independently. F-RTO only chooses what to send in order to detect
    spurious retranmission. If timeout is found spurious it invokes
    existing Eifel undo algorithms like DSACK or TCP timestamp based
    detection.

    The first patch removes all F-RTO code except the sysctl_tcp_frto is
    left for the new implementation. Since CA_EVENT_FRTO is removed, TCP
    westwood now computes ssthresh on regular timeout CA_EVENT_LOSS event.

    Signed-off-by: Yuchung Cheng
    Acked-by: Neal Cardwell
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Yuchung Cheng
     
  • Pull in the 'net' tree to get Daniel Borkmann's flow dissector
    infrastructure change.

    Signed-off-by: David S. Miller

    David S. Miller
     

19 Mar, 2013

1 commit

  • Dmitry Akindinov is reporting for a problem where SYNs are looping
    between the master and backup server when the backup server is used as
    real server in DR mode and has IPVS rules to function as director.

    Even when the backup function is enabled we continue to forward
    traffic and schedule new connections when the current master is using
    the backup server as real server. While this is not a problem for NAT,
    for DR and TUN method the backup server can not determine if a request
    comes from client or from director.

    To avoid such loops add new sysctl flag backup_only. It can be needed
    for DR/TUN setups that do not need backup and director function at the
    same time. When the backup function is enabled we stop any forwarding
    and pass the traffic to the local stack (real server mode). The flag
    disables the director function when the backup function is enabled.

    For setups that enable backup function for some virtual services and
    director function for other virtual services there should be another
    more complex solution to support DR/TUN mode, may be to assign
    per-virtual service syncid value, so that we can differentiate the
    requests.

    Reported-by: Dmitry Akindinov
    Tested-by: German Myzovsky
    Signed-off-by: Julian Anastasov
    Signed-off-by: Simon Horman

    Julian Anastasov
     

18 Mar, 2013

1 commit

  • TCPCT uses option-number 253, reserved for experimental use and should
    not be used in production environments.
    Further, TCPCT does not fully implement RFC 6013.

    As a nice side-effect, removing TCPCT increases TCP's performance for
    very short flows:

    Doing an apache-benchmark with -c 100 -n 100000, sending HTTP-requests
    for files of 1KB size.

    before this patch:
    average (among 7 runs) of 20845.5 Requests/Second
    after:
    average (among 7 runs) of 21403.6 Requests/Second

    Signed-off-by: Christoph Paasch
    Signed-off-by: David S. Miller

    Christoph Paasch
     

15 Mar, 2013

1 commit


12 Mar, 2013

1 commit

  • This patch series implement the Tail loss probe (TLP) algorithm described
    in http://tools.ietf.org/html/draft-dukkipati-tcpm-tcp-loss-probe-01. The
    first patch implements the basic algorithm.

    TLP's goal is to reduce tail latency of short transactions. It achieves
    this by converting retransmission timeouts (RTOs) occuring due
    to tail losses (losses at end of transactions) into fast recovery.
    TLP transmits one packet in two round-trips when a connection is in
    Open state and isn't receiving any ACKs. The transmitted packet, aka
    loss probe, can be either new or a retransmission. When there is tail
    loss, the ACK from a loss probe triggers FACK/early-retransmit based
    fast recovery, thus avoiding a costly RTO. In the absence of loss,
    there is no change in the connection state.

    PTO stands for probe timeout. It is a timer event indicating
    that an ACK is overdue and triggers a loss probe packet. The PTO value
    is set to max(2*SRTT, 10ms) and is adjusted to account for delayed
    ACK timer when there is only one oustanding packet.

    TLP Algorithm

    On transmission of new data in Open state:
    -> packets_out > 1: schedule PTO in max(2*SRTT, 10ms).
    -> packets_out == 1: schedule PTO in max(2*RTT, 1.5*RTT + 200ms)
    -> PTO = min(PTO, RTO)

    Conditions for scheduling PTO:
    -> Connection is in Open state.
    -> Connection is either cwnd limited or no new data to send.
    -> Number of probes per tail loss episode is limited to one.
    -> Connection is SACK enabled.

    When PTO fires:
    new_segment_exists:
    -> transmit new segment.
    -> packets_out++. cwnd remains same.

    no_new_packet:
    -> retransmit the last segment.
    Its ACK triggers FACK or early retransmit based recovery.

    ACK path:
    -> rearm RTO at start of ACK processing.
    -> reschedule PTO if need be.

    In addition, the patch includes a small variation to the Early Retransmit
    (ER) algorithm, such that ER and TLP together can in principle recover any
    N-degree of tail loss through fast recovery. TLP is controlled by the same
    sysctl as ER, tcp_early_retrans sysctl.
    tcp_early_retrans==0; disables TLP and ER.
    ==1; enables RFC5827 ER.
    ==2; delayed ER.
    ==3; TLP and delayed ER. [DEFAULT]
    ==4; TLP only.

    The TLP patch series have been extensively tested on Google Web servers.
    It is most effective for short Web trasactions, where it reduced RTOs by 15%
    and improved HTTP response time (average by 6%, 99th percentile by 10%).
    The transmitted probes account for
    Acked-by: Neal Cardwell
    Acked-by: Yuchung Cheng
    Signed-off-by: David S. Miller

    Nandita Dukkipati
     

07 Mar, 2013

1 commit


06 Feb, 2013

1 commit

  • TCP Appropriate Byte Count was added by me, but later disabled.
    There is no point in maintaining it since it is a potential source
    of bugs and Linux already implements other better window protection
    heuristics.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Stephen Hemminger
     

05 Feb, 2013

1 commit


27 Jan, 2013

1 commit

  • Pablo Neira Ayuso says:

    ====================
    This batch contains netfilter updates for you net-next tree, they are:

    * The new connlabel extension for x_tables, that allows us to attach
    labels to each conntrack flow. The kernel implementation uses a
    bitmask and there's a file in user-space that maps the bits with the
    corresponding string for each existing label. By now, you can attach
    up to 128 overlapping labels. From Florian Westphal.

    * A new round of improvements for the netns support for conntrack.
    Gao feng has moved many of the initialization code of each module
    of the netns init path. He also made several code refactoring, that
    code looks cleaner to me now.

    * Added documentation for all possible tweaks for nf_conntrack via
    sysctl, from Jiri Pirko.

    * Cisco 7941/7945 IP phone support for our SIP conntrack helper,
    from Kevin Cernekee.

    * Missing header file in the snmp helper, from Stephen Hemminger.

    * Finally, a couple of fixes to resolve minor issues with these
    changes, from myself.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

23 Jan, 2013

2 commits

  • Paul Gortmaker says:

    ====================
    The Ethernet-HowTo was maintained for roughly 10 years, from 1993 to 2003.
    Fortunately sane hardware probing and auto detection (via PCI and ISA/PnP)
    largely made the document a relic of the past, hence it being abandoned
    a decade ago.

    However, there is one last useful thing that we can extract from the
    effort made in maintaining that document. We can use it to guide us
    with respect to what rare, experimental and/or super ancient 10Mbit
    ISA drivers don't make sense to maintain in-tree anymore.

    Nobody will argue that ISA is obsolete. Availability went away at about
    the time Pentium3 motherboards moved from 500MHz Slot1/SECC processors
    to the green 500MHz Socket 370 Pentium3 chips, at the turn of the century.

    In theory, it is possible that someone could still be running one of these
    12+ year old P3 machines and want 3.9+ bleeding edge kernels (but unlikely).
    In light of the above (remote) possibility, we can defer the removal of some
    ISA network drivers that were highly popular and well tested. Typically
    that means the stuff more from the mid to late '90s, some with ISA PnP
    support, like the 3c509, the wd/SMC 8390 based stuff, PCnet/lance etc.

    But a lot of other drivers, typically from the early 1990s were for rare
    hardware, and experimental (to the point of requiring a cron job that would
    do a test ping, and then ifconfig down/up and/or a rmmod/insmod!). And
    some of these drivers (znet, and lp486e to name two) are physically tied
    to platforms with on motherboard ethernet -- of 486 machines that date
    from the early 1990s and can only have single digit amounts of memory.

    What I'd like to achieve here with this series, is to get rid of those old
    drivers that are no longer being used. In an earlier discussion where
    I'd proposed deleting a single driver, Alan suggested we instead dump
    all the historical stuff in one go, to make it "...immediately obvious
    where the break point is..."[1] and that it was "perfectly reasonable it
    (and a pile of other ISA cards) ought to be shown the door"[2]. So that
    is the goal here - make a clear line in the sand where the really ancient
    stuff finally gets kicked to the curb.

    Two old parallel port drivers are considered for removal here as well,
    since in early 386/486 ISA machines, the parallel port was typically found
    with the UARTS on the multi-I/O ISA controller card. These drivers also date
    from the early 1990's; parallel ports are no longer found on modern boards,
    and their performance was not even capable of 10% of 10Mbit bandwidth.

    Allow me a preemptive justification against the inevitable comments from
    well meaning bystanders who suggest "why not just leave all this alone?".
    Dead drivers cost us all if they are left in tree. If you think that
    is false, then please first consider:

    -every time you type "git status", you are checking to see if modifications
    have been made by you to all that dead code.

    -every time you type "git grep " you are searching through files
    which contain that dead code that simply does not interest you.

    -every time you build a "allyesconfig" and an "allmodconfig" (don't tell
    me you skip this step before submitting your changes to a maintainer),
    you waste CPU cycles building this dead code.

    -every time there is a tree wide API change, or cleanup, or file relocation,
    we pay the cost of updating dead code, or moving dead code.

    -daily regression tests (take linux-next as the most transparent
    example) spend time building (and possibly running) this dead code.

    -hard working people who regularly run auditing tools looking for lurking
    bugs (sparse/coverity/smatch/coccinelle) are wasting time checking for,
    and fixing bugs in this dead code.

    This last one is key. Please take a look at the git history for the
    files that are proposed for removal here. Look at the git history for
    any one of them ("git whatchanged --follow drivers/net/.../driver.c")
    Mentally sort the changes into two bins -- (1) the robotic tree-wide
    changes, and (2) the "look I found a real run-time bug while using this"
    category. You will see that category #2 is essentially empty.

    Further to that, realize that drivers don't simply disappear. We are
    not operating in the binary-only distribution space like other OS. All
    these drivers remain in the git history forever. If a person is an
    enthusiast for extreme legacy hardware, they are probably already
    customizing their kernel source and building it themselves to support
    such systems. Also keep in mind that they could still build the 3.8
    kernel exactly as-is, and run it (or a 3.8.x stable variant of it) for
    several more years if they were really determined to cling to these old
    experimental ISA drivers for some reason.

    In summary, I hope that folks can be pragmatic about this, and not
    get swept up in nostalgia. Ask yourself whether it is realistic to
    expect a person would have a genuine use case where they would
    need to build a 3.9+ modern kernel and install it on some legacy hardware
    that has no option but to absolutely _require_ one of the drivers
    that are deleted here.

    The following series was created with --irreversible-delete for
    ease of review (it skips showing the content of files that are
    deleted); however the complete patches can be pulled as per below.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Since we have removed NCE (Neighbour Cache Entry) reference from
    routing entries, the only refcnt holders of an NCE are its timer
    (if running) and its owner table, in usual cases. As a result,
    neigh_periodic_work() purges NCEs over and over again even for
    gateways.

    It does not make sense to purge entries, if number of them is
    very small, so keep them. The minimum number of entries to keep
    is specified by gc_thresh1.

    Signed-off-by: YOSHIFUJI Hideaki
    Signed-off-by: David S. Miller

    YOSHIFUJI Hideaki / 吉藤英明
     

22 Jan, 2013

3 commits

  • This is another one that makes sense to target for obsolescence, since
    it (a)appeared pre-1995, and (b)was rather rare, and (c)did not
    really have any statistically significant active linux user base.

    Removing this ISA 10Mbit driver support is unlikely to be even noticed
    by the user base of 3.9+ linux kernels, especially when the documentation
    clearly indicates the vintage with this text:

    "...designed to work with all kernels > 1.1.33"

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker
     
  • These are old ISA 10Mbit cards from the 1st 1/2 of the 1990s and
    required manual jumper settings in order to configure them. Here
    we remove them on the premise that they are no longer used in any
    modern 3.9+ kernels.

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker
     
  • The parallel port is largely replaced by USB, and even in the
    day where these drivers were current, the documented speed was
    less than 100kB/s. Let us not pretend that anyone cares about
    these drivers anymore, or worse - pretend that anyone is using
    them on a modern kernel.

    As a side bonus, this is the end of legacy parallel port ethernet,
    so we get to drop the whole chunk relating to that in the legacy
    Space.c file containing the non-PCI unified probe dispatch.

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker