All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/3] Audio 20170717 patches
@ 2017-07-17  9:29 Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop Gerd Hoffmann
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2017-07-17  9:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

The following changes since commit 6e2c46334385c7e295ac883c801c81b4925fb54f:

  Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20170711' into staging (2017-07-13 10:47:10 +0100)

are available in the git repository at:

  git://git.kraxel.org/qemu tags/audio-20170717-pull-request

for you to fetch changes up to 639b49ef9a4dc9555ed6aaefa8dfda621e4165cf:

  audio/adlib: remove limitation of one adlib card (2017-07-17 11:09:02 +0200)

----------------------------------------------------------------
audio: fixes for 2.10

----------------------------------------------------------------

Hervé Poussineau (2):
  audio/fmopl: modify timer callback to give opaque and channel
    parameters in two arguments
  audio/adlib: remove limitation of one adlib card

Peng Hao (1):
  audio: st_rate_flow exist a infinite loop

 audio/rate_template.h |  6 ++++++
 hw/audio/fmopl.h      |  7 ++++---
 hw/audio/adlib.c      | 14 +++-----------
 hw/audio/fmopl.c      | 18 +++++++++++++-----
 4 files changed, 26 insertions(+), 19 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop
  2017-07-17  9:29 [Qemu-devel] [PULL 0/3] Audio 20170717 patches Gerd Hoffmann
