28 Feb, 2014

1 commit

  • Commit 8408dc1c14c1 "firewire: net: use dev_printk API" introduced a
    use-after-free in a failure path. fwnet_transmit_packet_failed(ptask)
    may free ptask, then the dev_err() call dereferenced it. The fix is
    straightforward; simply reorder the two calls.

    Reported-by: Dan Carpenter
    Cc: stable@vger.kernel.org # v3.4+
    Signed-off-by: Stefan Richter

    Stefan Richter
     

10 Jun, 2013

1 commit

  • FireWire upper layer drivers are converted from generic
    struct driver.probe() and .remove()
    to bus-specific
    struct fw_driver.probe() and .remove().

    The new .probe() adds a const struct ieee1394_device_id *id argument,
    indicating the entry in the driver's device identifiers table which
    matched the fw_unit to be probed. This new argument is used by the
    snd-firewire-speakers driver to look up device-specific parameters and
    methods. There is at least one other FireWire audio driver currently in
    development in which this will be useful too.

    The new .remove() drops the unused error return code.

    Although all in-tree drivers are being converted to the new methods,
    support for the old methods is left in place in this commit. This
    allows public developer trees to merge this commit and then move to the
    new fw_driver methods.

    Signed-off-by: Stefan Richter
    Acked-by: Clemens Ladisch (for sound/firewire/)
    Cc: Peter Hurley (for drivers/staging/fwserial/)

    Stefan Richter
     

10 May, 2013

1 commit

  • Pull firewure updates from Stefan Richter:
    - fix controller removal when controller is in suspended state
    - fix video reception on VIA VT6306 with gstreamer, MythTV, and maybe dv4l
    - fix a startup issue with Agere/LSI FW643-e2
    - error logging improvements and other small updates

    * tag 'firewire-updates' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
    firewire: ohci: dump_stack() for PHY regs read/write failures
    firewire: ohci: Improve bus reset error messages
    firewire: ohci: Alias dev_* log functions
    firewire: ohci: Fix 'failed to read phy reg' on FW643 rev8
    firewire: ohci: fix VIA VT6306 video reception
    firewire: ohci: Check LPS before register access on pci removal
    firewire: ohci: Fix double free_irq()
    firewire: remove unnecessary alloc/OOM messages
    firewire: sbp2: replace BUG_ON by WARN_ON
    firewire: core: remove an always false test
    firewire: Remove two unneeded checks for macros

    Linus Torvalds
     

29 Apr, 2013

1 commit


28 Mar, 2013

1 commit

  • Add a new constant ETH_P_802_3_MIN, the minimum ethernet type for
    an 802.3 frame. Frames with a lower value in the ethernet type field
    are Ethernet II.

    Also update all the users of this value that David Miller and
    I could find to use the new constant.

    Also correct a bug in util.c. The comparison with ETH_P_802_3_MIN
    should be >= not >.

    As suggested by Jesse Gross.

    Compile tested only.

    Cc: David Miller
    Cc: Jesse Gross
    Cc: Karsten Keil
    Cc: John W. Linville
    Cc: Johannes Berg
    Cc: Bart De Schuymer
    Cc: Stephen Hemminger
    Cc: Patrick McHardy
    Cc: Marcel Holtmann
    Cc: Gustavo Padovan
    Cc: Johan Hedberg
    Cc: linux-bluetooth@vger.kernel.org
    Cc: netfilter-devel@vger.kernel.org
    Cc: bridge@lists.linux-foundation.org
    Cc: linux-wireless@vger.kernel.org
    Cc: linux1394-devel@lists.sourceforge.net
    Cc: linux-media@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Cc: dev@openvswitch.org
    Acked-by: Mauro Carvalho Chehab
    Acked-by: Stefan Richter
    Signed-off-by: Simon Horman
    Signed-off-by: David S. Miller

    Simon Horman
     

27 Mar, 2013

