1. 16 10月, 2008 8 次提交
    • S
      ieee1394: dv1394, video1394: remove unnecessary expressions · d98562d1
      Stefan Richter 提交于
      init->channel and v.buffer are unsigned and tests for < 0 therefore
      always false.  gcc knows this and eliminates the code, but anyway...
      Reported by Roel Kluin.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      d98562d1
    • S
      ieee1394: raw1394: make write() thread-safe · f22e52b8
      Stefan Richter 提交于
      Application programs should use a libraw1394 handle only in a single
      thread.  The raw1394 driver was apparently relying on this, because it
      did nothing to protect its fi->state variable from corruption due to
      concurrent accesses.
      
      We now serialize the fi->state accesses.  This affects the write() path.
      We re-use the state_mutex which was introduced to protect fi->iso_state
      accesses in the ioctl() path.  These paths and accesses are independent
      of each other, hence separate mutexes could be used.  But I don't see
      much benefit in that.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      f22e52b8
    • S
      ieee1394: raw1394: narrow down the state_mutex protected region · ddfb908d
      Stefan Richter 提交于
      Refactor the ioctl dispatcher in order to move a fraction of it out of
      the section which is serialized by fi->state_mutex.  This is not so much
      about performance but more about self-documentation:  The mutex_lock()/
      mutex_unlock() calls are now closer to the data accesses which the mutex
      protects, i.e. to the iso_state switch.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      ddfb908d
    • S
      ieee1394: raw1394: replace BKL by local mutex, make ioctl() and mmap() thread-safe · 10963ea1
      Stefan Richter 提交于
      This removes the last usage of the Big Kernel Lock from the ieee1394
      stack, i.e. from raw1394's (unlocked_)ioctl and compat_ioctl.
      
      The ioctl()s don't need to take the BKL, but they need to be serialized
      per struct file *.  In particular, accesses to ->iso_state need to be
      serial.  We simply use a blocking mutex for this purpose because
      libraw1394 does not use O_NONBLOCK.  In practice, there is no lock
      contention anyway because most if not all libraw1394 clients use a
      libraw1394 handle only in a single thread.
      
      mmap() also accesses ->iso_state.  Until now this was unprotected
      against concurrent changes by ioctls.  Fix this bug while we are at it.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      10963ea1
    • S
      ieee1394: sbp2: enforce s/g segment size limit · ed6ffd08
      Stefan Richter 提交于
      1. We don't need to round the SBP-2 segment size limit down to a
         multiple of 4 kB (0xffff -> 0xf000).  It is only necessary to
         ensure quadlet alignment (0xffff -> 0xfffc).
      
      2. Use dma_set_max_seg_size() to tell the DMA mapping infrastructure
         and the block IO layer about the restriction.  This way we can
         remove the size checks and segment splitting in the queuecommand
         path.
      
         This assumes that no other code in the ieee1394 stack uses
         dma_map_sg() with conflicting requirements.  It furthermore assumes
         that the controller device's platform actually allows us to set the
         segment size to our liking.  Assert the latter with a BUG_ON().
      
      3. Also use blk_queue_max_segment_size() to tell the block IO layer
         about it.  It cannot know it because our scsi_add_host() does not
         point to the FireWire controller's device.
      
      We can also uniformly use dma_map_sg() for the single segment case just
      like for the multi segment case, to further simplify the code.
      
      Also clean up how the page table is converted to big endian.
      
      Thanks to Grant Grundler and FUJITA Tomonori for advice.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      ed6ffd08
    • S
      cd8c79f1
    • S
      ieee1394: sbp2: stricter dma_sync · 0a77b17c
      Stefan Richter 提交于
      Two dma_sync_single_for_cpu() were called in the wrong place.
      Luckily they were merely for DMA_TO_DEVICE, hence nobody noticed.
      
      Also reorder the matching dma_sync_single_for_device() a little bit
      so that they reside in the same functions as their counterparts.
      This also avoids syncing the s/g table for requests which don't use it.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      0a77b17c
    • J
      ieee1394: Use DIV_ROUND_UP · 68e2aa79
      Julia Lawall 提交于
      Signed-off-by: NJulia Lawall <julia@diku.dk>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      68e2aa79
  2. 20 8月, 2008 3 次提交
  3. 25 7月, 2008 1 次提交
    • A
      PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures · 27ac792c
      Andrea Righi 提交于
      On 32-bit architectures PAGE_ALIGN() truncates 64-bit values to the 32-bit
      boundary. For example:
      
      	u64 val = PAGE_ALIGN(size);
      
      always returns a value < 4GB even if size is greater than 4GB.
      
      The problem resides in PAGE_MASK definition (from include/asm-x86/page.h for
      example):
      
      #define PAGE_SHIFT      12
      #define PAGE_SIZE       (_AC(1,UL) << PAGE_SHIFT)
      #define PAGE_MASK       (~(PAGE_SIZE-1))
      ...
      #define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)
      
      The "~" is performed on a 32-bit value, so everything in "and" with
      PAGE_MASK greater than 4GB will be truncated to the 32-bit boundary.
      Using the ALIGN() macro seems to be the right way, because it uses
      typeof(addr) for the mask.
      
      Also move the PAGE_ALIGN() definitions out of include/asm-*/page.h in
      include/linux/mm.h.
      
      See also lkml discussion: http://lkml.org/lkml/2008/6/11/237
      
      [akpm@linux-foundation.org: fix drivers/media/video/uvc/uvc_queue.c]
      [akpm@linux-foundation.org: fix v850]
      [akpm@linux-foundation.org: fix powerpc]
      [akpm@linux-foundation.org: fix arm]
      [akpm@linux-foundation.org: fix mips]
      [akpm@linux-foundation.org: fix drivers/media/video/pvrusb2/pvrusb2-dvb.c]
      [akpm@linux-foundation.org: fix drivers/mtd/maps/uclinux.c]
      [akpm@linux-foundation.org: fix powerpc]
      Signed-off-by: NAndrea Righi <righi.andrea@gmail.com>
      Cc: <linux-arch@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      27ac792c
  4. 22 7月, 2008 3 次提交
  5. 14 7月, 2008 6 次提交
  6. 19 6月, 2008 1 次提交
    • S
      ieee1394: Kconfig menu touch-up · 9499fe2b
      Stefan Richter 提交于
      Rename and reorder some prompts and modify some help texts.
      The result:
      
        -------------------- IEEE 1394 (FireWire) support --------------------
        *** Enable only one of the two stacks, unless you know what you are doing ***
        New FireWire stack, EXPERIMENTAL
          OHCI-1394 controllers
          Storage devices (SBP-2 protocol)
        Stable FireWire stack
          OHCI-1394 controllers
          PCILynx controller
          Storage devices (SBP-2 protocol)
            Enable replacement for physical DMA in SBP2
          IP over 1394
          raw1394 userspace interface
          video1394 userspace interface
          dv1394 userspace interface (deprecated)
          Excessive debugging output
      
      The old prompts for reference:
      
        -------------------- IEEE 1394 (FireWire) support --------------------
        IEEE 1394 (FireWire) support - alternative stack, EXPERIMENTAL
          Support for OHCI FireWire host controllers
          Support for storage devices (SBP-2 protocol driver)
        IEEE 1394 (FireWire) support
          *** Subsystem Options ***
          Excessive debugging output
          *** Controllers ***
          Texas Instruments PCILynx support
          OHCI-1394 support
          *** Protocols ***
          OHCI-1394 Video support
          SBP-2 support (Harddisks etc.)
            Enable replacement for physical DMA in SBP2
          IP over 1394
          OHCI-DV I/O support (deprecated)
          Raw IEEE1394 I/O support
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      9499fe2b
  7. 21 5月, 2008 1 次提交
  8. 02 5月, 2008 1 次提交
  9. 26 4月, 2008 2 次提交
    • T
      ieee1394: silence defined but not used warning in non-modular builds · e3864970
      Tony Breeds 提交于
      Currently the kernel will issue the following warning:
      drivers/ieee1394/raw1394.c:2938: warning: 'raw1394_id_table' defined but not used
      Add #ifdef MODULE guards around the declaration.
      Signed-off-by: NTony Breeds <tony@bakeyournoodle.com>
      
      Ditto with dv1394_id_table and video1394_id_table.
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      e3864970
    • P
      ieee1394: rawiso: requeue packet for transmission after skipped cycle · cc9429bc
      Pieter Palmers 提交于
      As it seems, some host controllers have issues that can cause them to
      skip cycles now and then when using large packets. I suspect that this
      is due to DMA not succeeding in time. If the transmit fifo can't contain
      more than one packet (big packets), the DMA should provide a new packet
      each cycle (125us). I am under the impression that my current PCI
      express test system can't guarantee this.
      
      In any case, the patch tries to provide a workaround as follows:
      The DMA program descriptors are modified such that when an error occurs,
      the DMA engine retries the descriptor the next cycle instead of
      stalling. This way no data is lost. The side effect of this is that
      packets are sent with one cycle delay. This however might not be that
      much of a problem for certain protocols (e.g. AM824). If they use
      padding packets for e.g. rate matching they can drop one of those to
      resync the streams.
      
      The amount of skips between two userspace wakeups is counted. This
      number is then propagated to userspace through the upper 16 bits of the
      'dropped' parameter. This allows unmodified userspace applications due
      to the following:
      1) libraw simply passes this dropped parameter to the user application
      2) the meaning of the dropped parameter is: if it's nonzero, something
      bad has happened. The actual value of the parameter at this moment does
      not have a specific meaning.
      
      A libraw client can then retrieve the number of skipped cycles and
      account for them if needed.
      Signed-off-by: NPieter Palmers <pieterp@joow.be>
      Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
      cc9429bc
  10. 19 4月, 2008 1 次提交
  11. 18 4月, 2008 12 次提交
  12. 14 3月, 2008 1 次提交