@ 2017-07-17  9:29 ` Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 2/3] audio/fmopl: modify timer callback to give opaque and channel parameters in two arguments Gerd Hoffmann
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2017-07-17  9:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peng Hao, Wang Yechao, Gerd Hoffmann

From: Peng Hao <peng.hao2@zte.com.cn>

If a voice recording equipment is opened for a long time(several days)
in windows guest, rate->ipos will overflow and rate->opos will never
have a chance to change. It will result to a infinite loop.

Signed-off-by: Peng Hao <peng.hao2@zte.com.cn>
Signed-off-by: Wang Yechao <wang.yechao255@zte.com.cn>
Message-id: 1500128061-20849-1-git-send-email-peng.hao2@zte.com.cn
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 audio/rate_template.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/audio/rate_template.h b/audio/rate_template.h
index bd4b1c7685..6e93588877 100644
--- a/audio/rate_template.h
+++ b/audio/rate_template.h
@@ -71,6 +71,12 @@ void NAME (void *opaque, struct st_sample *ibuf, struct st_sample *obuf,
         while (rate->ipos <= (rate->opos >> 32)) {
             ilast = *ibuf++;
             rate->ipos++;
+
+            /* if ipos overflow, there is  a infinite loop */
+            if (rate->ipos == 0xffffffff) {
+                rate->ipos = 1;
+                rate->opos = rate->opos & 0xffffffff;
+            }
             /* See if we finished the input buffer yet */
             if (ibuf >= iend) {
                 goto the_end;
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PULL 2/3] audio/fmopl: modify timer callback to give opaque and channel parameters in two arguments
  2017-07-17  9:29 [Qemu-devel] [PULL 0/3] Audio 20170717 patches Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop Gerd Hoffmann
@ 2017-07-17  9:29 ` Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 3/3] audio/adlib: remove limitation of one adlib card Gerd Hoffmann
  2017-07-17 15:31 ` [Qemu-devel] [PULL 0/3] Audio 20170717 patches Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2017-07-17  9:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau, Gerd Hoffmann

From: Hervé Poussineau <hpoussin@reactos.org>

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20170621043401.19842-2-hpoussin@reactos.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/audio/fmopl.h |  7 ++++---
 hw/audio/adlib.c |  2 +-
 hw/audio/fmopl.c | 18 +++++++++++++-----
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/hw/audio/fmopl.h b/hw/audio/fmopl.h
index fc9f16b58a..f4065f425c 100644
--- a/hw/audio/fmopl.h
+++ b/hw/audio/fmopl.h
@@ -3,7 +3,7 @@
 
 #include <stdint.h>
 
-typedef void (*OPL_TIMERHANDLER)(int channel,double interval_Sec);
+typedef void (*OPL_TIMERHANDLER)(void *param, int channel, double interval_Sec);
 
 /* !!!!! here is private section , do not access there member direct !!!!! */
 
@@ -87,13 +87,14 @@ typedef struct fm_opl_f {
 	uint8_t wavesel;
 	/* external event callback handler */
 	OPL_TIMERHANDLER  TimerHandler;		/* TIMER handler   */
-	int TimerParam;						/* TIMER parameter */
+    void *TimerParam; /* TIMER parameter */
 } FM_OPL;
 
 /* ---------- Generic interface section ---------- */
 FM_OPL *OPLCreate(int clock, int rate);
 void OPLDestroy(FM_OPL *OPL);
-void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset);
+void OPLSetTimerHandler(FM_OPL *OPL, OPL_TIMERHANDLER TimerHandler,
+                        void *param);
 
 int OPLWrite(FM_OPL *OPL,int a,int v);
 unsigned char OPLRead(FM_OPL *OPL,int a);
diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index c6e0f10c16..be4203476a 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -130,7 +130,7 @@ static uint32_t adlib_read(void *opaque, uint32_t nport)
     return data;
 }
 
-static void timer_handler (int c, double interval_Sec)
+static void timer_handler (void *opaque, int c, double interval_Sec)
 {
     AdlibState *s = glob_adlib;
     unsigned n = c & 1;
diff --git a/hw/audio/fmopl.c b/hw/audio/fmopl.c
index 202f752c5d..5cfb6a96dd 100644
--- a/hw/audio/fmopl.c
+++ b/hw/audio/fmopl.c
@@ -788,14 +788,18 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v)
 				{
 					double interval = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0;
 					OPL->st[1] = st2;
-					if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+1,interval);
+                    if (OPL->TimerHandler) {
+                        (OPL->TimerHandler)(OPL->TimerParam, 1, interval);
+                    }
 				}
 				/* timer 1 */
 				if(OPL->st[0] != st1)
 				{
 					double interval = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0;
 					OPL->st[0] = st1;
-					if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+0,interval);
+                    if (OPL->TimerHandler) {
+                        (OPL->TimerHandler)(OPL->TimerParam, 0, interval);
+                    }
 				}
 			}
 			return;
@@ -1128,10 +1132,11 @@ void OPLDestroy(FM_OPL *OPL)
 
 /* ----------  Option handlers ----------       */
 
-void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset)
+void OPLSetTimerHandler(FM_OPL *OPL, OPL_TIMERHANDLER TimerHandler,
+                        void *param)
 {
 	OPL->TimerHandler   = TimerHandler;
-	OPL->TimerParam = channelOffset;
+    OPL->TimerParam = param;
 }
 
 /* ---------- YM3812 I/O interface ---------- */
@@ -1197,6 +1202,9 @@ int OPLTimerOver(FM_OPL *OPL,int c)
 		}
 	}
 	/* reload timer */
-	if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+c,(double)OPL->T[c]*OPL->TimerBase);
+    if (OPL->TimerHandler) {
+        (OPL->TimerHandler)(OPL->TimerParam, c,
+                            (double)OPL->T[c] * OPL->TimerBase);
+    }
 	return OPL->status>>7;
 }
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PULL 3/3] audio/adlib: remove limitation of one adlib card
  2017-07-17  9:29 [Qemu-devel] [PULL 0/3] Audio 20170717 patches Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop Gerd Hoffmann
  2017-07-17  9:29 ` [Qemu-devel] [PULL 2/3] audio/fmopl: modify timer callback to give opaque and channel parameters in two arguments Gerd Hoffmann
@ 2017-07-17  9:29 ` Gerd Hoffmann
  2017-07-17 15:31 ` [Qemu-devel] [PULL 0/3] Audio 20170717 patches Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2017-07-17  9:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau, Gerd Hoffmann

