@@ -1137,10 +1137,7 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
1137
1137
unsigned long payload , buffer_end , transmit_header_bytes = 0 ;
1138
1138
u32 control ;
1139
1139
int count ;
1140
- struct {
1141
- struct fw_iso_packet packet ;
1142
- u8 header [256 ];
1143
- } u ;
1140
+ DEFINE_RAW_FLEX (struct fw_iso_packet , u , header , 64 );
1144
1141
1145
1142
if (ctx == NULL || a -> handle != 0 )
1146
1143
return - EINVAL ;
@@ -1172,29 +1169,29 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
1172
1169
while (p < end ) {
1173
1170
if (get_user (control , & p -> control ))
1174
1171
return - EFAULT ;
1175
- u . packet . payload_length = GET_PAYLOAD_LENGTH (control );
1176
- u . packet . interrupt = GET_INTERRUPT (control );
1177
- u . packet . skip = GET_SKIP (control );
1178
- u . packet . tag = GET_TAG (control );
1179
- u . packet . sy = GET_SY (control );
1180
- u . packet . header_length = GET_HEADER_LENGTH (control );
1172
+ u -> payload_length = GET_PAYLOAD_LENGTH (control );
1173
+ u -> interrupt = GET_INTERRUPT (control );
1174
+ u -> skip = GET_SKIP (control );
1175
+ u -> tag = GET_TAG (control );
1176
+ u -> sy = GET_SY (control );
1177
+ u -> header_length = GET_HEADER_LENGTH (control );
1181
1178
1182
1179
switch (ctx -> type ) {
1183
1180
case FW_ISO_CONTEXT_TRANSMIT :
1184
- if (u . packet . header_length & 3 )
1181
+ if (u -> header_length & 3 )
1185
1182
return - EINVAL ;
1186
- transmit_header_bytes = u . packet . header_length ;
1183
+ transmit_header_bytes = u -> header_length ;
1187
1184
break ;
1188
1185
1189
1186
case FW_ISO_CONTEXT_RECEIVE :
1190
- if (u . packet . header_length == 0 ||
1191
- u . packet . header_length % ctx -> header_size != 0 )
1187
+ if (u -> header_length == 0 ||
1188
+ u -> header_length % ctx -> header_size != 0 )
1192
1189
return - EINVAL ;
1193
1190
break ;
1194
1191
1195
1192
case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL :
1196
- if (u . packet . payload_length == 0 ||
1197
- u . packet . payload_length & 3 )
1193
+ if (u -> payload_length == 0 ||
1194
+ u -> payload_length & 3 )
1198
1195
return - EINVAL ;
1199
1196
break ;
1200
1197
}
@@ -1204,20 +1201,19 @@ static int ioctl_queue_iso(struct client *client, union ioctl_arg *arg)
1204
1201
if (next > end )
1205
1202
return - EINVAL ;
1206
1203
if (copy_from_user
1207
- (u . packet . header , p -> header , transmit_header_bytes ))
1204
+ (u -> header , p -> header , transmit_header_bytes ))
1208
1205
return - EFAULT ;
1209
- if (u . packet . skip && ctx -> type == FW_ISO_CONTEXT_TRANSMIT &&
1210
- u . packet . header_length + u . packet . payload_length > 0 )
1206
+ if (u -> skip && ctx -> type == FW_ISO_CONTEXT_TRANSMIT &&
1207
+ u -> header_length + u -> payload_length > 0 )
1211
1208
return - EINVAL ;
1212
- if (payload + u . packet . payload_length > buffer_end )
1209
+ if (payload + u -> payload_length > buffer_end )
1213
1210
return - EINVAL ;
1214
1211
1215
- if (fw_iso_context_queue (ctx , & u .packet ,
1216
- & client -> buffer , payload ))
1212
+ if (fw_iso_context_queue (ctx , u , & client -> buffer , payload ))
1217
1213
break ;
1218
1214
1219
1215
p = next ;
1220
- payload += u . packet . payload_length ;
1216
+ payload += u -> payload_length ;
1221
1217
count ++ ;
1222
1218
}
1223
1219
fw_iso_context_queue_flush (ctx );
0 commit comments