1. 16 4月, 2014 1 次提交
  2. 07 4月, 2014 2 次提交
    • N
      target: Pass in transport supported PI at session initialization · e70beee7
      Nicholas Bellinger 提交于
      In order to support local WRITE_INSERT + READ_STRIP operations for
      non PI enabled fabrics, the fabric driver needs to be able signal
      what protection offload operations are supported.
      
      This is done at session initialization time so the modes can be
      signaled by individual se_wwn + se_portal_group endpoints, as well
      as optionally across different transports on the same endpoint.
      
      For iser-target, set TARGET_PROT_ALL if the underlying ib_device
      has already signaled PI offload support, and allow this to be
      exposed via a new iscsit_transport->iscsit_get_sup_prot_ops()
      callback.
      
      For loopback, set TARGET_PROT_ALL to signal SCSI initiator mode
      operation.
      
      For all other drivers, set TARGET_PROT_NORMAL to disable fabric
      level PI.
      
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Cc: Quinn Tran <quinn.tran@qlogic.com>
      Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      e70beee7
    • N
      target: Add TFO->abort_task for aborted task resources release · 131e6abc
      Nicholas Bellinger 提交于
      Now that TASK_ABORTED status is not generated for all cases by
      TMR ABORT_TASK + LUN_RESET, a new TFO->abort_task() caller is
      necessary in order to give fabric drivers a chance to unmap
      hardware / software resources before the se_cmd descriptor is
      released via the normal TFO->release_cmd() codepath.
      
      This patch adds TFO->aborted_task() in core_tmr_abort_task()
      in place of the original transport_send_task_abort(), and
      also updates all fabric drivers to implement this caller.
      
      The fabric drivers that include changes to perform cleanup
      via ->aborted_task() are:
      
        - iscsi-target
        - iser-target
        - srpt
        - tcm_qla2xxx
      
      The fabric drivers that currently set ->aborted_task() to
      NOPs are:
      
        - loopback
        - tcm_fc
        - usb-gadget
        - sbp-target
        - vhost-scsi
      
      For the latter five, there appears to be no additional cleanup
      required before invoking TFO->release_cmd() to release the
      se_cmd descriptor.
      
      v2 changes:
        - Move ->aborted_task() call into transport_cmd_finish_abort (Alex)
      
      Cc: Alex Leung <amleung21@yahoo.com>
      Cc: Mark Rustad <mark.d.rustad@intel.com>
      Cc: Roland Dreier <roland@kernel.org>
      Cc: Vu Pham <vu@mellanox.com>
      Cc: Chris Boot <bootc@bootc.net>
      Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
      Cc: Saurav Kashyap <saurav.kashyap@qlogic.com>
      Cc: Quinn Tran <quinn.tran@qlogic.com>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      131e6abc
  3. 18 3月, 2014 6 次提交
  4. 08 3月, 2014 2 次提交
  5. 06 3月, 2014 5 次提交
  6. 05 3月, 2014 1 次提交
    • R
      usb: gadget: at91_udc: fix ep maxpacket initialisation · 0e06bcac
      Robert Baldyga 提交于
      This patch fixes problem with unnecessary usb_ep_set_maxpacket_limit() usage.
      It should not be used in at91udc_probe() function, where maxpacket values are
      set for field "maxpacket" of struct at91_ep, which is representation of
      endpoint in driver internals. Function usb_ep_set_maxpacket_limit() is called
      in udc_reinit() function, where struct usb_ep instances are initialised with
      values set previously in struct at91_ep instances. So it's very important to
      initialise it properly.
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      0e06bcac
  7. 01 3月, 2014 1 次提交
    • P
      tty: Fix low_latency BUG · a9c3f68f
      Peter Hurley 提交于
      The user-settable knob, low_latency, has been the source of
      several BUG reports which stem from flush_to_ldisc() running
      in interrupt context. Since 3.12, which added several sleeping
      locks (termios_rwsem and buf->lock) to the input processing path,
      the frequency of these BUG reports has increased.
      
      Note that changes in 3.12 did not introduce this regression;
      sleeping locks were first added to the input processing path
      with the removal of the BKL from N_TTY in commit
      a88a69c9,
      'n_tty: Fix loss of echoed characters and remove bkl from n_tty'
      and later in commit 38db8979,
      'tty: throttling race fix'. Since those changes, executing
      flush_to_ldisc() in interrupt_context (ie, low_latency set), is unsafe.
      
      However, since most devices do not validate if the low_latency
      setting is appropriate for the context (process or interrupt) in
      which they receive data, some reports are due to misconfiguration.
      Further, serial dma devices for which dma fails, resort to
      interrupt receiving as a backup without resetting low_latency.
      
      Historically, low_latency was used to force wake-up the reading
      process rather than wait for the next scheduler tick. The
      effect was to trim multiple milliseconds of latency from
      when the process would receive new data.
      
      Recent tests [1] have shown that the reading process now receives
      data with only 10's of microseconds latency without low_latency set.
      
      Remove the low_latency rx steering from tty_flip_buffer_push();
      however, leave the knob as an optional hint to drivers that can
      tune their rx fifos and such like. Cleanup stale code comments
      regarding low_latency.
      
      [1] https://lkml.org/lkml/2014/2/20/434
      
      "Yay.. thats an annoying historical pain in the butt gone."
      	-- Alan Cox
      Reported-by: NBeat Bolli <bbolli@ewanet.ch>
      Reported-by: NPavel Roskin <proski@gnu.org>
      Acked-by: NDavid Sterba <dsterba@suse.cz>
      Cc: Grant Edwards <grant.b.edwards@gmail.com>
      Cc: Stanislaw Gruszka <sgruszka@redhat.com>
      Cc: Hal Murray <murray+fedora@ip-64-139-1-69.sjc.megapath.net>
      Cc: <stable@vger.kernel.org> # 3.12.x+
      Signed-off-by: NPeter Hurley <peter@hurleysoftware.com>
      Signed-off-by: NAlan Cox <alan@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9c3f68f
  8. 25 2月, 2014 1 次提交
  9. 20 2月, 2014 5 次提交
  10. 19 2月, 2014 16 次提交
    • R
      usb: gadget: f_fs: add aio support · 2e4c7553
      Robert Baldyga 提交于
      This patch adds asynchronous I/O support for FunctionFS endpoint files.
      It adds ffs_epfile_aio_write() and ffs_epfile_aio_read() functions responsible
      for preparing AIO operations.
      
      It also modifies ffs_epfile_io() function, adding aio handling code. Instead
      of extending list of parameters of this function, there is new struct
      ffs_io_data which contains all information needed to perform I/O operation.
      Pointer to this struct replaces "buf" and "len" parameters of ffs_epfile_io()
      function. Allocated buffer is freed immediately only after sync operation,
      because in async IO it's freed in complete funcion. For each async operation
      an USB request is allocated, because it allows to have more than one request
      queued on single endpoint.
      
      According to changes in ffs_epfile_io() function, functions ffs_epfile_write()
      and ffs_epfile_read() are updated to use new API.
      
      For asynchronous I/O operations there is new request complete function named
      ffs_epfile_async_io_complete(), which completes AIO operation, and frees
      used memory.
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      2e4c7553
    • R
      usb: gadget: f_fs: add poll for endpoint 0 · 23de91e9
      Robert Baldyga 提交于
      This patch adds poll function for file representing ep0.
      
      Ability of read from or write to ep0 file is related with actual state of ffs:
      - When desctiptors or strings are not written yet, POLLOUT flag is set.
      - If there is any event to read, POLLIN flag is set.
      - If setup request was read, POLLIN and POLLOUT flag is set, to allow
        send response (by performing I/O operation consistent with setup request
        direction) or set stall (by performing I/O operation opposite  setup
        request direction).
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      23de91e9
    • R
      usb: gadget: f_fs: fix setup request handling · 0a7b1f8a
      Robert Baldyga 提交于
      This patch fixes __ffs_ep0_queue_wait() function, which now returns number of
      bytes transferred in USB request or error code in case of failure. This is
      needed by ffs_ep0_read() function, when read data is copied to userspace.
      
      It also cleans up code by removing usused variable ep0req_status.
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      0a7b1f8a
    • M
      usb: gadget: functionfs: replace FFS_SETUP_STATUS with an inline function · a7ecf054
      Michal Nazarewicz 提交于
      The FFS_SETUP_STATUS macro could be trivialy replaced with an static
      inline function but more importantly its name was tad confusing.
      The name suggested it was a simple accessor macro but it actually
      did change the state of the ffs_data structure perfomring
      a FFS_SETUP_CANCELLED -> FFS_NO_SETUP transition.  The name of the
      function -- ffs_setup_state_clear_cancelled -- should better
      describe what the function actually does.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      a7ecf054
    • M
      usb: gadget: functionfs: fix typo in the enum variable · e46318a0
      Michal Nazarewicz 提交于
      Since “cancelled” is spelled with two “l”s, rename FFS_SETUP_CANCELED
      to FFS_SETUP_CANCELLED.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      e46318a0
    • A
      usb: gadget: FunctionFS: use consistent naming with regard to ffs_lock · da13a773
      Andrzej Pietrasiewicz 提交于
      Consistently prefix function name with underscore if the function has to
      be called with ffs_lock taken.
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NAndrzej Pietrasiewicz <andrzej.p@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      da13a773
    • A
      usb: gadget: FunctionFS: staticize functions used only in f_fs.c · 10b69ce0
      Andrzej Pietrasiewicz 提交于
      ffs_alloc_dev and ffs_free_dev are used only in f_fs.c,
      so make them static.
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NAndrzej Pietrasiewicz <andrzej.p@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      10b69ce0
    • A
      usb: gadget: code cleanup · ab13cb0c
      Andrzej Pietrasiewicz 提交于
      Remove trailing whitespace
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NAndrzej Pietrasiewicz <andrzej.p@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      ab13cb0c
    • A
      usb: gadget: FunctionFS: dereference ffs_dev conditionally · ea365922
      Andrzej Pietrasiewicz 提交于
      ffs_dev->ffs_release_dev_callback should be accessed only if ffs_dev
      is not NULL.
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NAndrzej Pietrasiewicz <andrzej.p@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      ea365922
    • R
      usb: gadget: s3c-hsotg: stall ep0 in set_halt function · c9f721b2
      Robert Baldyga 提交于
      When s3c_hsotg_ep_sethalt() function is called for ep0 it should be stalled
      in the same way that it is in s3c_hsotg_process_control() function, because
      SET_HALT for ep0 is delayed response for setup request. Endpoint 0, if
      halted, it doesn't need CLEAR_HALT because it clears "stalled" state
      automatically when next setup request is received.
      
      For this reason this patch moves code setting ep0 to "stalled" state to new
      function named s3c_hsotg_stall_ep0() which is called in
      s3c_hsotg_process_control() function as an immediate response for setup
      request, and in s3c_hsotg_ep_sethalt() function as a delayed response for
      setup request.
      Signed-off-by: NRobert Baldyga <r.baldyga@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      c9f721b2
    • W
      usb: gadget: printer: fix memory leak · 7e98f600
      wenlin.kang 提交于
      When read data from g_printer, we see a Segmentation fault. eg:
      
      Unable to handle kernel paging request at virtual address bf048000 pgd
      = cf038000 [bf048000] *pgd=8e8cf811, *pte=00000000, *ppte=00000000
      Internal error: Oops: 7 [#1] PREEMPT ARM Modules linked in: bluetooth
      rfcomm g_printer
      CPU: 0    Not tainted  (3.4.43-WR5.0.1.9_standard #1)
      PC is at __copy_to_user_std+0x310/0x3a8 LR is at 0x4c808010
      pc : [<c036e990>]    lr : [<4c808010>]    psr: 20000013
      sp : cf883ea8  ip : 80801018  fp : cf883f24
      r10: bf04706c  r9 : 18a21205  r8 : 21953888
      r7 : 201588aa  r6 : 5109aa16  r5 : 0705aaa2  r4 : 5140aa8a
      r3 : 0000004c  r2 : 00000fdc  r1 : bf048000  r0 : bef5fc3c
      Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
      Control: 10c5387d  Table: 8f038019  DAC: 00000015 Process
      g_printer_test. (pid: 661, stack limit = 0xcf8822e8)
      Stack: (0xcf883ea8 to 0xcf884000)
      3ea0:                   bf047068 00001fff bef5ecb9 cf882000 00001fff bef5ecb9
      3ec0: 00001fff 00000000 cf2e8724 bf044d3c 80000013 80000013 00000001
      bf04706c
      3ee0: cf883f24 cf883ef0 c012e5ac c0324388 c007c8ac c0046298 00008180
      cf29b900
      3f00: 00002000 bef5ecb8 cf883f68 00000003 cf882000 cf29b900 cf883f54
      cf883f28
      3f20: c012ea08 bf044b0c c000eb88 00000000 cf883f7c 00000000 00000000
      00002000
      3f40: bef5ecb8 00000003 cf883fa4 cf883f58 c012eae8 c012e960 00000001
      bef60cb8
      3f60: 000000a8 c000eb88 00000000 00000000 cf883fa4 00000000 c014329c
      00000000
      3f80: 000000d4 41af63f0 00000003 c000eb88 cf882000 00000000 00000000
      cf883fa8
      3fa0: c000e920 c012eaa4 00000000 000000d4 00000003 bef5ecb8 00002000
      bef5ecb8
      3fc0: 00000000 000000d4 41af63f0 00000003 b6f534c0 00000000 419f9000
      00000000
      3fe0: 00000000 bef5ecac 000086d9 41a986bc 60000010 00000003 0109608a
      0088828a
      Code: f5d1f07c e8b100f0 e1a03c2e e2522020 (e8b15300) ---[ end trace
      97e2618e250e3377 ]--- Segmentation fault
      
      The root cause is the dev->rx_buffers list has been broken.
      When we call printer_read(), the following call tree is triggered:
      
      printer_read()
      	|
      	+---setup_rx_reqs(req)
      	|	|
      	|	+---usb_ep_queue(req)
      	|	|	|
      	|	|	+---...
      	|	|		|
      	|	|		+---rx_complete(req).
      	|	|
      	|	+---add the req to dev->rx_reqs_active
      	|
      	+---while(!list_empty(&dev->rx_buffers)))
      
      The route happens when we don't use DMA or fail to start DMA in USB
      driver. We can see: in the case, in rx_complete() it will add the req
      to dev->rx_buffers. meanwhile we see that we will also add the req to
      dev->rx_reqs_active after usb_ep_queue() return, so this adding will
      break the dev->rx_buffers out.
      
      After, when we call list_empty() to check dev->rx_buffers in while(),
      due to can't check correctly dev->rx_buffers, so the Segmentation fault
      occurs when copy_to_user() is called.
      Signed-off-by: Nwenlin.kang <wenlin.kang@windriver.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      7e98f600
    • W
      usb: gadget: printer: fix possible deadlock · 2c2b0425
      wenlin.kang 提交于
      The problem occurs in follow path.
      
      printer_read()
      	|
      	+---setup_rx_reqs()
      		|
      		+---usb_ep_queue()
      			|
      			+---...
      				|
      				+---rx_complete()
      
      Although it is clear from code, we can't get it normally.
      only when we enable some spin_lock debug config option, we can find it.
      eg:
      BUG: spinlock lockup on CPU#0, g_printer_test_/584
       lock: bf05e158, .magic: dead4ead, .owner: g_printer_test_/584, .owner_cpu: 0
      [<c0016e1c>] (unwind_backtrace+0x0/0x104) from [<c067aef8>] (dump_stack+0x20/0x24)
      [<c067aef8>] (dump_stack+0x20/0x24) from [<c0680bec>] (spin_dump+0x8c/0x94)
      [<c0680bec>] (spin_dump+0x8c/0x94) from [<c039071c>] (do_raw_spin_lock+0x128/0x154)
      [<c039071c>] (do_raw_spin_lock+0x128/0x154) from [<c0685618>] (_raw_spin_lock_irqsave+0x64/0x70)
      [<c0685618>] (_raw_spin_lock_irqsave+0x64/0x70) from [<bf05b4e8>] (rx_complete+0x54/0x10c [g_printer])
      [<bf05b4e8>] (rx_complete+0x54/0x10c [g_printer]) from [<c0480478>] (musb_g_giveback+0x78/0x88)
      [<c0480478>] (musb_g_giveback+0x78/0x88) from [<c048060c>] (rxstate+0xa0/0x10c)
      [<c048060c>] (rxstate+0xa0/0x10c) from [<c0480d50>] (musb_ep_restart+0x44/0x70)
      [<c0480d50>] (musb_ep_restart+0x44/0x70) from [<c0480fe4>] (musb_gadget_queue+0xe8/0xf8)
      [<c0480fe4>] (musb_gadget_queue+0xe8/0xf8) from [<bf05b2b0>] (setup_rx_reqs+0xa4/0x178 [g_printer])
      [<bf05b2b0>] (setup_rx_reqs+0xa4/0x178 [g_printer]) from [<bf05bb58>] (printer_read+0x9c/0x3f4 [g_printer])
      [<bf05bb58>] (printer_read+0x9c/0x3f4 [g_printer]) from [<c01387f0>] (vfs_read+0xb4/0x144)
      [<c01387f0>] (vfs_read+0xb4/0x144) from [<c01388d0>] (sys_read+0x50/0x124)
      [<c01388d0>] (sys_read+0x50/0x124) from [<c000e900>] (ret_fast_syscall+0x0/0x3c)
      
      The root cause is that we use the same lock two time in a path, so to avoid
      the deadlock, we need to unlock in setup_rx_reqs(), and only unlock.
      Signed-off-by: Nwenlin.kang <wenlin.kang@windriver.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      2c2b0425
    • S
      usb: gadget: s3c-hsudc: remove unused label · 236064c2
      Sachin Kamat 提交于
      Fixes the following compilation warning:
      drivers/usb/gadget/s3c-hsudc.c: In function ‘s3c_hsudc_probe’:
      drivers/usb/gadget/s3c-hsudc.c:1347:1: warning: label ‘err_add_device’
      defined but not used [-Wunused-label]
      Signed-off-by: NSachin Kamat <sachin.kamat@linaro.org>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      236064c2
    • S
      usb: gadget: s3c2410_udc: Fix build error · e362115a
      Sachin Kamat 提交于
      Pass value instead of address as expected by 'usb_ep_set_maxpacket_limit'.
      Fixes the following compilation error introduced by commit e117e742
      ("usb: gadget: add "maxpacket_limit" field to struct usb_ep"):
      
      drivers/usb/gadget/s3c2410_udc.c: In function ‘s3c2410_udc_reinit’:
      drivers/usb/gadget/s3c2410_udc.c:1632:3: error:
      cannot take address of bit-field ‘maxpacket’
         usb_ep_set_maxpacket_limit(&ep->ep, &ep->ep.maxpacket);
      Signed-off-by: NSachin Kamat <sachin.kamat@linaro.org>
      Reviewed-by: NRobert Baldyga <r.baldyga@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      e362115a
    • J
      usb: gadget: fix error return code · abcdcc29
      Julia Lawall 提交于
      Set the return variable to an error code as done elsewhere in the function.
      
      A simplified version of the semantic match that finds this problem is as
      follows: (http://coccinelle.lip6.fr/)
      
      // <smpl>
      (
      if@p1 (\(ret < 0\|ret != 0\))
       { ... return ret; }
      |
      ret@p1 = 0
      )
      ... when != ret = e1
          when != &ret
      *if(...)
      {
        ... when != ret = e2
            when forall
       return ret;
      }
      
      // </smpl>
      Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      abcdcc29
    • J
      usb: gadget: s3c-hsotg: use %pad for dma_addr_t · 8b3bc14f
      Jingoo Han 提交于
      Use %pad for dma_addr_t to avoid the following build warnings
      in printks.
      
      drivers/usb/gadget/s3c-hsotg.c: In function 's3c_hsotg_start_req'
      drivers/usb/gadget/s3c-hsotg.c:722:3: warning: format '%x' expects argument of type 'unsigned int' but argument 6 has type
      'dma_addr_t' [-Wformat]
      drivers/usb/gadget/s3c-hsotg.c:792:3: warning: format '%x' expects argument of type 'unsigned int' but argument 5 has type
      'dma_addr_t' [-Wformat]
      Signed-off-by: NJingoo Han <jg1.han@samsung.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      8b3bc14f