Merge tag 'v4.9-rc1' into patchwork
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 17 Oct 2016 14:10:40 +0000 (12:10 -0200)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 17 Oct 2016 14:10:40 +0000 (12:10 -0200)
Linux 4.9-rc1

* tag 'v4.9-rc1': (13774 commits)
  Linux 4.9-rc1
  score: traps: Add missing include file to fix build error
  fs/super.c: don't fool lockdep in freeze_super() and thaw_super() paths
  fs/super.c: fix race between freeze_super() and thaw_super()
  overlayfs: Fix setting IOP_XATTR flag
  iov_iter: kernel-doc import_iovec() and rw_copy_check_uvector()
  CIFS: Retrieve uid and gid from special sid if enabled
  CIFS: Add new mount option to set owner uid and gid from special sids in acl
  qedr: Add events support and register IB device
  qedr: Add GSI support
  qedr: Add LL2 RoCE interface
  qedr: Add support for data path
  qedr: Add support for memory registeration verbs
  qedr: Add support for QP verbs
  qedr: Add support for PD,PKEY and CQ verbs
  qedr: Add support for user context verbs
  qedr: Add support for RoCE HW init
  qedr: Add RoCE driver framework
  pkeys: Remove easily triggered WARN
  MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls
  ...

1  2 
drivers/media/usb/dvb-usb/dibusb-common.c

index b0fd9a609352925063e32f7baa6f54c08e0c9866,18ed3bfbb5e2a95f5127b41d0e1f15cce01b1f07..de3ee2547479428cd1c14347db5332ea1090c60d
@@@ -9,7 -9,6 +9,6 @@@
   * see Documentation/dvb/README.dvb-usb for more information
   */
  
- #include <linux/kconfig.h>
  #include "dibusb.h"
  
  /* Max transfer size done by I2C transfer functions */