6 commits

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

    YOSHIFUJI Hideaki / 吉藤英明
     
  • Inspection of upper layer protocol is considered harmful, especially
    if it is about ARP or other stateful upper layer protocol; driver
    cannot (and should not) have full state of them.

    IPv4 over Firewire module used to inspect ARP (both in sending path
    and in receiving path), and record peer's GUID, max packet size, max
    speed and fifo address. This patch removes such inspection by extending
    our "hardware address" definition to include other information as well:
    max packet size, max speed and fifo. By doing this, The neighbour
    module in networking subsystem can cache them.

    Note: As we have started ignoring sspd and max_rec in ARP/NDP, those
    information will not be used in the driver when sending.

    When a packet is being sent, the IP layer fills our pseudo header with
    the extended "hardware address", including GUID and fifo. The driver
    can look-up node-id (the real but rather volatile low-level address)
    by GUID, and then the module can send the packet to the wire using
    parameters provided in the extendedn hardware address.

    This approach is realistic because IP over IEEE1394 (RFC2734) and IPv6
    over IEEE1394 (RFC3146) share same "hardware address" format
    in their address resolution protocols.

    Here, extended "hardware address" is defined as follows:

    union fwnet_hwaddr {
    u8 u[16];
    struct {
    __be64 uniq_id; /* EUI-64 */
    u8 max_rec; /* max packet size */
    u8 sspd; /* max speed */
    __be16 fifo_hi; /* hi 16bits of FIFO addr */
    __be32 fifo_lo; /* lo 32bits of FIFO addr */
    } __packed uc;
    };

    Note that Hardware address is declared as union, so that we can map full
    IP address into this, when implementing MCAP (Multicast Cannel Allocation
    Protocol) for IPv6, but IP and ARP subsystem do not need to know this
    format in detail.

    One difference between original ARP (RFC826) and 1394 ARP (RFC2734)
    is that 1394 ARP Request/Reply do not contain the target hardware address
    field (aka ar$tha). This difference is handled in the ARP subsystem.

    CC: Stephan Gatzka
    Signed-off-by: YOSHIFUJI Hideaki
    Signed-off-by: David S. Miller

    YOSHIFUJI Hideaki / 吉藤英明
     
  • Stefan Richter says:
    | As far as I can tell, it would be best to ignore max_rec and sspd from ARP
    | and NDP but keep using the respective information from firewire-core
    | instead (handed over by fwnet_probe()).
    |
    | Why? As I noted earlier, RFC 2734:1999 and RFC 3146:2001 were apparently
    | written with a too simplistic notion of IEEE 1394 bus topology, resulting
    | in max_rec and sspd in ARP-1394 and NDP-1394 to be useless, IMO.
    |
    | Consider a bus like this:
    |
    | A ---- B ==== C
    |
    | A, B, C are all IP-over-1394 capable nodes. ---- is an S400 cable hop,
    | and ==== is an S800 cable hop.
    |
    | In case of unicasts or multicasts in which node A is involved as
    | transmitter or receiver, as well as in case of broadcasts, the speeds
    | S100, S200, S400 work and speed S400 is optimal.
    |
    | In case of anything else, IOW in case of unicasts or multicasts in which
    | only nodes B and C are involved, the speeds S100, S200, S400, S800 work
    | and speed S800 is optimal.
    |
    | Clearly, node A should indicate sspd = S400 in its ARP or NDP packets.
    | But which sspd should nodes B and C set there? Maybe they set S400, which
    | would work but would waste half of the available bandwidth in the second
    | case. Or maybe they set S800, which is OK in the second case but would
    | prohibit any communication with node A if blindly taken for correct.
    |
    | On the other hand, firewire-core *always* gives us the correct and optimum
    | peer-to-peer speed and asynchronous packet payload, no matter how simple
    | or complex the bus topology is and no matter in which temporal order nodes
    | join the bus and are discovered.

    CC: Stefan Richter
    Signed-off-by: YOSHIFUJI Hideaki
    Signed-off-by: David S. Miller

    YOSHIFUJI Hideaki / 吉藤英明
     
  • Allocate FIFO address before registering net_device.
    This is preparation to change the pseudo hardware address format
    for firewire devices to include the offset of the FIFO for receipt
    of unicast datagrams, instead of mangling ARP/NDP messages in the
    driver layer.

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

    YOSHIFUJI Hideaki / 吉藤英明
     
  • Send L2 multicast packet via GASP (Global asynchronous stream packet) by
    seeing the multicast bit in the L2 hardware address, not by seeing upper-
    layer protocol address.

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

    YOSHIFUJI Hideaki / 吉藤英明
     
  • Signed-off-by: YOSHIFUJI Hideaki
    Signed-off-by: David S. Miller

    YOSHIFUJI Hideaki / 吉藤英明
     

