oprofile: fix memory ordering
Regular bitops don't work as locks on all architectures. Also: can use non-atomic unlock as no concurrent stores to the word. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
committed by
Robert Richter
parent
fa448d6008
commit
cae042a73b
@@ -105,7 +105,7 @@ static int event_buffer_open(struct inode *inode, struct file *file)
|
|||||||
if (!capable(CAP_SYS_ADMIN))
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
if (test_and_set_bit(0, &buffer_opened))
|
if (test_and_set_bit_lock(0, &buffer_opened))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
/* Register as a user of dcookies
|
/* Register as a user of dcookies
|
||||||
@@ -129,7 +129,7 @@ static int event_buffer_open(struct inode *inode, struct file *file)
|
|||||||
fail:
|
fail:
|
||||||
dcookie_unregister(file->private_data);
|
dcookie_unregister(file->private_data);
|
||||||
out:
|
out:
|
||||||
clear_bit(0, &buffer_opened);
|
__clear_bit_unlock(0, &buffer_opened);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ static int event_buffer_release(struct inode *inode, struct file *file)
|
|||||||
dcookie_unregister(file->private_data);
|
dcookie_unregister(file->private_data);
|
||||||
buffer_pos = 0;
|
buffer_pos = 0;
|
||||||
atomic_set(&buffer_ready, 0);
|
atomic_set(&buffer_ready, 0);
|
||||||
clear_bit(0, &buffer_opened);
|
__clear_bit_unlock(0, &buffer_opened);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user