commit:     842a300d1a91309aa52cc94b961324e72a91e106
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Tue May  5 17:37:16 2020 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Tue May  5 17:37:16 2020 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=842a300d

Linux patch 4.4.222

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |   4 +
 1221_linux-4.4.222.patch | 536 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 540 insertions(+)

diff --git a/0000_README b/0000_README
index 0853ee6..80253f1 100644
--- a/0000_README
+++ b/0000_README
@@ -927,6 +927,10 @@ Patch:  1220_linux-4.4.221.patch
 From:   http://www.kernel.org
 Desc:   Linux 4.4.221
 
+Patch:  1221_linux-4.4.222.patch
+From:   http://www.kernel.org
+Desc:   Linux 4.4.222
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1221_linux-4.4.222.patch b/1221_linux-4.4.222.patch
new file mode 100644
index 0000000..6c96b52
--- /dev/null
+++ b/1221_linux-4.4.222.patch
@@ -0,0 +1,536 @@
+diff --git a/Makefile b/Makefile
+index ea97d0869c89..03f34df673d9 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ VERSION = 4
+ PATCHLEVEL = 4
+-SUBLEVEL = 221
++SUBLEVEL = 222
+ EXTRAVERSION =
+ NAME = Blurry Fish Butt
+ 
+diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
+index 7d5e295255b7..9958ba8bf0d2 100644
+--- a/arch/powerpc/perf/power8-pmu.c
++++ b/arch/powerpc/perf/power8-pmu.c
+@@ -816,7 +816,7 @@ static struct power_pmu power8_pmu = {
+       .get_constraint         = power8_get_constraint,
+       .get_alternatives       = power8_get_alternatives,
+       .disable_pmc            = power8_disable_pmc,
+-      .flags                  = PPMU_HAS_SSLOT | PPMU_HAS_SIER | 
PPMU_ARCH_207S,
++      .flags                  = PPMU_HAS_SIER | PPMU_ARCH_207S,
+       .n_generic              = ARRAY_SIZE(power8_generic_events),
+       .generic_events         = power8_generic_events,
+       .cache_events           = &power8_cache_events,
+diff --git a/arch/x86/kernel/cpu/perf_event_intel.c 
b/arch/x86/kernel/cpu/perf_event_intel.c
+index 3572434a73cb..f65f74163ff7 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel.c
++++ b/arch/x86/kernel/cpu/perf_event_intel.c
+@@ -1937,7 +1937,8 @@ intel_bts_constraints(struct perf_event *event)
+ 
+ static int intel_alt_er(int idx, u64 config)
+ {
+-      int alt_idx;
++      int alt_idx = idx;
++
+       if (!(x86_pmu.flags & PMU_FL_HAS_RSP_1))
+               return idx;
+ 
+diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
+index 829b20a3bb0a..4c3d24de9f8b 100644
+--- a/drivers/acpi/device_pm.c
++++ b/drivers/acpi/device_pm.c
+@@ -225,13 +225,13 @@ int acpi_device_set_power(struct acpi_device *device, 
int state)
+  end:
+       if (result) {
+               dev_warn(&device->dev, "Failed to change power state to %s\n",
+-                       acpi_power_state_string(state));
++                       acpi_power_state_string(target_state));
+       } else {
+               device->power.state = target_state;
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+                                 "Device [%s] transitioned to %s\n",
+                                 device->pnp.bus_id,
+-                                acpi_power_state_string(state)));
++                                acpi_power_state_string(target_state)));
+       }
+ 
+       return result;
+diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
+index 884aecebb249..79c131746caa 100644
+--- a/drivers/dma/dmatest.c
++++ b/drivers/dma/dmatest.c
+@@ -491,8 +491,8 @@ static int dmatest_func(void *data)
+       flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
+ 
+       ktime = ktime_get();
+-      while (!kthread_should_stop()
+-             && !(params->iterations && total_tests >= params->iterations)) {
++      while (!(kthread_should_stop() ||
++             (params->iterations && total_tests >= params->iterations))) {
+               struct dma_async_tx_descriptor *tx = NULL;
+               struct dmaengine_unmap_data *um;
+               dma_addr_t srcs[src_cnt];
+diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
+index fdc1833b1af8..d8066ac1e764 100644
+--- a/drivers/gpu/drm/qxl/qxl_cmd.c
++++ b/drivers/gpu/drm/qxl/qxl_cmd.c
+@@ -500,9 +500,10 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
+               return ret;
+ 
+       ret = qxl_release_reserve_list(release, true);
+-      if (ret)
++      if (ret) {
++              qxl_release_free(qdev, release);
+               return ret;
+-
++      }
+       cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
+       cmd->type = QXL_SURFACE_CMD_CREATE;
+       cmd->flags = QXL_SURF_FLAG_KEEP_DATA;
+diff --git a/drivers/i2c/busses/i2c-designware-core.c 
b/drivers/i2c/busses/i2c-designware-core.c
+index de7fbbb374cd..914994c232ad 100644
+--- a/drivers/i2c/busses/i2c-designware-core.c
++++ b/drivers/i2c/busses/i2c-designware-core.c
+@@ -865,7 +865,8 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
+       i2c_set_adapdata(adap, dev);
+ 
+       i2c_dw_disable_int(dev);
+-      r = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, IRQF_SHARED,
++      r = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr,
++                           IRQF_SHARED | IRQF_COND_SUSPEND,
+                            dev_name(dev->dev), dev);
+       if (r) {
+               dev_err(dev->dev, "failure requesting irq %i: %d\n",
+diff --git a/drivers/infiniband/hw/mlx4/main.c 
b/drivers/infiniband/hw/mlx4/main.c
+index 6968154a073e..ac9f173c4311 100644
+--- a/drivers/infiniband/hw/mlx4/main.c
++++ b/drivers/infiniband/hw/mlx4/main.c
+@@ -1435,8 +1435,9 @@ static int __mlx4_ib_create_default_rules(
+       int i;
+ 
+       for (i = 0; i < ARRAY_SIZE(pdefault_rules->rules_create_list); i++) {
++              union ib_flow_spec ib_spec = {};
+               int ret;
+-              union ib_flow_spec ib_spec;
++
+               switch (pdefault_rules->rules_create_list[i]) {
+               case 0:
+                       /* no rule */
+diff --git a/drivers/media/platform/exynos4-is/fimc-isp-video.c 
b/drivers/media/platform/exynos4-is/fimc-isp-video.c
+index 4b7803cec37f..6297b32eab31 100644
+--- a/drivers/media/platform/exynos4-is/fimc-isp-video.c
++++ b/drivers/media/platform/exynos4-is/fimc-isp-video.c
+@@ -221,8 +221,8 @@ static void isp_video_capture_buffer_queue(struct 
vb2_buffer *vb)
+                                                       ivb->dma_addr[i];
+ 
+                       isp_dbg(2, &video->ve.vdev,
+-                              "dma_buf %pad (%d/%d/%d) addr: %pad\n",
+-                              &buf_index, ivb->index, i, vb->index,
++                              "dma_buf %d (%d/%d/%d) addr: %pad\n",
++                              buf_index, ivb->index, i, vb->index,
+                               &ivb->dma_addr[i]);
+               }
+ 
+diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
+index 875634d0d020..d394911ec0c9 100644
+--- a/drivers/vfio/vfio_iommu_type1.c
++++ b/drivers/vfio/vfio_iommu_type1.c
+@@ -227,8 +227,8 @@ static int vaddr_get_pfn(unsigned long vaddr, int prot, 
unsigned long *pfn)
+       vma = find_vma_intersection(current->mm, vaddr, vaddr + 1);
+ 
+       if (vma && vma->vm_flags & VM_PFNMAP) {
+-              *pfn = ((vaddr - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
+-              if (is_invalid_reserved_pfn(*pfn))
++              if (!follow_pfn(vma, vaddr, pfn) &&
++                  is_invalid_reserved_pfn(*pfn))
+                       ret = 0;
+       }
+ 
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index 805d38a14002..8e7997010ba1 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -4233,7 +4233,7 @@ struct inode *__ext4_iget(struct super_block *sb, 
unsigned long ino,
+       uid_t i_uid;
+       gid_t i_gid;
+ 
+-      if (((flags & EXT4_IGET_NORMAL) &&
++      if ((!(flags & EXT4_IGET_SPECIAL) &&
+            (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO)) ||
+           (ino < EXT4_ROOT_INO) ||
+           (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))) {
+diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
+index 1ebe2fc7cda2..05c697d5b477 100644
+--- a/fs/nfs/nfs3acl.c
++++ b/fs/nfs/nfs3acl.c
+@@ -213,37 +213,45 @@ int nfs3_proc_setacls(struct inode *inode, struct 
posix_acl *acl,
+ 
+ int nfs3_set_acl(struct inode *inode, struct posix_acl *acl, int type)
+ {
+-      struct posix_acl *alloc = NULL, *dfacl = NULL;
++      struct posix_acl *orig = acl, *dfacl = NULL, *alloc;
+       int status;
+ 
+       if (S_ISDIR(inode->i_mode)) {
+               switch(type) {
+               case ACL_TYPE_ACCESS:
+-                      alloc = dfacl = get_acl(inode, ACL_TYPE_DEFAULT);
++                      alloc = get_acl(inode, ACL_TYPE_DEFAULT);
+                       if (IS_ERR(alloc))
+                               goto fail;
++                      dfacl = alloc;
+                       break;
+ 
+               case ACL_TYPE_DEFAULT:
+-                      dfacl = acl;
+-                      alloc = acl = get_acl(inode, ACL_TYPE_ACCESS);
++                      alloc = get_acl(inode, ACL_TYPE_ACCESS);
+                       if (IS_ERR(alloc))
+                               goto fail;
++                      dfacl = acl;
++                      acl = alloc;
+                       break;
+               }
+       }
+ 
+       if (acl == NULL) {
+-              alloc = acl = posix_acl_from_mode(inode->i_mode, GFP_KERNEL);
++              alloc = posix_acl_from_mode(inode->i_mode, GFP_KERNEL);
+               if (IS_ERR(alloc))
+                       goto fail;
++              acl = alloc;
+       }
+       status = __nfs3_proc_setacls(inode, acl, dfacl);
+-      posix_acl_release(alloc);
++out:
++      if (acl != orig)
++              posix_acl_release(acl);
++      if (dfacl != orig)
++              posix_acl_release(dfacl);
+       return status;
+ 
+ fail:
+-      return PTR_ERR(alloc);
++      status = PTR_ERR(alloc);
++      goto out;
+ }
+ 
+ const struct xattr_handler *nfs3_xattr_handlers[] = {
+diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
+index 55953c5804c3..86c75e97cfec 100644
+--- a/net/ipv6/raw.c
++++ b/net/ipv6/raw.c
+@@ -757,6 +757,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t len)
+       int hlimit = -1;
+       int tclass = -1;
+       int dontfrag = -1;
++      int hdrincl;
+       u16 proto;
+       int err;
+ 
+@@ -770,6 +771,13 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t len)
+       if (msg->msg_flags & MSG_OOB)
+               return -EOPNOTSUPP;
+ 
++      /* hdrincl should be READ_ONCE(inet->hdrincl)
++       * but READ_ONCE() doesn't work with bit fields.
++       * Doing this indirectly yields the same result.
++       */
++      hdrincl = inet->hdrincl;
++      hdrincl = READ_ONCE(hdrincl);
++
+       /*
+        *      Get and verify the address.
+        */
+@@ -878,7 +886,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t len)
+               fl6.flowi6_oif = np->ucast_oif;
+       security_sk_classify_flow(sk, flowi6_to_flowi(&fl6));
+ 
+-      if (inet->hdrincl)
++      if (hdrincl)
+               fl6.flowi6_flags |= FLOWI_FLAG_KNOWN_NH;
+ 
+       dst = ip6_dst_lookup_flow(sk, &fl6, final_p);
+@@ -899,7 +907,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr 
*msg, size_t len)
+               goto do_confirm;
+ 
+ back_from_confirm:
+-      if (inet->hdrincl)
++      if (hdrincl)
+               err = rawv6_send_hdrinc(sk, msg, len, &fl6, &dst, 
msg->msg_flags);
+       else {
+               lock_sock(sk);
+diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
+index ab2759d88bc6..055bf769408e 100644
+--- a/security/selinux/hooks.c
++++ b/security/selinux/hooks.c
+@@ -4791,38 +4791,59 @@ static int selinux_tun_dev_open(void *security)
+ 
+ static int selinux_nlmsg_perm(struct sock *sk, struct sk_buff *skb)
+ {
+-      int err = 0;
+-      u32 perm;
++      int rc = 0;
++      unsigned int msg_len;
++      unsigned int data_len = skb->len;
++      unsigned char *data = skb->data;
+       struct nlmsghdr *nlh;
+       struct sk_security_struct *sksec = sk->sk_security;
++      u16 sclass = sksec->sclass;
++      u32 perm;
+ 
+-      if (skb->len < NLMSG_HDRLEN) {
+-              err = -EINVAL;
+-              goto out;
+-      }
+-      nlh = nlmsg_hdr(skb);
++      while (data_len >= nlmsg_total_size(0)) {
++              nlh = (struct nlmsghdr *)data;
+ 
+-      err = selinux_nlmsg_lookup(sksec->sclass, nlh->nlmsg_type, &perm);
+-      if (err) {
+-              if (err == -EINVAL) {
+-                      printk(KERN_WARNING
+-                             "SELinux: unrecognized netlink message:"
+-                             " protocol=%hu nlmsg_type=%hu sclass=%s\n",
+-                             sk->sk_protocol, nlh->nlmsg_type,
+-                             secclass_map[sksec->sclass - 1].name);
+-                      if (!selinux_enforcing || security_get_allow_unknown())
+-                              err = 0;
++              /* NOTE: the nlmsg_len field isn't reliably set by some netlink
++               *       users which means we can't reject skb's with bogus
++               *       length fields; our solution is to follow what
++               *       netlink_rcv_skb() does and simply skip processing at
++               *       messages with length fields that are clearly junk
++               */
++              if (nlh->nlmsg_len < NLMSG_HDRLEN || nlh->nlmsg_len > data_len)
++                      return 0;
++
++              rc = selinux_nlmsg_lookup(sclass, nlh->nlmsg_type, &perm);
++              if (rc == 0) {
++                      rc = sock_has_perm(current, sk, perm);
++                      if (rc)
++                              return rc;
++              } else if (rc == -EINVAL) {
++                      /* -EINVAL is a missing msg/perm mapping */
++                      pr_warn_ratelimited("SELinux: unrecognized netlink"
++                              " message: protocol=%hu nlmsg_type=%hu 
sclass=%s"
++                              " pid=%d comm=%s\n",
++                              sk->sk_protocol, nlh->nlmsg_type,
++                              secclass_map[sclass - 1].name,
++                              task_pid_nr(current), current->comm);
++                      if (selinux_enforcing && !security_get_allow_unknown())
++                              return rc;
++                      rc = 0;
++              } else if (rc == -ENOENT) {
++                      /* -ENOENT is a missing socket/class mapping, ignore */
++                      rc = 0;
++              } else {
++                      return rc;
+               }
+ 
+-              /* Ignore */
+-              if (err == -ENOENT)
+-                      err = 0;
+-              goto out;
++              /* move to the next message after applying netlink padding */
++              msg_len = NLMSG_ALIGN(nlh->nlmsg_len);
++              if (msg_len >= data_len)
++                      return 0;
++              data_len -= msg_len;
++              data += msg_len;
+       }
+ 
+-      err = sock_has_perm(current, sk, perm);
+-out:
+-      return err;
++      return rc;
+ }
+ 
+ #ifdef CONFIG_NETFILTER
+diff --git a/sound/core/oss/pcm_plugin.c b/sound/core/oss/pcm_plugin.c
+index 7c5d124d538c..6a7cbad90222 100644
+--- a/sound/core/oss/pcm_plugin.c
++++ b/sound/core/oss/pcm_plugin.c
+@@ -211,21 +211,23 @@ static snd_pcm_sframes_t plug_client_size(struct 
snd_pcm_substream *plug,
+       if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
+               plugin = snd_pcm_plug_last(plug);
+               while (plugin && drv_frames > 0) {
+-                      if (check_size && drv_frames > plugin->buf_frames)
+-                              drv_frames = plugin->buf_frames;
+                       plugin_prev = plugin->prev;
+                       if (plugin->src_frames)
+                               drv_frames = plugin->src_frames(plugin, 
drv_frames);
++                      if (check_size && plugin->buf_frames &&
++                          drv_frames > plugin->buf_frames)
++                              drv_frames = plugin->buf_frames;
+                       plugin = plugin_prev;
+               }
+       } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
+               plugin = snd_pcm_plug_first(plug);
+               while (plugin && drv_frames > 0) {
+                       plugin_next = plugin->next;
++                      if (check_size && plugin->buf_frames &&
++                          drv_frames > plugin->buf_frames)
++                              drv_frames = plugin->buf_frames;
+                       if (plugin->dst_frames)
+                               drv_frames = plugin->dst_frames(plugin, 
drv_frames);
+-                      if (check_size && drv_frames > plugin->buf_frames)
+-                              drv_frames = plugin->buf_frames;
+                       plugin = plugin_next;
+               }
+       } else
+@@ -251,26 +253,28 @@ static snd_pcm_sframes_t plug_slave_size(struct 
snd_pcm_substream *plug,
+               plugin = snd_pcm_plug_first(plug);
+               while (plugin && frames > 0) {
+                       plugin_next = plugin->next;
++                      if (check_size && plugin->buf_frames &&
++                          frames > plugin->buf_frames)
++                              frames = plugin->buf_frames;
+                       if (plugin->dst_frames) {
+                               frames = plugin->dst_frames(plugin, frames);
+                               if (frames < 0)
+                                       return frames;
+                       }
+-                      if (check_size && frames > plugin->buf_frames)
+-                              frames = plugin->buf_frames;
+                       plugin = plugin_next;
+               }
+       } else if (stream == SNDRV_PCM_STREAM_CAPTURE) {
+               plugin = snd_pcm_plug_last(plug);
+               while (plugin) {
+-                      if (check_size && frames > plugin->buf_frames)
+-                              frames = plugin->buf_frames;
+                       plugin_prev = plugin->prev;
+                       if (plugin->src_frames) {
+                               frames = plugin->src_frames(plugin, frames);
+                               if (frames < 0)
+                                       return frames;
+                       }
++                      if (check_size && plugin->buf_frames &&
++                          frames > plugin->buf_frames)
++                              frames = plugin->buf_frames;
+                       plugin = plugin_prev;
+               }
+       } else
+diff --git a/sound/isa/opti9xx/miro.c b/sound/isa/opti9xx/miro.c
+index 3a9067db1a84..7fbac24607bc 100644
+--- a/sound/isa/opti9xx/miro.c
++++ b/sound/isa/opti9xx/miro.c
+@@ -875,10 +875,13 @@ static void snd_miro_write(struct snd_miro *chip, 
unsigned char reg,
+       spin_unlock_irqrestore(&chip->lock, flags);
+ }
+ 
++static inline void snd_miro_write_mask(struct snd_miro *chip,
++              unsigned char reg, unsigned char value, unsigned char mask)
++{
++      unsigned char oldval = snd_miro_read(chip, reg);
+ 
+-#define snd_miro_write_mask(chip, reg, value, mask)   \
+-      snd_miro_write(chip, reg,                       \
+-              (snd_miro_read(chip, reg) & ~(mask)) | ((value) & (mask)))
++      snd_miro_write(chip, reg, (oldval & ~mask) | (value & mask));
++}
+ 
+ /*
+  *  Proc Interface
+diff --git a/sound/isa/opti9xx/opti92x-ad1848.c 
b/sound/isa/opti9xx/opti92x-ad1848.c
+index 0a5266003786..6777ae84b59e 100644
+--- a/sound/isa/opti9xx/opti92x-ad1848.c
++++ b/sound/isa/opti9xx/opti92x-ad1848.c
+@@ -327,10 +327,13 @@ static void snd_opti9xx_write(struct snd_opti9xx *chip, 
unsigned char reg,
+ }
+ 
+ 
+-#define snd_opti9xx_write_mask(chip, reg, value, mask)        \
+-      snd_opti9xx_write(chip, reg,                    \
+-              (snd_opti9xx_read(chip, reg) & ~(mask)) | ((value) & (mask)))
++static inline void snd_opti9xx_write_mask(struct snd_opti9xx *chip,
++              unsigned char reg, unsigned char value, unsigned char mask)
++{
++      unsigned char oldval = snd_opti9xx_read(chip, reg);
+ 
++      snd_opti9xx_write(chip, reg, (oldval & ~mask) | (value & mask));
++}
+ 
+ static int snd_opti9xx_configure(struct snd_opti9xx *chip,
+                                          long port,
+diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
+index 5380798883b5..10f6401e15c1 100644
+--- a/sound/soc/codecs/wm8960.c
++++ b/sound/soc/codecs/wm8960.c
+@@ -631,29 +631,31 @@ static int wm8960_configure_clocking(struct 
snd_soc_codec *codec)
+               return -EINVAL;
+       }
+ 
+-      /* check if the sysclk frequency is available. */
+-      for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
+-              if (sysclk_divs[i] == -1)
+-                      continue;
+-              sysclk = freq_out / sysclk_divs[i];
+-              for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) {
+-                      if (sysclk == dac_divs[j] * lrclk) {
++      if (wm8960->clk_id != WM8960_SYSCLK_PLL) {
++              /* check if the sysclk frequency is available. */
++              for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
++                      if (sysclk_divs[i] == -1)
++                              continue;
++                      sysclk = freq_out / sysclk_divs[i];
++                      for (j = 0; j < ARRAY_SIZE(dac_divs); ++j) {
++                              if (sysclk != dac_divs[j] * lrclk)
++                                      continue;
+                               for (k = 0; k < ARRAY_SIZE(bclk_divs); ++k)
+                                       if (sysclk == bclk * bclk_divs[k] / 10)
+                                               break;
+                               if (k != ARRAY_SIZE(bclk_divs))
+                                       break;
+                       }
++                      if (j != ARRAY_SIZE(dac_divs))
++                              break;
+               }
+-              if (j != ARRAY_SIZE(dac_divs))
+-                      break;
+-      }
+ 
+-      if (i != ARRAY_SIZE(sysclk_divs)) {
+-              goto configure_clock;
+-      } else if (wm8960->clk_id != WM8960_SYSCLK_AUTO) {
+-              dev_err(codec->dev, "failed to configure clock\n");
+-              return -EINVAL;
++              if (i != ARRAY_SIZE(sysclk_divs)) {
++                      goto configure_clock;
++              } else if (wm8960->clk_id != WM8960_SYSCLK_AUTO) {
++                      dev_err(codec->dev, "failed to configure clock\n");
++                      return -EINVAL;
++              }
+       }
+       /* get a available pll out frequency and set pll */
+       for (i = 0; i < ARRAY_SIZE(sysclk_divs); ++i) {
+diff --git a/sound/soc/fsl/imx-spdif.c b/sound/soc/fsl/imx-spdif.c
+index a407e833c612..fb896b2c9ba3 100644
+--- a/sound/soc/fsl/imx-spdif.c
++++ b/sound/soc/fsl/imx-spdif.c
+@@ -72,8 +72,6 @@ static int imx_spdif_audio_probe(struct platform_device 
*pdev)
+               goto end;
+       }
+ 
+-      platform_set_drvdata(pdev, data);
+-
+ end:
+       of_node_put(spdif_np);
+ 
+diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
+index 97ebd1d3646d..9f1db4a69e80 100644
+--- a/tools/perf/util/hist.c
++++ b/tools/perf/util/hist.c
+@@ -131,6 +131,8 @@ void hists__calc_col_len(struct hists *hists, struct 
hist_entry *h)
+                       symlen = unresolved_col_width + 4 + 2;
+                       hists__new_col_len(hists, HISTC_MEM_DADDR_SYMBOL,
+                                          symlen);
++                      hists__new_col_len(hists, HISTC_MEM_DCACHELINE,
++                                         symlen);
+               }
+ 
+               if (h->mem_info->iaddr.sym) {

Reply via email to