diff options
Diffstat (limited to 'sound/core/pcm_compat.c')
| -rw-r--r-- | sound/core/pcm_compat.c | 22 | 
1 files changed, 13 insertions, 9 deletions
diff --git a/sound/core/pcm_compat.c b/sound/core/pcm_compat.c index 5fb2e28e796..af49721ba0e 100644 --- a/sound/core/pcm_compat.c +++ b/sound/core/pcm_compat.c @@ -190,7 +190,9 @@ struct snd_pcm_status32 {  	u32 avail_max;  	u32 overrange;  	s32 suspended_state; -	unsigned char reserved[60]; +	u32 reserved_alignment; +	struct compat_timespec audio_tstamp; +	unsigned char reserved[56-sizeof(struct compat_timespec)];  } __attribute__((packed)); @@ -205,17 +207,16 @@ static int snd_pcm_status_user_compat(struct snd_pcm_substream *substream,  		return err;  	if (put_user(status.state, &src->state) || -	    put_user(status.trigger_tstamp.tv_sec, &src->trigger_tstamp.tv_sec) || -	    put_user(status.trigger_tstamp.tv_nsec, &src->trigger_tstamp.tv_nsec) || -	    put_user(status.tstamp.tv_sec, &src->tstamp.tv_sec) || -	    put_user(status.tstamp.tv_nsec, &src->tstamp.tv_nsec) || +	    compat_put_timespec(&status.trigger_tstamp, &src->trigger_tstamp) || +	    compat_put_timespec(&status.tstamp, &src->tstamp) ||  	    put_user(status.appl_ptr, &src->appl_ptr) ||  	    put_user(status.hw_ptr, &src->hw_ptr) ||  	    put_user(status.delay, &src->delay) ||  	    put_user(status.avail, &src->avail) ||  	    put_user(status.avail_max, &src->avail_max) ||  	    put_user(status.overrange, &src->overrange) || -	    put_user(status.suspended_state, &src->suspended_state)) +	    put_user(status.suspended_state, &src->suspended_state) || +	    compat_put_timespec(&status.audio_tstamp, &src->audio_tstamp))  		return -EFAULT;  	return err; @@ -342,7 +343,7 @@ static int snd_pcm_ioctl_xfern_compat(struct snd_pcm_substream *substream,  			kfree(bufs);  			return -EFAULT;  		} -		bufs[ch] = compat_ptr(ptr); +		bufs[i] = compat_ptr(ptr);  		bufptr++;  	}  	if (dir == SNDRV_PCM_STREAM_PLAYBACK) @@ -364,6 +365,7 @@ struct snd_pcm_mmap_status32 {  	u32 hw_ptr;  	struct compat_timespec tstamp;  	s32 suspended_state; +	struct compat_timespec audio_tstamp;  } __attribute__((packed));  struct snd_pcm_mmap_control32 { @@ -426,12 +428,14 @@ static int snd_pcm_ioctl_sync_ptr_compat(struct snd_pcm_substream *substream,  	sstatus.hw_ptr = status->hw_ptr % boundary;  	sstatus.tstamp = status->tstamp;  	sstatus.suspended_state = status->suspended_state; +	sstatus.audio_tstamp = status->audio_tstamp;  	snd_pcm_stream_unlock_irq(substream);  	if (put_user(sstatus.state, &src->s.status.state) ||  	    put_user(sstatus.hw_ptr, &src->s.status.hw_ptr) || -	    put_user(sstatus.tstamp.tv_sec, &src->s.status.tstamp.tv_sec) || -	    put_user(sstatus.tstamp.tv_nsec, &src->s.status.tstamp.tv_nsec) || +	    compat_put_timespec(&sstatus.tstamp, &src->s.status.tstamp) ||  	    put_user(sstatus.suspended_state, &src->s.status.suspended_state) || +	    compat_put_timespec(&sstatus.audio_tstamp, +		    &src->s.status.audio_tstamp) ||  	    put_user(scontrol.appl_ptr, &src->c.control.appl_ptr) ||  	    put_user(scontrol.avail_min, &src->c.control.avail_min))  		return -EFAULT;  | 