13 Mar, 2013

11 commits


21 Jan, 2013

2 commits


03 Dec, 2012

2 commits

  • The variable card is initialized but never used
    otherwise, so remove the unused variable.

    Signed-off-by: Wei Yongjun
    Signed-off-by: Stefan Richter

    Wei Yongjun
     
  • This patch fixes both the transmit and receive portion of sending
    fragmented mutlicast and broadcast packets.

    The transmit section was broken because the offset for INTFRAG and
    LASTFRAG packets were just miscalculated by IEEE1394_GASP_HDR_SIZE (which
    was reserved with skb_push() in fwnet_send_packet).

    The receive section was broken because in fwnet_incoming_packet is a call
    to fwnet_peer_find_by_node_id(). Called with generation == -1 it will
    not find a peer and the partial datagrams are associated to a peer.

    [Stefan R: The fix to use context->card->generation is not perfect.
    It relies on the IR tasklet which processes packets from the prior bus
    generation to run before the self-ID-complete worklet which sets the
    current card generation. Alas, there is no simple way of a race-free
    implementation. Let's do it this way for now.]

    Signed-off-by: Stephan Gatzka
    Cc: stable
    Signed-off-by: Stefan Richter

    Stephan Gatzka
     

23 Feb, 2012

2 commits

  • Change the log line prefix from "firewire_net: " to "net firewire0: "
    etc. for the case that several RFC 2734 interfaces are being used in the
    same machine.

    Note, the netdev_printk API is not very useful to firewire-net.
    netdev_notice(net, "abc\n") would result in irritating messages like
    "firewire_ohci 0000:0a:00.0: firewire0: abc". Nor would a dev_printk on
    the fw_unit.device to which firewire-net is being bound be useful,
    because there are generally multiple ones of those per interface (from
    all RFC 2734 peers on the bus, the local node being only one of them).

    In the initialization message of each interface, log the PCI device
    name of the card which is parent of the netdevice instead of the GUID
    of the peer which was semi-randomly used to establish the netdevice.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • On second thought, there is little reason to have driver name differ
    from module name. Therefore, change
    /sys/bus/firewire/drivers/net
    /sys/bus/firewire/devices/fw0.0/driver -> [...]/net
    /sys/module/firewire_net/drivers/firewire:net
    to
    /sys/bus/firewire/drivers/firewire_net
    /sys/bus/firewire/devices/fw0.0/driver -> [...]/firewire_net
    /sys/module/firewire_net/drivers/firewire:firewire_net
    It is redundant but consistent with firewire-sbp2's recently changed
    driver name.

    I don't see this anywhere used, so it should not matter either way.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

09 Oct, 2011

2 commits

  • Change memory region to ohci "middle address space". This effectively
    reduces the number of packets by 50%.

    [Stefan R.:] This eliminates 1394 ack packets and improved throughput
    by a few percent in some tests with an S400a connection with and without
    gap count optimization. Since firewire-net taxes the AR-req DMA unit of
    a FireWire controller much more than firewire-sbp2 (which uses the
    middle address space with PCI posted writes too), this commit also
    changes a related error printk into a ratelimited one as a precaution.

    Side note: The IPv4-over-1394 drivers of Mac OS X 10.4, Windows XP SP3,
    and the Thesycon 1394 bus driver for Windows all use the middle address
    space too.

    Signed-off-by: Stephan Gatzka
    Signed-off-by: Stefan Richter

    Stephan Gatzka
     
  • Use kernel.h's convenience macros. Also omit a printk that should never
    happen and won't matter much if it ever happened.

    Signed-off-by: Stefan Richter

    Stefan Richter
     

23 Jul, 2011

1 commit

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
    firewire: document the sysfs ABIs
    firewire: cdev: ABI documentation enhancements
    firewire: cdev: prevent race between first get_info ioctl and bus reset event queuing
    firewire: cdev: return -ENOTTY for unimplemented ioctls, not -EINVAL
    firewire: ohci: skip soft reset retries after card ejection
    firewire: ohci: fix PHY reg access after card ejection
    firewire: ohci: add a comment on PHY reg access serialization
    firewire: ohci: reduce potential context_stop latency
    firewire: ohci: remove superfluous posted write flushes
    firewire: net: replacing deprecated __attribute__((packed)) with __packed

    Linus Torvalds
     

13 Jul, 2011

1 commit


02 Jun, 2011

1 commit


11 May, 2011

1 commit

  • When queueing iso packets, the run time is dominated by the two
    MMIO accesses that set the DMA context's wake bit. Because most
    drivers submit packets in batches, we can save much time by
    removing all but the last wakeup.

    The internal kernel API is changed to require a call to
    fw_iso_context_queue_flush() after a batch of queued packets.
    The user space API does not change, so one call to
    FW_CDEV_IOC_QUEUE_ISO must specify multiple packets to take
    advantage of this optimization.

    In my measurements, this patch reduces the time needed to queue
    fifty skip packets from userspace to one sixth on a 2.5 GHz CPU,
    or to one third at 800 MHz.

    Signed-off-by: Clemens Ladisch
    Signed-off-by: Stefan Richter

    Clemens Ladisch
     

31 Mar, 2011

1 commit


21 Jan, 2011

1 commit


19 Dec, 2010

2 commits

  • At ifup, carrier status would be shown on even if it actually was off.
    Also add an include for ethtool_ops rather than to rely on the one from
    netdevice.h.

    Note, we can alas not use fwnet_device_mutex to serialize access to
    dev->peer_count (as I originally wanted). This would cause a lock
    inversion:
    - fwnet_probe | takes fwnet_device_mutex
    + register_netdev | takes rtnl_mutex
    - devinet_ioctl | takes rtnl_mutex
    + fwnet_open | ...must not take fwnet_device_mutex

    Hence use the dev->lock spinlock for serialization.

    Signed-off-by: Stefan Richter

    Stefan Richter
     
  • To make userland, e.g. NetworkManager work with firewire, we need to
    detect whether cable is plugged or not. Simple and correct way of doing
    that is just counting number of peers. No peers - no link and vice
    versa.

    Signed-off-by: Stefan Richter

    Maxim Levitsky
     

14 Dec, 2010

1 commit

  • Unfortunately its easy to trigger such error messages by removing the
    cable while sending streams of data over the link.

    Such errors are normal, and therefore this patch stops firewire-net from
    flooding the kernel log with these errors, by combining series of same
    errors together.

    Signed-off-by: Maxim Levitsky

    (Stefan R:) Eventually we should remove this logging when firewire-net
    and related firewire-ohci facilities have been stabilized.

    Signed-off-by: Stefan Richter

    Maxim Levitsky
     

17 Nov, 2010

1 commit

  • This prevents firewire-net from submitting write requests in fast
    succession until failure due to all 64 transaction labels were used up
    for unfinished split transactions. The netif_stop/wake_queue API is
    used for this purpose.

    Without this stop/wake mechanism, datagrams were simply lost whenever
    the tlabel pool was exhausted. Plus, tlabel exhaustion by firewire-net
    also prevented other unrelated outbound transactions to be initiated.

    The chosen queue depth was checked by me to hit the maximum possible
    throughput with an OS X peer whose receive DMA is good enough to never
    reject requests due to busy inbound request FIFO. Current Linux peers
    show a mixed picture of -5%...+15% change in bandwidth; their current
    bottleneck are RCODE_BUSY situations (fewer or more, depending on TX
    queue depth) due to too small AR buffer in firewire-ohci.

    Maxim Levitsky tested this change with similar watermarks with a Linux
    peer and some pending firewire-ohci improvements that address the
    RCODE_BUSY problem and confirmed that these TX queue limits are good.

    Note: This removes some netif_wake_queue from reception code paths.
    They were apparently copy&paste artefacts from a nonsensical
    netif_wake_queue use in the older eth1394 driver. This belongs only
    into the transmit path.

    Signed-off-by: Stefan Richter
    Tested-by: Maxim Levitsky

    Stefan Richter