From: Hervé Poussineau <hpoussin@reactos.org>

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20170621043401.19842-3-hpoussin@reactos.org
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/audio/adlib.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c
index be4203476a..97b876c7e0 100644
--- a/hw/audio/adlib.c
+++ b/hw/audio/adlib.c
@@ -74,8 +74,6 @@ typedef struct {
     PortioList port_list;
 } AdlibState;
 
-static AdlibState *glob_adlib;
-
 static void adlib_stop_opl_timer (AdlibState *s, size_t n)
 {
     OPLTimerOver (s->opl, n);
@@ -132,7 +130,7 @@ static uint32_t adlib_read(void *opaque, uint32_t nport)
 
 static void timer_handler (void *opaque, int c, double interval_Sec)
 {
-    AdlibState *s = glob_adlib;
+    AdlibState *s = opaque;
     unsigned n = c & 1;
 #ifdef DEBUG
     double interval;
@@ -259,19 +257,13 @@ static void adlib_realizefn (DeviceState *dev, Error **errp)
     AdlibState *s = ADLIB(dev);
     struct audsettings as;
 
-    if (glob_adlib) {
-        error_setg (errp, "Cannot create more than 1 adlib device");
-        return;
-    }
-    glob_adlib = s;
-
     s->opl = OPLCreate (3579545, s->freq);
     if (!s->opl) {
         error_setg (errp, "OPLCreate %d failed", s->freq);
         return;
     }
     else {
-        OPLSetTimerHandler (s->opl, timer_handler, 0);
+        OPLSetTimerHandler(s->opl, timer_handler, s);
         s->enabled = 1;
     }
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PULL 0/3] Audio 20170717 patches
  2017-07-17  9:29 [Qemu-devel] [PULL 0/3] Audio 20170717 patches Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2017-07-17  9:29 ` [Qemu-devel] [PULL 3/3] audio/adlib: remove limitation of one adlib card Gerd Hoffmann
@ 2017-07-17 15:31 ` Peter Maydell
  3 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2017-07-17 15:31 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: QEMU Developers

On 17 July 2017 at 10:29, Gerd Hoffmann <kraxel@redhat.com> wrote:
> The following changes since commit 6e2c46334385c7e295ac883c801c81b4925fb54f:
>
>   Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20170711' into staging (2017-07-13 10:47:10 +0100)
>
> are available in the git repository at:
>
>   git://git.kraxel.org/qemu tags/audio-20170717-pull-request
>
> for you to fetch changes up to 639b49ef9a4dc9555ed6aaefa8dfda621e4165cf:
>
>   audio/adlib: remove limitation of one adlib card (2017-07-17 11:09:02 +0200)
>
> ----------------------------------------------------------------
> audio: fixes for 2.10
>
> ----------------------------------------------------------------
>
> Hervé Poussineau (2):
>   audio/fmopl: modify timer callback to give opaque and channel
>     parameters in two arguments
>   audio/adlib: remove limitation of one adlib card
>
> Peng Hao (1):
>   audio: st_rate_flow exist a infinite loop
>
>  audio/rate_template.h |  6 ++++++
>  hw/audio/fmopl.h      |  7 ++++---
>  hw/audio/adlib.c      | 14 +++-----------
>  hw/audio/fmopl.c      | 18 +++++++++++++-----
>  4 files changed, 26 insertions(+), 19 deletions(-)

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-07-17 15:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-17  9:29 [Qemu-devel] [PULL 0/3] Audio 20170717 patches Gerd Hoffmann
2017-07-17  9:29 ` [Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop Gerd Hoffmann
2017-07-17  9:29 ` [Qemu-devel] [PULL 2/3] audio/fmopl: modify timer callback to give opaque and channel parameters in two arguments Gerd Hoffmann
2017-07-17  9:29 ` [Qemu-devel] [PULL 3/3] audio/adlib: remove limitation of one adlib card Gerd Hoffmann
2017-07-17 15:31 ` [Qemu-devel] [PULL 0/3] Audio 20170717 patches Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.