@@ -26,6 +26,9 @@ add pr_fmt.patch
add debug.patch
add drx39xxj.patch
+[4.12.255]
+add v4.12_revert_solo6x10_copykerneluser.patch
+
[4.10.255]
add v4.10_sched_signal.patch
add v4.10_fault_page.patch
new file mode 100644
@@ -0,0 +1,71 @@
+commit bbf3d164ec2723f090533c14ec1dc166eaca46f8
+Author: Daniel Scheller <d.scheller@gmx.net>
+Date: Fri Jul 21 20:41:49 2017 +0200
+
+ Revert "[media] solo6x10: Convert to the new PCM ops"
+
+ This reverts commit 1facf21e8b903524b34f09c39a7d27b4b71a07f7.
+
+diff --git a/drivers/media/pci/solo6x10/solo6x10-g723.c b/drivers/media/pci/solo6x10/solo6x10-g723.c
+index 3ca947092775..36e93540bb49 100644
+--- a/drivers/media/pci/solo6x10/solo6x10-g723.c
++++ b/drivers/media/pci/solo6x10/solo6x10-g723.c
+@@ -223,9 +223,9 @@ static snd_pcm_uframes_t snd_solo_pcm_pointer(struct snd_pcm_substream *ss)
+ return idx * G723_FRAMES_PER_PAGE;
+ }
+
+-static int __snd_solo_pcm_copy(struct snd_pcm_substream *ss,
+- unsigned long pos, void *dst,
+- unsigned long count, bool in_kernel)
++static int snd_solo_pcm_copy(struct snd_pcm_substream *ss, int channel,
++ snd_pcm_uframes_t pos, void __user *dst,
++ snd_pcm_uframes_t count)
+ {
+ struct solo_snd_pcm *solo_pcm = snd_pcm_substream_chip(ss);
+ struct solo_dev *solo_dev = solo_pcm->solo_dev;
+@@ -242,31 +242,16 @@ static int __snd_solo_pcm_copy(struct snd_pcm_substream *ss,
+ if (err)
+ return err;
+
+- if (in_kernel)
+- memcpy(dst, solo_pcm->g723_buf, G723_PERIOD_BYTES);
+- else if (copy_to_user((void __user *)dst,
+- solo_pcm->g723_buf, G723_PERIOD_BYTES))
++ err = copy_to_user(dst + (i * G723_PERIOD_BYTES),
++ solo_pcm->g723_buf, G723_PERIOD_BYTES);
++
++ if (err)
+ return -EFAULT;
+- dst += G723_PERIOD_BYTES;
+ }
+
+ return 0;
+ }
+
+-static int snd_solo_pcm_copy_user(struct snd_pcm_substream *ss, int channel,
+- unsigned long pos, void __user *dst,
+- unsigned long count)
+-{
+- return __snd_solo_pcm_copy(ss, pos, (void *)dst, count, false);
+-}
+-
+-static int snd_solo_pcm_copy_kernel(struct snd_pcm_substream *ss, int channel,
+- unsigned long pos, void *dst,
+- unsigned long count)
+-{
+- return __snd_solo_pcm_copy(ss, pos, dst, count, true);
+-}
+-
+ static const struct snd_pcm_ops snd_solo_pcm_ops = {
+ .open = snd_solo_pcm_open,
+ .close = snd_solo_pcm_close,
+@@ -276,8 +261,7 @@ static const struct snd_pcm_ops snd_solo_pcm_ops = {
+ .prepare = snd_solo_pcm_prepare,
+ .trigger = snd_solo_pcm_trigger,
+ .pointer = snd_solo_pcm_pointer,
+- .copy_user = snd_solo_pcm_copy_user,
+- .copy_kernel = snd_solo_pcm_copy_kernel,
++ .copy = snd_solo_pcm_copy,
+ };
+
+ static int snd_solo_capture_volume_info(struct snd_kcontrol *kcontrol,