@@@ -63,117 -62,72 +62,117 @@@ EXPORT_SYMBOL(dibusb_pid_filter_ctrl)
  
  int dibusb_power_ctrl(struct dvb_usb_device *d, int onoff)
  {
 -      u8 b[3];
 +      u8 *b;
        int ret;
 +
 +      b = kmalloc(3, GFP_KERNEL);
 +      if (!b)
 +              return -ENOMEM;
 +
        b[0] = DIBUSB_REQ_SET_IOCTL;
        b[1] = DIBUSB_IOCTL_CMD_POWER_MODE;
        b[2] = onoff ? DIBUSB_IOCTL_POWER_WAKEUP : DIBUSB_IOCTL_POWER_SLEEP;
 -      ret = dvb_usb_generic_write(d,b,3);
 +
 +      ret = dvb_usb_generic_write(d, b, 3);
 +
 +      kfree(b);
 +
        msleep(10);
 +
        return ret;
  }
  EXPORT_SYMBOL(dibusb_power_ctrl);
  
  int dibusb2_0_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)
  {
 -      u8 b[3] = { 0 };
        int ret;
 +      u8 *b;
 +
 +      b = kmalloc(3, GFP_KERNEL);
 +      if (!b)
 +              return -ENOMEM;
  
        if ((ret = dibusb_streaming_ctrl(adap,onoff)) < 0)
 -              return ret;
 +              goto ret;
  
        if (onoff) {
                b[0] = DIBUSB_REQ_SET_STREAMING_MODE;
                b[1] = 0x00;
 -              if ((ret = dvb_usb_generic_write(adap->dev,b,2)) < 0)
 -                      return ret;
 +              ret = dvb_usb_generic_write(adap->dev, b, 2);
 +              if (ret  < 0)
 +                      goto ret;
        }
  
        b[0] = DIBUSB_REQ_SET_IOCTL;
        b[1] = onoff ? DIBUSB_IOCTL_CMD_ENABLE_STREAM : DIBUSB_IOCTL_CMD_DISABLE_STREAM;
 -      return dvb_usb_generic_write(adap->dev,b,3);
 +      ret = dvb_usb_generic_write(adap->dev, b, 3);
 +
 +ret:
 +      kfree(b);
 +      return ret;
  }
  EXPORT_SYMBOL(dibusb2_0_streaming_ctrl);
  
  int dibusb2_0_power_ctrl(struct dvb_usb_device *d, int onoff)
  {
 -      if (onoff) {
 -              u8 b[3] = { DIBUSB_REQ_SET_IOCTL, DIBUSB_IOCTL_CMD_POWER_MODE, DIBUSB_IOCTL_POWER_WAKEUP };
 -              return dvb_usb_generic_write(d,b,3);
 -      } else
 +      u8 *b;
 +      int ret;
 +
 +      if (!onoff)
                return 0;
 +
 +      b = kmalloc(3, GFP_KERNEL);
 +      if (!b)
 +              return -ENOMEM;
 +
 +      b[0] = DIBUSB_REQ_SET_IOCTL;
 +      b[1] = DIBUSB_IOCTL_CMD_POWER_MODE;
 +      b[2] = DIBUSB_IOCTL_POWER_WAKEUP;
 +
 +      ret = dvb_usb_generic_write(d, b, 3);
 +
 +      kfree(b);
 +
 +      return ret;
  }
  EXPORT_SYMBOL(dibusb2_0_power_ctrl);
  
  static int dibusb_i2c_msg(struct dvb_usb_device *d, u8 addr,
                          u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen)
  {
 -      u8 sndbuf[MAX_XFER_SIZE]; /* lead(1) devaddr,direction(1) addr(2) data(wlen) (len(2) (when reading)) */
 +      u8 *sndbuf;
 +      int ret, wo, len;
 +
        /* write only ? */
 -      int wo = (rbuf == NULL || rlen == 0),
 -              len = 2 + wlen + (wo ? 0 : 2);
 +      wo = (rbuf == NULL || rlen == 0);
 +
 +      len = 2 + wlen + (wo ? 0 : 2);
 +
 +      sndbuf = kmalloc(MAX_XFER_SIZE, GFP_KERNEL);
 +      if (!sndbuf)
 +              return -ENOMEM;
  
 -      if (4 + wlen > sizeof(sndbuf)) {
 +      if (4 + wlen > MAX_XFER_SIZE) {
                warn("i2c wr: len=%d is too big!\n", wlen);
 -              return -EOPNOTSUPP;
 +              ret = -EOPNOTSUPP;
 +              goto ret;
        }
  
        sndbuf[0] = wo ? DIBUSB_REQ_I2C_WRITE : DIBUSB_REQ_I2C_READ;
        sndbuf[1] = (addr << 1) | (wo ? 0 : 1);
  
 -      memcpy(&sndbuf[2],wbuf,wlen);
 +      memcpy(&sndbuf[2], wbuf, wlen);
  
        if (!wo) {
 -              sndbuf[wlen+2] = (rlen >> 8) & 0xff;
 -              sndbuf[wlen+3] = rlen & 0xff;
 +              sndbuf[wlen + 2] = (rlen >> 8) & 0xff;
 +              sndbuf[wlen + 3] = rlen & 0xff;
        }
  
 -      return dvb_usb_generic_rw(d,sndbuf,len,rbuf,rlen,0);
 +      ret = dvb_usb_generic_rw(d, sndbuf, len, rbuf, rlen, 0);
 +
 +ret:
 +      kfree(sndbuf);
 +      return ret;
  }
  
  /*
@@@ -365,27 -319,11 +364,27 @@@ EXPORT_SYMBOL(rc_map_dibusb_table)
  
  int dibusb_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
  {
 -      u8 key[5],cmd = DIBUSB_REQ_POLL_REMOTE;
 -      dvb_usb_generic_rw(d,&cmd,1,key,5,0);
 -      dvb_usb_nec_rc_key_to_event(d,key,event,state);
 -      if (key[0] != 0)
 -              deb_info("key: %*ph\n", 5, key);
 -      return 0;
 +      u8 *buf;
 +      int ret;
 +
 +      buf = kmalloc(5, GFP_KERNEL);
 +      if (!buf)
 +              return -ENOMEM;
 +
 +      buf[0] = DIBUSB_REQ_POLL_REMOTE;
 +
 +      ret = dvb_usb_generic_rw(d, buf, 1, buf, 5, 0);
 +      if (ret < 0)
 +              goto ret;
 +
 +      dvb_usb_nec_rc_key_to_event(d, buf, event, state);
 +
 +      if (buf[0] != 0)
 +              deb_info("key: %*ph\n", 5, buf);
 +
 +      kfree(buf);
 +
 +ret:
 +      return ret;
  }
  EXPORT_SYMBOL(dibusb_rc_query);