write_sq
static inline void nvme_write_sq_db(struct nvme_queue *nvmeq, bool write_sq)
if (!write_sq) {
start = write_sq.buffers[write_sq.front];
end = start+((write_sq.count == index) ? write_sq.rear_size
: write_sq.block_size);
write_sq.front = (write_sq.front+1) % write_sq.max_count;
write_sq.active++;
if (write_sq.active == 2 || /* DMA is 'full' */
write_sq.count <= 0) { /* nothing to do */
if (write_sq.active == 0) {
if (write_sq.count == 1 &&
write_sq.rear_size < write_sq.block_size &&
!write_sq.syncing) {
if (write_sq.count == 1) {
if (write_sq.count == 2 &&
write_sq.rear_size < write_sq.block_size &&
!write_sq.syncing) {
if (write_sq.count == 2 &&
write_sq.rear_size < write_sq.block_size &&
!write_sq.syncing) {
if (write_sq.active == 2)
if (!write_sq.active) {
WAKE_UP(write_sq.sync_queue);
write_sq.count--;
write_sq.active--;
if (!write_sq.active) {
WAKE_UP(write_sq.action_queue);
if ((write_sq.active != 1) || (write_sq.count != 1))
if (!write_sq.active) WAKE_UP(write_sq.sync_queue);
if ( !write_sq.locked )
sq_setup(&write_sq) ;
size = write_sq.user_frag_size ;
write_sq.syncing |= 0x2 ;
result = set_queue_frags(&write_sq, nbufs, size) ;
if ( !write_sq.locked )
sq_setup(&write_sq) ;
info.fragments = write_sq.max_active - write_sq.count;
info.fragstotal = write_sq.max_active;
info.fragsize = write_sq.user_frag_size;
"write", write_sq.numBufs, write_sq.bufSize) ;
"write", write_sq.max_count, write_sq.block_size,
write_sq.max_active, write_sq.front, write_sq.rear,
write_sq.count, write_sq.rear_size, write_sq.active,
write_sq.busy, write_sq.syncing, write_sq.locked, write_sq.xruns) ;
if (sq == &write_sq) {
if (write_sq.locked == 0) {
if ((uWritten = sq_setup(&write_sq)) < 0) return uWritten ;
write_sq.syncing &= ~2 ; /* take out POST status */
if (write_sq.count > 0 &&
(bLeft = write_sq.block_size-write_sq.rear_size) > 0) {
dest = write_sq.buffers[write_sq.rear];
bUsed = write_sq.rear_size;
write_sq.rear_size = bUsed;
while (write_sq.count >= write_sq.max_active) {
prepare_to_wait(&write_sq.action_queue, &wait, TASK_INTERRUPTIBLE);
if (write_sq.non_blocking) {
finish_wait(&write_sq.action_queue, &wait);
if (write_sq.count < write_sq.max_active)
finish_wait(&write_sq.action_queue, &wait);
finish_wait(&write_sq.action_queue, &wait);
dest = write_sq.buffers[(write_sq.rear+1) % write_sq.max_count];
bLeft = write_sq.block_size;
write_sq.rear = (write_sq.rear+1) % write_sq.max_count;
write_sq.rear_size = bUsed;
write_sq.count++;
if (write_sq.locked == 0) {
if ((retVal = sq_setup(&write_sq)) < 0)
poll_wait(file, &write_sq.action_queue, wait);
if (write_sq.count < write_sq.max_active || write_sq.block_size - write_sq.rear_size > 0)
#define write_sq_init_waitqueue() sq_init_waitqueue(&write_sq)
#define write_sq_wake_up(file) sq_wake_up(&write_sq, file, FMODE_WRITE)
#define write_sq_release_buffers() sq_release_buffers(&write_sq)
sq_open2(&write_sq, file, FMODE_WRITE, numWriteBufs, writeBufSize )
write_sq.active = 0;
write_sq.count = 0;
write_sq.rear_size = 0;
write_sq.front = 0 ;
write_sq.rear = -1 ; /* same as for set-up */
write_sq.locked = 0 ;
write_sq.user_frags = 0 ;
write_sq.user_frag_size = 0 ;
write_sq.syncing |= 1;
while (write_sq.active) {
wait_event_interruptible_timeout(write_sq.sync_queue,
!write_sq.active, HZ);
write_sq.syncing = 0 ;
if (write_sq.busy)
write_sq.busy = 0;
if (write_sq.locked)
start = write_sq.buffers[write_sq.front];
size = (write_sq.count == index ? write_sq.rear_size
: write_sq.block_size)>>1;
write_sq.front = (write_sq.front+1) % write_sq.max_count;
write_sq.active |= AMI_PLAY_LOADED;
if (write_sq.active & AMI_PLAY_LOADED) {
if (write_sq.active & AMI_PLAY_PLAYING)
if (write_sq.count < minframes) {
if (write_sq.count <= minframes &&
write_sq.rear_size < write_sq.block_size && !write_sq.syncing) {
if (!write_sq.active) {
WAKE_UP(write_sq.sync_queue);
if (write_sq.active & AMI_PLAY_PLAYING) {
write_sq.count--;
WAKE_UP(write_sq.action_queue);
if (write_sq.active & AMI_PLAY_LOADED)
write_sq.active = (write_sq.active<<1) & AMI_PLAY_MASK;
if (!write_sq.active)
if (write_sq.count >= minframes)
if (!write_sq.active)
WAKE_UP(write_sq.sync_queue);
write_sq_block_size_half = write_sq.block_size>>1;
start = write_sq.buffers[write_sq.front];
size = (write_sq.count == index ? write_sq.rear_size : write_sq.block_size);
write_sq.front = (write_sq.front+1) % write_sq.max_count;
write_sq.active++;
if (write_sq.active || write_sq.count<=0 ) {
if (write_sq.count <= 1 && write_sq.rear_size < write_sq.block_size && !write_sq.syncing) {
if (!write_sq.active) {
WAKE_UP(write_sq.sync_queue);
} else write_sq.active=0;
write_sq.count--;
WAKE_UP(write_sq.action_queue);