mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-08 12:48:05 +02:00
Fix embarrasing dyslexia problem in layout of allowed register packets.
Thought two registers were contiguous, but they weren't. I wonder if
this will fix any random bugs out there.
This commit is contained in:
parent
a4967c0cad
commit
b0894da3a4
1 changed files with 25 additions and 7 deletions
|
|
@ -1585,19 +1585,37 @@ static int radeon_emit_packets(
|
|||
drm_radeon_cmd_header_t header,
|
||||
drm_radeon_cmd_buffer_t *cmdbuf )
|
||||
{
|
||||
int sz = packet[(int)header.packet.packet_id].len;
|
||||
int reg = packet[(int)header.packet.packet_id].start;
|
||||
int id = (int)header.packet.packet_id;
|
||||
int sz = packet[id].len;
|
||||
int reg = packet[id].start;
|
||||
int *data = (int *)cmdbuf->buf;
|
||||
RING_LOCALS;
|
||||
|
||||
if (sz * sizeof(int) > cmdbuf->bufsz)
|
||||
return -EINVAL;
|
||||
|
||||
|
||||
BEGIN_RING(sz+1);
|
||||
OUT_RING( CP_PACKET0( reg, (sz-1) ) );
|
||||
OUT_RING_USER_TABLE( data, sz );
|
||||
ADVANCE_RING();
|
||||
/* Embarrassing dyslexia problem, fixed up here rather than
|
||||
* changing the interface.
|
||||
*/
|
||||
if (id == RADEON_EMIT_SE_CNTL) {
|
||||
int tmp;
|
||||
BEGIN_RING(4);
|
||||
OUT_RING( CP_PACKET0( RADEON_SE_CNTL, 0 ) );
|
||||
if (__get_user( tmp, &data[0]))
|
||||
return -EFAULT;
|
||||
OUT_RING( tmp );
|
||||
OUT_RING( CP_PACKET0( RADEON_SE_COORD_FMT, 0 ) );
|
||||
if (__get_user( tmp, &data[1]))
|
||||
return -EFAULT;
|
||||
OUT_RING( tmp );
|
||||
ADVANCE_RING();
|
||||
}
|
||||
else {
|
||||
BEGIN_RING(sz+1);
|
||||
OUT_RING( CP_PACKET0( reg, (sz-1) ) );
|
||||
OUT_RING_USER_TABLE( data, sz );
|
||||
ADVANCE_RING();
|
||||
}
|
||||
|
||||
cmdbuf->buf += sz * sizeof(int);
|
||||
cmdbuf->bufsz -= sz * sizeof(int);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue