console: rename acquire/release_console_sem() to console_lock/unlock()

The -rt patches change the console_semaphore to console_mutex.  As a
result, a quite large chunk of the patches changes all
acquire/release_console_sem() to acquire/release_console_mutex()

This commit makes things use more neutral function names which dont make
implications about the underlying lock.

The only real change is the return value of console_trylock which is
inverted from try_acquire_console_sem()

This patch also paves the way to switching console_sem from a semaphore to
a mutex.

[akpm@linux-foundation.org: coding-style fixes]
[akpm@linux-foundation.org: make console_trylock return 1 on success, per Geert]
Signed-off-by: Torben Hohn <torbenh@gmx.de>
Cc: Thomas Gleixner <tglx@tglx.de>
Cc: Greg KH <gregkh@suse.de>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Torben Hohn 2011-01-25 15:07:35 -08:00 committed by Linus Torvalds
parent 3689456b4b
commit ac751efa6a
44 changed files with 336 additions and 328 deletions

View File

@ -134,7 +134,7 @@ static void omap2_enter_full_retention(void)
/* Block console output in case it is on one of the OMAP UARTs */
if (!is_suspending())
if (try_acquire_console_sem())
if (!console_trylock())
goto no_sleep;
omap_uart_prepare_idle(0);
@ -151,7 +151,7 @@ static void omap2_enter_full_retention(void)
omap_uart_resume_idle(0);
if (!is_suspending())
release_console_sem();
console_unlock();
no_sleep:
if (omap2_pm_debug) {

View File

@ -398,7 +398,7 @@ void omap_sram_idle(void)
if (!is_suspending())
if (per_next_state < PWRDM_POWER_ON ||
core_next_state < PWRDM_POWER_ON)
if (try_acquire_console_sem())
if (!console_trylock())
goto console_still_active;
/* PER */
@ -481,7 +481,7 @@ void omap_sram_idle(void)
}
if (!is_suspending())
release_console_sem();
console_unlock();
console_still_active:
/* Disable IO-PAD and IO-CHAIN wakeup */

View File

@ -812,7 +812,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)
oh->dev_attr = uart;
acquire_console_sem(); /* in case the earlycon is on the UART */
console_lock(); /* in case the earlycon is on the UART */
/*
* Because of early UART probing, UART did not get idled
@ -838,7 +838,7 @@ void __init omap_serial_init_port(struct omap_board_data *bdata)
omap_uart_block_sleep(uart);
uart->timeout = DEFAULT_TIMEOUT;
release_console_sem();
console_unlock();
if ((cpu_is_omap34xx() && uart->padconf) ||
(uart->wk_en && uart->wk_mask)) {

View File

@ -169,11 +169,11 @@ static int __init pdc_console_tty_driver_init(void)
struct console *tmp;
acquire_console_sem();
console_lock();
for_each_console(tmp)
if (tmp == &pdc_cons)
break;
release_console_sem();
console_unlock();
if (!tmp) {
printk(KERN_INFO "PDC console driver not registered anymore, not creating %s\n", pdc_cons.name);

View File

@ -183,16 +183,16 @@ bfin_jc_circ_write(const unsigned char *buf, int count)
}
#ifndef CONFIG_BFIN_JTAG_COMM_CONSOLE
# define acquire_console_sem()
# define release_console_sem()
# define console_lock()
# define console_unlock()
#endif
static int
bfin_jc_write(struct tty_struct *tty, const unsigned char *buf, int count)
{
int i;
acquire_console_sem();
console_lock();
i = bfin_jc_circ_write(buf, count);
release_console_sem();
console_unlock();
wake_up_process(bfin_jc_kthread);
return i;
}

View File

@ -234,9 +234,9 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
pci_set_power_state(pdev, PCI_D3hot);
}
acquire_console_sem();
console_lock();
nouveau_fbcon_set_suspend(dev, 1);
release_console_sem();
console_unlock();
nouveau_fbcon_restore_accel(dev);
return 0;
@ -359,9 +359,9 @@ nouveau_pci_resume(struct pci_dev *pdev)
nv_crtc->lut.depth = 0;
}
acquire_console_sem();
console_lock();
nouveau_fbcon_set_suspend(dev, 0);
release_console_sem();
console_unlock();
nouveau_fbcon_zfill_all(dev);

View File

@ -891,9 +891,9 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state)
pci_disable_device(dev->pdev);
pci_set_power_state(dev->pdev, PCI_D3hot);
}
acquire_console_sem();
console_lock();
radeon_fbdev_set_suspend(rdev, 1);
release_console_sem();
console_unlock();
return 0;
}
@ -905,11 +905,11 @@ int radeon_resume_kms(struct drm_device *dev)
if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
return 0;
acquire_console_sem();
console_lock();
pci_set_power_state(dev->pdev, PCI_D0);
pci_restore_state(dev->pdev);
if (pci_enable_device(dev->pdev)) {
release_console_sem();
console_unlock();
return -1;
}
pci_set_master(dev->pdev);
@ -920,7 +920,7 @@ int radeon_resume_kms(struct drm_device *dev)
radeon_restore_bios_scratch_regs(rdev);
radeon_fbdev_set_suspend(rdev, 0);
release_console_sem();
console_unlock();
/* reset hpd state */
radeon_hpd_init(rdev);

View File

@ -347,7 +347,7 @@ static int msm_fb_suspend(struct platform_device *pdev, pm_message_t state)
if ((!mfd) || (mfd->key != MFD_KEY))
return 0;
acquire_console_sem();
console_lock();
fb_set_suspend(mfd->fbi, 1);
ret = msm_fb_suspend_sub(mfd);
@ -358,7 +358,7 @@ static int msm_fb_suspend(struct platform_device *pdev, pm_message_t state)
pdev->dev.power.power_state = state;
}
release_console_sem();
console_unlock();
return ret;
}
#else
@ -431,11 +431,11 @@ static int msm_fb_resume(struct platform_device *pdev)
if ((!mfd) || (mfd->key != MFD_KEY))
return 0;
acquire_console_sem();
console_lock();
ret = msm_fb_resume_sub(mfd);
pdev->dev.power.power_state = PMSG_ON;
fb_set_suspend(mfd->fbi, 1);
release_console_sem();
console_unlock();
return ret;
}

View File

@ -373,17 +373,17 @@ static void dcon_source_switch(struct work_struct *work)
*
* For now, we just hope..
*/
acquire_console_sem();
console_lock();
ignore_fb_events = 1;
if (fb_blank(fbinfo, FB_BLANK_UNBLANK)) {
ignore_fb_events = 0;
release_console_sem();
console_unlock();
printk(KERN_ERR "olpc-dcon: Failed to enter CPU mode\n");
dcon_pending = DCON_SOURCE_DCON;
return;
}
ignore_fb_events = 0;
release_console_sem();
console_unlock();
/* And turn off the DCON */
pdata->set_dconload(1);
@ -435,12 +435,12 @@ static void dcon_source_switch(struct work_struct *work)
}
}
acquire_console_sem();
console_lock();
ignore_fb_events = 1;
if (fb_blank(fbinfo, FB_BLANK_POWERDOWN))
printk(KERN_ERR "olpc-dcon: couldn't blank fb!\n");
ignore_fb_events = 0;
release_console_sem();
console_unlock();
printk(KERN_INFO "olpc-dcon: The DCON has control\n");
break;

View File

@ -1044,9 +1044,9 @@ static int __maybe_unused smtcfb_suspend(struct pci_dev *pdev, pm_message_t msg)
/* when doing suspend, call fb apis and pci apis */
if (msg.event == PM_EVENT_SUSPEND) {
acquire_console_sem();
console_lock();
fb_set_suspend(&sfb->fb, 1);
release_console_sem();
console_unlock();
retv = pci_save_state(pdev);
pci_disable_device(pdev);
retv = pci_choose_state(pdev, msg);
@ -1105,9 +1105,9 @@ static int __maybe_unused smtcfb_resume(struct pci_dev *pdev)
smtcfb_setmode(sfb);
acquire_console_sem();
console_lock();
fb_set_suspend(&sfb->fb, 0);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -829,7 +829,7 @@ static void __init sbd_probe_duarts(void)
#ifdef CONFIG_SERIAL_SB1250_DUART_CONSOLE
/*
* Serial console stuff. Very basic, polling driver for doing serial
* console output. The console_sem is held by the caller, so we
* console output. The console_lock is held by the caller, so we
* shouldn't be interrupted for more console activity.
*/
static void sbd_console_putchar(struct uart_port *uport, int ch)

View File

@ -3256,7 +3256,7 @@ static ssize_t show_cons_active(struct device *dev,
struct console *c;
ssize_t count = 0;
acquire_console_sem();
console_lock();
for (c = console_drivers; c; c = c->next) {
if (!c->device)
continue;
@ -3271,7 +3271,7 @@ static ssize_t show_cons_active(struct device *dev,
while (i--)
count += sprintf(buf + count, "%s%d%c",
cs[i]->name, cs[i]->index, i ? ' ':'\n');
release_console_sem();
console_unlock();
return count;
}

View File

@ -316,9 +316,9 @@ int paste_selection(struct tty_struct *tty)
/* always called with BTM from vt_ioctl */
WARN_ON(!tty_locked());
acquire_console_sem();
console_lock();
poke_blanked_console();
release_console_sem();
console_unlock();
ld = tty_ldisc_ref(tty);
if (!ld) {

View File

@ -202,7 +202,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
/* Select the proper current console and verify
* sanity of the situation under the console lock.
*/
acquire_console_sem();
console_lock();
attr = (currcons & 128);
currcons = (currcons & 127);
@ -336,9 +336,9 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
* the pagefault handling code may want to call printk().
*/
release_console_sem();
console_unlock();
ret = copy_to_user(buf, con_buf_start, orig_count);
acquire_console_sem();
console_lock();
if (ret) {
read += (orig_count - ret);
@ -354,7 +354,7 @@ vcs_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)
if (read)
ret = read;
unlock_out:
release_console_sem();
console_unlock();
mutex_unlock(&con_buf_mtx);
return ret;
}
@ -379,7 +379,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
/* Select the proper current console and verify
* sanity of the situation under the console lock.
*/
acquire_console_sem();
console_lock();
attr = (currcons & 128);
currcons = (currcons & 127);
@ -414,9 +414,9 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
/* Temporarily drop the console lock so that we can read
* in the write data from userspace safely.
*/
release_console_sem();
console_unlock();
ret = copy_from_user(con_buf, buf, this_round);
acquire_console_sem();
console_lock();
if (ret) {
this_round -= ret;
@ -542,7 +542,7 @@ vcs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
vcs_scr_updated(vc);
unlock_out:
release_console_sem();
console_unlock();
mutex_unlock(&con_buf_mtx);

View File

@ -1003,9 +1003,9 @@ static int vt_resize(struct tty_struct *tty, struct winsize *ws)
struct vc_data *vc = tty->driver_data;
int ret;
acquire_console_sem();
console_lock();
ret = vc_do_resize(tty, vc, ws->ws_col, ws->ws_row);
release_console_sem();
console_unlock();
return ret;
}
@ -1271,7 +1271,7 @@ static void default_attr(struct vc_data *vc)
vc->vc_color = vc->vc_def_color;
}
/* console_sem is held */
/* console_lock is held */
static void csi_m(struct vc_data *vc)
{
int i;
@ -1415,7 +1415,7 @@ int mouse_reporting(void)
return vc_cons[fg_console].d->vc_report_mouse;
}
/* console_sem is held */
/* console_lock is held */
static void set_mode(struct vc_data *vc, int on_off)
{
int i;
@ -1485,7 +1485,7 @@ static void set_mode(struct vc_data *vc, int on_off)
}
}
/* console_sem is held */
/* console_lock is held */
static void setterm_command(struct vc_data *vc)
{
switch(vc->vc_par[0]) {
@ -1545,7 +1545,7 @@ static void setterm_command(struct vc_data *vc)
}
}
/* console_sem is held */
/* console_lock is held */
static void csi_at(struct vc_data *vc, unsigned int nr)
{
if (nr > vc->vc_cols - vc->vc_x)
@ -1555,7 +1555,7 @@ static void csi_at(struct vc_data *vc, unsigned int nr)
insert_char(vc, nr);
}
/* console_sem is held */
/* console_lock is held */
static void csi_L(struct vc_data *vc, unsigned int nr)
{
if (nr > vc->vc_rows - vc->vc_y)
@ -1566,7 +1566,7 @@ static void csi_L(struct vc_data *vc, unsigned int nr)
vc->vc_need_wrap = 0;
}
/* console_sem is held */
/* console_lock is held */
static void csi_P(struct vc_data *vc, unsigned int nr)
{
if (nr > vc->vc_cols - vc->vc_x)
@ -1576,7 +1576,7 @@ static void csi_P(struct vc_data *vc, unsigned int nr)
delete_char(vc, nr);
}
/* console_sem is held */
/* console_lock is held */
static void csi_M(struct vc_data *vc, unsigned int nr)
{
if (nr > vc->vc_rows - vc->vc_y)
@ -1587,7 +1587,7 @@ static void csi_M(struct vc_data *vc, unsigned int nr)
vc->vc_need_wrap = 0;
}
/* console_sem is held (except via vc_init->reset_terminal */
/* console_lock is held (except via vc_init->reset_terminal */
static void save_cur(struct vc_data *vc)
{
vc->vc_saved_x = vc->vc_x;
@ -1603,7 +1603,7 @@ static void save_cur(struct vc_data *vc)
vc->vc_saved_G1 = vc->vc_G1_charset;
}
/* console_sem is held */
/* console_lock is held */
static void restore_cur(struct vc_data *vc)
{
gotoxy(vc, vc->vc_saved_x, vc->vc_saved_y);
@ -1625,7 +1625,7 @@ enum { ESnormal, ESesc, ESsquare, ESgetpars, ESgotpars, ESfunckey,
EShash, ESsetG0, ESsetG1, ESpercent, ESignore, ESnonstd,
ESpalette };
/* console_sem is held (except via vc_init()) */
/* console_lock is held (except via vc_init()) */
static void reset_terminal(struct vc_data *vc, int do_clear)
{
vc->vc_top = 0;
@ -1685,7 +1685,7 @@ static void reset_terminal(struct vc_data *vc, int do_clear)
csi_J(vc, 2);
}
/* console_sem is held */
/* console_lock is held */
static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
{
/*
@ -2119,7 +2119,7 @@ static int is_double_width(uint32_t ucs)
return bisearch(ucs, double_width, ARRAY_SIZE(double_width) - 1);
}
/* acquires console_sem */
/* acquires console_lock */
static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int count)
{
#ifdef VT_BUF_VRAM_ONLY
@ -2147,11 +2147,11 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co
might_sleep();
acquire_console_sem();
console_lock();
vc = tty->driver_data;
if (vc == NULL) {
printk(KERN_ERR "vt: argh, driver_data is NULL !\n");
release_console_sem();
console_unlock();
return 0;
}
@ -2159,7 +2159,7 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co
if (!vc_cons_allocated(currcons)) {
/* could this happen? */
printk_once("con_write: tty %d not allocated\n", currcons+1);
release_console_sem();
console_unlock();
return 0;
}
@ -2375,7 +2375,7 @@ rescan_last_byte:
}
FLUSH
console_conditional_schedule();
release_console_sem();
console_unlock();
notify_update(vc);
return n;
#undef FLUSH
@ -2388,11 +2388,11 @@ rescan_last_byte:
* us to do the switches asynchronously (needed when we want
* to switch due to a keyboard interrupt). Synchronization
* with other console code and prevention of re-entrancy is
* ensured with console_sem.
* ensured with console_lock.
*/
static void console_callback(struct work_struct *ignored)
{
acquire_console_sem();
console_lock();
if (want_console >= 0) {
if (want_console != fg_console &&
@ -2422,7 +2422,7 @@ static void console_callback(struct work_struct *ignored)
}
notify_update(vc_cons[fg_console].d);
release_console_sem();
console_unlock();
}
int set_console(int nr)
@ -2603,7 +2603,7 @@ static struct console vt_console_driver = {
*/
/*
* Generally a bit racy with respect to console_sem().
* Generally a bit racy with respect to console_lock();.
*
* There are some functions which don't need it.
*
@ -2629,17 +2629,17 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
switch (type)
{
case TIOCL_SETSEL:
acquire_console_sem();
console_lock();
ret = set_selection((struct tiocl_selection __user *)(p+1), tty);
release_console_sem();
console_unlock();
break;
case TIOCL_PASTESEL:
ret = paste_selection(tty);
break;
case TIOCL_UNBLANKSCREEN:
acquire_console_sem();
console_lock();
unblank_screen();
release_console_sem();
console_unlock();
break;
case TIOCL_SELLOADLUT:
ret = sel_loadlut(p);
@ -2688,10 +2688,10 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
}
break;
case TIOCL_BLANKSCREEN: /* until explicitly unblanked, not only poked */
acquire_console_sem();
console_lock();
ignore_poke = 1;
do_blank_screen(0);
release_console_sem();
console_unlock();
break;
case TIOCL_BLANKEDSCREEN:
ret = console_blanked;
@ -2790,11 +2790,11 @@ static void con_flush_chars(struct tty_struct *tty)
return;
/* if we race with con_close(), vt may be null */
acquire_console_sem();
console_lock();
vc = tty->driver_data;
if (vc)
set_cursor(vc);
release_console_sem();
console_unlock();
}
/*
@ -2805,7 +2805,7 @@ static int con_open(struct tty_struct *tty, struct file *filp)
unsigned int currcons = tty->index;
int ret = 0;
acquire_console_sem();
console_lock();
if (tty->driver_data == NULL) {
ret = vc_allocate(currcons);
if (ret == 0) {
@ -2813,7 +2813,7 @@ static int con_open(struct tty_struct *tty, struct file *filp)
/* Still being freed */
if (vc->port.tty) {
release_console_sem();
console_unlock();
return -ERESTARTSYS;
}
tty->driver_data = vc;
@ -2827,11 +2827,11 @@ static int con_open(struct tty_struct *tty, struct file *filp)
tty->termios->c_iflag |= IUTF8;
else
tty->termios->c_iflag &= ~IUTF8;
release_console_sem();
console_unlock();
return ret;
}
}
release_console_sem();
console_unlock();
return ret;
}
@ -2844,9 +2844,9 @@ static void con_shutdown(struct tty_struct *tty)
{
struct vc_data *vc = tty->driver_data;
BUG_ON(vc == NULL);
acquire_console_sem();
console_lock();
vc->port.tty = NULL;
release_console_sem();
console_unlock();
tty_shutdown(tty);
}
@ -2893,13 +2893,13 @@ static int __init con_init(void)
struct vc_data *vc;
unsigned int currcons = 0, i;
acquire_console_sem();
console_lock();
if (conswitchp)
display_desc = conswitchp->con_startup();
if (!display_desc) {
fg_console = 0;
release_console_sem();
console_unlock();
return 0;
}
@ -2946,7 +2946,7 @@ static int __init con_init(void)
printable = 1;
printk("\n");
release_console_sem();
console_unlock();
#ifdef CONFIG_VT_CONSOLE
register_console(&vt_console_driver);
@ -3037,7 +3037,7 @@ static int bind_con_driver(const struct consw *csw, int first, int last,
if (!try_module_get(owner))
return -ENODEV;
acquire_console_sem();
console_lock();
/* check if driver is registered */
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
@ -3122,7 +3122,7 @@ static int bind_con_driver(const struct consw *csw, int first, int last,
retval = 0;
err:
release_console_sem();
console_unlock();
module_put(owner);
return retval;
};
@ -3171,7 +3171,7 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
if (!try_module_get(owner))
return -ENODEV;
acquire_console_sem();
console_lock();
/* check if driver is registered and if it is unbindable */
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
@ -3185,7 +3185,7 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
}
if (retval) {
release_console_sem();
console_unlock();
goto err;
}
@ -3204,12 +3204,12 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
}
if (retval) {
release_console_sem();
console_unlock();
goto err;
}
if (!con_is_bound(csw)) {
release_console_sem();
console_unlock();
goto err;
}
@ -3238,7 +3238,7 @@ int unbind_con_driver(const struct consw *csw, int first, int last, int deflt)
if (!con_is_bound(csw))
con_driver->flag &= ~CON_DRIVER_FLAG_INIT;
release_console_sem();
console_unlock();
/* ignore return value, binding should not fail */
bind_con_driver(defcsw, first, last, deflt);
err:
@ -3538,7 +3538,7 @@ int register_con_driver(const struct consw *csw, int first, int last)
if (!try_module_get(owner))
return -ENODEV;
acquire_console_sem();
console_lock();
for (i = 0; i < MAX_NR_CON_DRIVER; i++) {
con_driver = &registered_con_driver[i];
@ -3592,7 +3592,7 @@ int register_con_driver(const struct consw *csw, int first, int last)
}
err:
release_console_sem();
console_unlock();
module_put(owner);
return retval;
}
@ -3613,7 +3613,7 @@ int unregister_con_driver(const struct consw *csw)
{
int i, retval = -ENODEV;
acquire_console_sem();
console_lock();
/* cannot unregister a bound driver */
if (con_is_bound(csw))
@ -3639,7 +3639,7 @@ int unregister_con_driver(const struct consw *csw)
}
}
err:
release_console_sem();
console_unlock();
return retval;
}
EXPORT_SYMBOL(unregister_con_driver);
@ -3934,9 +3934,9 @@ int con_set_cmap(unsigned char __user *arg)
{
int rc;
acquire_console_sem();
console_lock();
rc = set_get_cmap (arg,1);
release_console_sem();
console_unlock();
return rc;
}
@ -3945,9 +3945,9 @@ int con_get_cmap(unsigned char __user *arg)
{
int rc;
acquire_console_sem();
console_lock();
rc = set_get_cmap (arg,0);
release_console_sem();
console_unlock();
return rc;
}
@ -3994,12 +3994,12 @@ static int con_font_get(struct vc_data *vc, struct console_font_op *op)
} else
font.data = NULL;
acquire_console_sem();
console_lock();
if (vc->vc_sw->con_font_get)
rc = vc->vc_sw->con_font_get(vc, &font);
else
rc = -ENOSYS;
release_console_sem();
console_unlock();
if (rc)
goto out;
@ -4076,12 +4076,12 @@ static int con_font_set(struct vc_data *vc, struct console_font_op *op)
font.data = memdup_user(op->data, size);
if (IS_ERR(font.data))
return PTR_ERR(font.data);
acquire_console_sem();
console_lock();
if (vc->vc_sw->con_font_set)
rc = vc->vc_sw->con_font_set(vc, &font, op->flags);
else
rc = -ENOSYS;
release_console_sem();
console_unlock();
kfree(font.data);
return rc;
}
@ -4103,12 +4103,12 @@ static int con_font_default(struct vc_data *vc, struct console_font_op *op)
else
name[MAX_FONT_NAME - 1] = 0;
acquire_console_sem();
console_lock();
if (vc->vc_sw->con_font_default)
rc = vc->vc_sw->con_font_default(vc, &font, s);
else
rc = -ENOSYS;
release_console_sem();
console_unlock();
if (!rc) {
op->width = font.width;
op->height = font.height;
@ -4124,7 +4124,7 @@ static int con_font_copy(struct vc_data *vc, struct console_font_op *op)
if (vc->vc_mode != KD_TEXT)
return -EINVAL;
acquire_console_sem();
console_lock();
if (!vc->vc_sw->con_font_copy)
rc = -ENOSYS;
else if (con < 0 || !vc_cons_allocated(con))
@ -4133,7 +4133,7 @@ static int con_font_copy(struct vc_data *vc, struct console_font_op *op)
rc = 0;
else
rc = vc->vc_sw->con_font_copy(vc, con);
release_console_sem();
console_unlock();
return rc;
}

View File

@ -649,12 +649,12 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
/*
* explicitly blank/unblank the screen if switching modes
*/
acquire_console_sem();
console_lock();
if (arg == KD_TEXT)
do_unblank_screen(1);
else
do_blank_screen(1);
release_console_sem();
console_unlock();
break;
case KDGETMODE:
@ -893,7 +893,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
ret = -EINVAL;
goto out;
}
acquire_console_sem();
console_lock();
vc->vt_mode = tmp;
/* the frsig is ignored, so we set it to 0 */
vc->vt_mode.frsig = 0;
@ -901,7 +901,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
vc->vt_pid = get_pid(task_pid(current));
/* no switch is required -- saw@shade.msu.ru */
vc->vt_newvt = -1;
release_console_sem();
console_unlock();
break;
}
@ -910,9 +910,9 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
struct vt_mode tmp;
int rc;
acquire_console_sem();
console_lock();
memcpy(&tmp, &vc->vt_mode, sizeof(struct vt_mode));
release_console_sem();
console_unlock();
rc = copy_to_user(up, &tmp, sizeof(struct vt_mode));
if (rc)
@ -965,9 +965,9 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
ret = -ENXIO;
else {
arg--;
acquire_console_sem();
console_lock();
ret = vc_allocate(arg);
release_console_sem();
console_unlock();
if (ret)
break;
set_console(arg);
@ -990,7 +990,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
ret = -ENXIO;
else {
vsa.console--;
acquire_console_sem();
console_lock();
ret = vc_allocate(vsa.console);
if (ret == 0) {
struct vc_data *nvc;
@ -1003,7 +1003,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
put_pid(nvc->vt_pid);
nvc->vt_pid = get_pid(task_pid(current));
}
release_console_sem();
console_unlock();
if (ret)
break;
/* Commence switch and lock */
@ -1044,7 +1044,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
/*
* Switching-from response
*/
acquire_console_sem();
console_lock();
if (vc->vt_newvt >= 0) {
if (arg == 0)
/*
@ -1063,7 +1063,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
vc->vt_newvt = -1;
ret = vc_allocate(newvt);
if (ret) {
release_console_sem();
console_unlock();
break;
}
/*
@ -1083,7 +1083,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
if (arg != VT_ACKACQ)
ret = -EINVAL;
}
release_console_sem();
console_unlock();
break;
/*
@ -1096,20 +1096,20 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
}
if (arg == 0) {
/* deallocate all unused consoles, but leave 0 */
acquire_console_sem();
console_lock();
for (i=1; i<MAX_NR_CONSOLES; i++)
if (! VT_BUSY(i))
vc_deallocate(i);
release_console_sem();
console_unlock();
} else {
/* deallocate a single console, if possible */
arg--;
if (VT_BUSY(arg))
ret = -EBUSY;
else if (arg) { /* leave 0 */
acquire_console_sem();
console_lock();
vc_deallocate(arg);
release_console_sem();
console_unlock();
}
}
break;
@ -1126,7 +1126,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
get_user(cc, &vtsizes->v_cols))
ret = -EFAULT;
else {
acquire_console_sem();
console_lock();
for (i = 0; i < MAX_NR_CONSOLES; i++) {
vc = vc_cons[i].d;
@ -1135,7 +1135,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
vc_resize(vc_cons[i].d, cc, ll);
}
}
release_console_sem();
console_unlock();
}
break;
}
@ -1187,14 +1187,14 @@ int vt_ioctl(struct tty_struct *tty, struct file * file,
for (i = 0; i < MAX_NR_CONSOLES; i++) {
if (!vc_cons[i].d)
continue;
acquire_console_sem();
console_lock();
if (vlin)
vc_cons[i].d->vc_scan_lines = vlin;
if (clin)
vc_cons[i].d->vc_font.height = clin;
vc_cons[i].d->vc_resize_user = 1;
vc_resize(vc_cons[i].d, cc, ll);
release_console_sem();
console_unlock();
}
break;
}
@ -1367,7 +1367,7 @@ void vc_SAK(struct work_struct *work)
struct vc_data *vc;
struct tty_struct *tty;
acquire_console_sem();
console_lock();
vc = vc_con->d;
if (vc) {
tty = vc->port.tty;
@ -1379,7 +1379,7 @@ void vc_SAK(struct work_struct *work)
__do_SAK(tty);
reset_vc(vc);
}
release_console_sem();
console_unlock();
}
#ifdef CONFIG_COMPAT
@ -1737,10 +1737,10 @@ int vt_move_to_console(unsigned int vt, int alloc)
{
int prev;
acquire_console_sem();
console_lock();
/* Graphics mode - up to X */
if (disable_vt_switch) {
release_console_sem();
console_unlock();
return 0;
}
prev = fg_console;
@ -1748,7 +1748,7 @@ int vt_move_to_console(unsigned int vt, int alloc)
if (alloc && vc_allocate(vt)) {
/* we can't have a free VC for now. Too bad,
* we don't want to mess the screen for now. */
release_console_sem();
console_unlock();
return -ENOSPC;
}
@ -1758,10 +1758,10 @@ int vt_move_to_console(unsigned int vt, int alloc)
* Let the calling function know so it can decide
* what to do.
*/
release_console_sem();
console_unlock();
return -EIO;
}
release_console_sem();
console_unlock();
tty_lock();
if (vt_waitactive(vt + 1)) {
pr_debug("Suspend: Can't switch VCs.");
@ -1781,8 +1781,8 @@ int vt_move_to_console(unsigned int vt, int alloc)
*/
void pm_set_vt_switch(int do_switch)
{
acquire_console_sem();
console_lock();
disable_vt_switch = !do_switch;
release_console_sem();
console_unlock();
}
EXPORT_SYMBOL(pm_set_vt_switch);

View File

@ -23,7 +23,7 @@
#include <linux/svga.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/console.h> /* Why should fb driver call console functions? because acquire_console_sem() */
#include <linux/console.h> /* Why should fb driver call console functions? because console_lock() */
#include <video/vga.h>
#ifdef CONFIG_MTRR
@ -1091,12 +1091,12 @@ static int ark_pci_suspend (struct pci_dev* dev, pm_message_t state)
dev_info(info->device, "suspend\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if ((state.event == PM_EVENT_FREEZE) || (par->ref_count == 0)) {
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -1107,7 +1107,7 @@ static int ark_pci_suspend (struct pci_dev* dev, pm_message_t state)
pci_set_power_state(dev, pci_choose_state(dev, state));
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -1122,7 +1122,7 @@ static int ark_pci_resume (struct pci_dev* dev)
dev_info(info->device, "resume\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if (par->ref_count == 0)
@ -1141,7 +1141,7 @@ static int ark_pci_resume (struct pci_dev* dev)
fail:
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
#else

View File

@ -1860,11 +1860,11 @@ static void aty128_early_resume(void *data)
{
struct aty128fb_par *par = data;
if (try_acquire_console_sem())
if (!console_trylock())
return;
pci_restore_state(par->pdev);
aty128_do_resume(par->pdev);
release_console_sem();
console_unlock();
}
#endif /* CONFIG_PPC_PMAC */
@ -2438,7 +2438,7 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state)
printk(KERN_DEBUG "aty128fb: suspending...\n");
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
@ -2470,7 +2470,7 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state)
if (state.event != PM_EVENT_ON)
aty128_set_suspend(par, 1);
release_console_sem();
console_unlock();
pdev->dev.power.power_state = state;
@ -2527,9 +2527,9 @@ static int aty128_pci_resume(struct pci_dev *pdev)
{
int rc;
acquire_console_sem();
console_lock();
rc = aty128_do_resume(pdev);
release_console_sem();
console_unlock();
return rc;
}

View File

@ -2069,7 +2069,7 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
if (state.event == pdev->dev.power.power_state.event)
return 0;
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
@ -2097,14 +2097,14 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
par->lock_blank = 0;
atyfb_blank(FB_BLANK_UNBLANK, info);
fb_set_suspend(info, 0);
release_console_sem();
console_unlock();
return -EIO;
}
#else
pci_set_power_state(pdev, pci_choose_state(pdev, state));
#endif
release_console_sem();
console_unlock();
pdev->dev.power.power_state = state;
@ -2133,7 +2133,7 @@ static int atyfb_pci_resume(struct pci_dev *pdev)
if (pdev->dev.power.power_state.event == PM_EVENT_ON)
return 0;
acquire_console_sem();
console_lock();
/*
* PCI state will have been restored by the core, so
@ -2161,7 +2161,7 @@ static int atyfb_pci_resume(struct pci_dev *pdev)
par->lock_blank = 0;
atyfb_blank(FB_BLANK_UNBLANK, info);
release_console_sem();
console_unlock();
pdev->dev.power.power_state = PMSG_ON;

View File

@ -2626,7 +2626,7 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
goto done;
}
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
@ -2690,7 +2690,7 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
if (rinfo->pm_mode & radeon_pm_d2)
radeon_set_suspend(rinfo, 1);
release_console_sem();
console_unlock();
done:
pdev->dev.power.power_state = mesg;
@ -2715,10 +2715,10 @@ int radeonfb_pci_resume(struct pci_dev *pdev)
return 0;
if (rinfo->no_schedule) {
if (try_acquire_console_sem())
if (!console_trylock())
return 0;
} else
acquire_console_sem();
console_lock();
printk(KERN_DEBUG "radeonfb (%s): resuming from state: %d...\n",
pci_name(pdev), pdev->dev.power.power_state.event);
@ -2783,7 +2783,7 @@ int radeonfb_pci_resume(struct pci_dev *pdev)
pdev->dev.power.power_state = PMSG_ON;
bail:
release_console_sem();
console_unlock();
return rc;
}

View File

@ -460,10 +460,10 @@ static int chipsfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
if (!(state.event & PM_EVENT_SLEEP))
goto done;
acquire_console_sem();
console_lock();
chipsfb_blank(1, p);
fb_set_suspend(p, 1);
release_console_sem();
console_unlock();
done:
pdev->dev.power.power_state = state;
return 0;
@ -473,10 +473,10 @@ static int chipsfb_pci_resume(struct pci_dev *pdev)
{
struct fb_info *p = pci_get_drvdata(pdev);
acquire_console_sem();
console_lock();
fb_set_suspend(p, 0);
chipsfb_blank(0, p);
release_console_sem();
console_unlock();
pdev->dev.power.power_state = PMSG_ON;
return 0;

View File

@ -375,14 +375,14 @@ static void fb_flashcursor(struct work_struct *work)
int c;
int mode;
acquire_console_sem();
console_lock();
if (ops && ops->currcon != -1)
vc = vc_cons[ops->currcon].d;
if (!vc || !CON_IS_VISIBLE(vc) ||
registered_fb[con2fb_map[vc->vc_num]] != info ||
vc->vc_deccm != 1) {
release_console_sem();
console_unlock();
return;
}
@ -392,7 +392,7 @@ static void fb_flashcursor(struct work_struct *work)
CM_ERASE : CM_DRAW;
ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
get_color(vc, info, c, 0));
release_console_sem();
console_unlock();
}
static void cursor_timer_handler(unsigned long dev_addr)
@ -836,7 +836,7 @@ static int set_con2fb_map(int unit, int newidx, int user)
found = search_fb_in_map(newidx);
acquire_console_sem();
console_lock();
con2fb_map[unit] = newidx;
if (!err && !found)
err = con2fb_acquire_newinfo(vc, info, unit, oldidx);
@ -863,7 +863,7 @@ static int set_con2fb_map(int unit, int newidx, int user)
if (!search_fb_in_map(info_idx))
info_idx = newidx;
release_console_sem();
console_unlock();
return err;
}
@ -3321,7 +3321,7 @@ static ssize_t store_rotate(struct device *device,
if (fbcon_has_exited)
return count;
acquire_console_sem();
console_lock();
idx = con2fb_map[fg_console];
if (idx == -1 || registered_fb[idx] == NULL)
@ -3331,7 +3331,7 @@ static ssize_t store_rotate(struct device *device,
rotate = simple_strtoul(buf, last, 0);
fbcon_rotate(info, rotate);
err:
release_console_sem();
console_unlock();
return count;
}
@ -3346,7 +3346,7 @@ static ssize_t store_rotate_all(struct device *device,
if (fbcon_has_exited)
return count;
acquire_console_sem();
console_lock();
idx = con2fb_map[fg_console];
if (idx == -1 || registered_fb[idx] == NULL)
@ -3356,7 +3356,7 @@ static ssize_t store_rotate_all(struct device *device,
rotate = simple_strtoul(buf, last, 0);
fbcon_rotate_all(info, rotate);
err:
release_console_sem();
console_unlock();
return count;
}
@ -3369,7 +3369,7 @@ static ssize_t show_rotate(struct device *device,
if (fbcon_has_exited)
return 0;
acquire_console_sem();
console_lock();
idx = con2fb_map[fg_console];
if (idx == -1 || registered_fb[idx] == NULL)
@ -3378,7 +3378,7 @@ static ssize_t show_rotate(struct device *device,
info = registered_fb[idx];
rotate = fbcon_get_rotate(info);
err:
release_console_sem();
console_unlock();
return snprintf(buf, PAGE_SIZE, "%d\n", rotate);
}
@ -3392,7 +3392,7 @@ static ssize_t show_cursor_blink(struct device *device,
if (fbcon_has_exited)
return 0;
acquire_console_sem();
console_lock();
idx = con2fb_map[fg_console];
if (idx == -1 || registered_fb[idx] == NULL)
@ -3406,7 +3406,7 @@ static ssize_t show_cursor_blink(struct device *device,
blink = (ops->flags & FBCON_FLAGS_CURSOR_TIMER) ? 1 : 0;
err:
release_console_sem();
console_unlock();
return snprintf(buf, PAGE_SIZE, "%d\n", blink);
}
@ -3421,7 +3421,7 @@ static ssize_t store_cursor_blink(struct device *device,
if (fbcon_has_exited)
return count;
acquire_console_sem();
console_lock();
idx = con2fb_map[fg_console];
if (idx == -1 || registered_fb[idx] == NULL)
@ -3443,7 +3443,7 @@ static ssize_t store_cursor_blink(struct device *device,
}
err:
release_console_sem();
console_unlock();
return count;
}
@ -3482,7 +3482,7 @@ static void fbcon_start(void)
if (num_registered_fb) {
int i;
acquire_console_sem();
console_lock();
for (i = 0; i < FB_MAX; i++) {
if (registered_fb[i] != NULL) {
@ -3491,7 +3491,7 @@ static void fbcon_start(void)
}
}
release_console_sem();
console_unlock();
fbcon_takeover(0);
}
}
@ -3552,7 +3552,7 @@ static int __init fb_console_init(void)
{
int i;
acquire_console_sem();
console_lock();
fb_register_client(&fbcon_event_notifier);
fbcon_device = device_create(fb_class, NULL, MKDEV(0, 0), NULL,
"fbcon");
@ -3568,7 +3568,7 @@ static int __init fb_console_init(void)
for (i = 0; i < MAX_NR_CONSOLES; i++)
con2fb_map[i] = -1;
release_console_sem();
console_unlock();
fbcon_start();
return 0;
}
@ -3591,12 +3591,12 @@ static void __exit fbcon_deinit_device(void)
static void __exit fb_console_exit(void)
{
acquire_console_sem();
console_lock();
fb_unregister_client(&fbcon_event_notifier);
fbcon_deinit_device();
device_destroy(fb_class, MKDEV(0, 0));
fbcon_exit();
release_console_sem();
console_unlock();
unregister_con_driver(&fb_con);
}

View File

@ -1131,14 +1131,14 @@ static int fb_suspend(struct platform_device *dev, pm_message_t state)
struct fb_info *info = platform_get_drvdata(dev);
struct da8xx_fb_par *par = info->par;
acquire_console_sem();
console_lock();
if (par->panel_power_ctrl)
par->panel_power_ctrl(0);
fb_set_suspend(info, 1);
lcd_disable_raster();
clk_disable(par->lcdc_clk);
release_console_sem();
console_unlock();
return 0;
}
@ -1147,14 +1147,14 @@ static int fb_resume(struct platform_device *dev)
struct fb_info *info = platform_get_drvdata(dev);
struct da8xx_fb_par *par = info->par;
acquire_console_sem();
console_lock();
if (par->panel_power_ctrl)
par->panel_power_ctrl(1);
clk_enable(par->lcdc_clk);
lcd_enable_raster();
fb_set_suspend(info, 0);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -1036,11 +1036,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
return -EFAULT;
if (!lock_fb_info(info))
return -ENODEV;
acquire_console_sem();
console_lock();
info->flags |= FBINFO_MISC_USEREVENT;
ret = fb_set_var(info, &var);
info->flags &= ~FBINFO_MISC_USEREVENT;
release_console_sem();
console_unlock();
unlock_fb_info(info);
if (!ret && copy_to_user(argp, &var, sizeof(var)))
ret = -EFAULT;
@ -1072,9 +1072,9 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
return -EFAULT;
if (!lock_fb_info(info))
return -ENODEV;
acquire_console_sem();
console_lock();
ret = fb_pan_display(info, &var);
release_console_sem();
console_unlock();
unlock_fb_info(info);
if (ret == 0 && copy_to_user(argp, &var, sizeof(var)))
return -EFAULT;
@ -1119,11 +1119,11 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
case FBIOBLANK:
if (!lock_fb_info(info))
return -ENODEV;
acquire_console_sem();
console_lock();
info->flags |= FBINFO_MISC_USEREVENT;
ret = fb_blank(info, arg);
info->flags &= ~FBINFO_MISC_USEREVENT;
release_console_sem();
console_unlock();
unlock_fb_info(info);
break;
default:

View File

@ -90,11 +90,11 @@ static int activate(struct fb_info *fb_info, struct fb_var_screeninfo *var)
int err;
var->activate |= FB_ACTIVATE_FORCE;
acquire_console_sem();
console_lock();
fb_info->flags |= FBINFO_MISC_USEREVENT;
err = fb_set_var(fb_info, var);
fb_info->flags &= ~FBINFO_MISC_USEREVENT;
release_console_sem();
console_unlock();
if (err)
return err;
return 0;
@ -175,7 +175,7 @@ static ssize_t store_modes(struct device *device,
if (i * sizeof(struct fb_videomode) != count)
return -EINVAL;
acquire_console_sem();
console_lock();
list_splice(&fb_info->modelist, &old_list);
fb_videomode_to_modelist((const struct fb_videomode *)buf, i,
&fb_info->modelist);
@ -185,7 +185,7 @@ static ssize_t store_modes(struct device *device,
} else
fb_destroy_modelist(&old_list);
release_console_sem();
console_unlock();
return 0;
}
@ -301,11 +301,11 @@ static ssize_t store_blank(struct device *device,
char *last = NULL;
int err;
acquire_console_sem();
console_lock();
fb_info->flags |= FBINFO_MISC_USEREVENT;
err = fb_blank(fb_info, simple_strtoul(buf, &last, 0));
fb_info->flags &= ~FBINFO_MISC_USEREVENT;
release_console_sem();
console_unlock();
if (err < 0)
return err;
return count;
@ -364,9 +364,9 @@ static ssize_t store_pan(struct device *device,
return -EINVAL;
var.yoffset = simple_strtoul(last, &last, 0);
acquire_console_sem();
console_lock();
err = fb_pan_display(fb_info, &var);
release_console_sem();
console_unlock();
if (err < 0)
return err;
@ -399,9 +399,9 @@ static ssize_t store_fbstate(struct device *device,
state = simple_strtoul(buf, &last, 0);
acquire_console_sem();
console_lock();
fb_set_suspend(fb_info, (int)state);
release_console_sem();
console_unlock();
return count;
}

View File

@ -344,10 +344,10 @@ static int gxfb_suspend(struct pci_dev *pdev, pm_message_t state)
struct fb_info *info = pci_get_drvdata(pdev);
if (state.event == PM_EVENT_SUSPEND) {
acquire_console_sem();
console_lock();
gx_powerdown(info);
fb_set_suspend(info, 1);
release_console_sem();
console_unlock();
}
/* there's no point in setting PCI states; we emulate PCI, so
@ -361,7 +361,7 @@ static int gxfb_resume(struct pci_dev *pdev)
struct fb_info *info = pci_get_drvdata(pdev);
int ret;
acquire_console_sem();
console_lock();
ret = gx_powerup(info);
if (ret) {
printk(KERN_ERR "gxfb: power up failed!\n");
@ -369,7 +369,7 @@ static int gxfb_resume(struct pci_dev *pdev)
}
fb_set_suspend(info, 0);
release_console_sem();
console_unlock();
return 0;
}
#endif

View File

@ -465,10 +465,10 @@ static int lxfb_suspend(struct pci_dev *pdev, pm_message_t state)
struct fb_info *info = pci_get_drvdata(pdev);
if (state.event == PM_EVENT_SUSPEND) {
acquire_console_sem();
console_lock();
lx_powerdown(info);
fb_set_suspend(info, 1);
release_console_sem();
console_unlock();
}
/* there's no point in setting PCI states; we emulate PCI, so
@ -482,7 +482,7 @@ static int lxfb_resume(struct pci_dev *pdev)
struct fb_info *info = pci_get_drvdata(pdev);
int ret;
acquire_console_sem();
console_lock();
ret = lx_powerup(info);
if (ret) {
printk(KERN_ERR "lxfb: power up failed!\n");
@ -490,7 +490,7 @@ static int lxfb_resume(struct pci_dev *pdev)
}
fb_set_suspend(info, 0);
release_console_sem();
console_unlock();
return 0;
}
#else

View File

@ -1574,7 +1574,7 @@ static int i810fb_suspend(struct pci_dev *dev, pm_message_t mesg)
return 0;
}
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
if (info->fbops->fb_sync)
@ -1587,7 +1587,7 @@ static int i810fb_suspend(struct pci_dev *dev, pm_message_t mesg)
pci_save_state(dev);
pci_disable_device(dev);
pci_set_power_state(dev, pci_choose_state(dev, mesg));
release_console_sem();
console_unlock();
return 0;
}
@ -1605,7 +1605,7 @@ static int i810fb_resume(struct pci_dev *dev)
return 0;
}
acquire_console_sem();
console_lock();
pci_set_power_state(dev, PCI_D0);
pci_restore_state(dev);
@ -1621,7 +1621,7 @@ static int i810fb_resume(struct pci_dev *dev)
fb_set_suspend (info, 0);
info->fbops->fb_blank(VESA_NO_BLANKING, info);
fail:
release_console_sem();
console_unlock();
return 0;
}
/***********************************************************************

View File

@ -778,9 +778,9 @@ static int jzfb_suspend(struct device *dev)
{
struct jzfb *jzfb = dev_get_drvdata(dev);
acquire_console_sem();
console_lock();
fb_set_suspend(jzfb->fb, 1);
release_console_sem();
console_unlock();
mutex_lock(&jzfb->lock);
if (jzfb->is_enabled)
@ -800,9 +800,9 @@ static int jzfb_resume(struct device *dev)
jzfb_enable(jzfb);
mutex_unlock(&jzfb->lock);
acquire_console_sem();
console_lock();
fb_set_suspend(jzfb->fb, 0);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -1177,9 +1177,9 @@ static int mx3fb_suspend(struct platform_device *pdev, pm_message_t state)
struct mx3fb_data *mx3fb = platform_get_drvdata(pdev);
struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
acquire_console_sem();
console_lock();
fb_set_suspend(mx3fb->fbi, 1);
release_console_sem();
console_unlock();
if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
sdc_disable_channel(mx3_fbi);
@ -1202,9 +1202,9 @@ static int mx3fb_resume(struct platform_device *pdev)
sdc_set_brightness(mx3fb, mx3fb->backlight_level);
}
acquire_console_sem();
console_lock();
fb_set_suspend(mx3fb->fbi, 0);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -1057,7 +1057,7 @@ static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t mesg)
if (mesg.event == PM_EVENT_PRETHAW)
mesg.event = PM_EVENT_FREEZE;
acquire_console_sem();
console_lock();
par->pm_state = mesg.event;
if (mesg.event & PM_EVENT_SLEEP) {
@ -1070,7 +1070,7 @@ static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t mesg)
}
dev->dev.power.power_state = mesg;
release_console_sem();
console_unlock();
return 0;
}
@ -1079,7 +1079,7 @@ static int nvidiafb_resume(struct pci_dev *dev)
struct fb_info *info = pci_get_drvdata(dev);
struct nvidia_par *par = info->par;
acquire_console_sem();
console_lock();
pci_set_power_state(dev, PCI_D0);
if (par->pm_state != PM_EVENT_FREEZE) {
@ -1097,7 +1097,7 @@ static int nvidiafb_resume(struct pci_dev *dev)
nvidiafb_blank(FB_BLANK_UNBLANK, info);
fail:
release_console_sem();
console_unlock();
return 0;
}
#else

View File

@ -513,9 +513,9 @@ static int ps3fb_release(struct fb_info *info, int user)
if (atomic_dec_and_test(&ps3fb.f_count)) {
if (atomic_read(&ps3fb.ext_flip)) {
atomic_set(&ps3fb.ext_flip, 0);
if (!try_acquire_console_sem()) {
if (console_trylock()) {
ps3fb_sync(info, 0); /* single buffer */
release_console_sem();
console_unlock();
}
}
}
@ -830,14 +830,14 @@ static int ps3fb_ioctl(struct fb_info *info, unsigned int cmd,
if (vmode) {
var = info->var;
fb_videomode_to_var(&var, vmode);
acquire_console_sem();
console_lock();
info->flags |= FBINFO_MISC_USEREVENT;
/* Force, in case only special bits changed */
var.activate |= FB_ACTIVATE_FORCE;
par->new_mode_id = val;
retval = fb_set_var(info, &var);
info->flags &= ~FBINFO_MISC_USEREVENT;
release_console_sem();
console_unlock();
}
break;
}
@ -881,9 +881,9 @@ static int ps3fb_ioctl(struct fb_info *info, unsigned int cmd,
break;
dev_dbg(info->device, "PS3FB_IOCTL_FSEL:%d\n", val);
acquire_console_sem();
console_lock();
retval = ps3fb_sync(info, val);
release_console_sem();
console_unlock();
break;
default:
@ -903,9 +903,9 @@ static int ps3fbd(void *arg)
set_current_state(TASK_INTERRUPTIBLE);
if (ps3fb.is_kicked) {
ps3fb.is_kicked = 0;
acquire_console_sem();
console_lock();
ps3fb_sync(info, 0); /* single buffer */
release_console_sem();
console_unlock();
}
schedule();
}

View File

@ -22,7 +22,7 @@
#include <linux/svga.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/console.h> /* Why should fb driver call console functions? because acquire_console_sem() */
#include <linux/console.h> /* Why should fb driver call console functions? because console_lock() */
#include <video/vga.h>
#ifdef CONFIG_MTRR
@ -1113,12 +1113,12 @@ static int s3_pci_suspend(struct pci_dev* dev, pm_message_t state)
dev_info(info->device, "suspend\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if ((state.event == PM_EVENT_FREEZE) || (par->ref_count == 0)) {
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -1129,7 +1129,7 @@ static int s3_pci_suspend(struct pci_dev* dev, pm_message_t state)
pci_set_power_state(dev, pci_choose_state(dev, state));
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -1145,12 +1145,12 @@ static int s3_pci_resume(struct pci_dev* dev)
dev_info(info->device, "resume\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if (par->ref_count == 0) {
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -1159,7 +1159,7 @@ static int s3_pci_resume(struct pci_dev* dev)
err = pci_enable_device(dev);
if (err) {
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
dev_err(info->device, "error %d enabling device for resume\n", err);
return err;
}
@ -1169,7 +1169,7 @@ static int s3_pci_resume(struct pci_dev* dev)
fb_set_suspend(info, 0);
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}

View File

@ -2373,7 +2373,7 @@ static int savagefb_suspend(struct pci_dev *dev, pm_message_t mesg)
if (mesg.event == PM_EVENT_FREEZE)
return 0;
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
if (info->fbops->fb_sync)
@ -2385,7 +2385,7 @@ static int savagefb_suspend(struct pci_dev *dev, pm_message_t mesg)
pci_save_state(dev);
pci_disable_device(dev);
pci_set_power_state(dev, pci_choose_state(dev, mesg));
release_console_sem();
console_unlock();
return 0;
}
@ -2409,7 +2409,7 @@ static int savagefb_resume(struct pci_dev* dev)
return 0;
}
acquire_console_sem();
console_lock();
pci_set_power_state(dev, PCI_D0);
pci_restore_state(dev);
@ -2423,7 +2423,7 @@ static int savagefb_resume(struct pci_dev* dev)
savagefb_set_par(info);
fb_set_suspend(info, 0);
savagefb_blank(FB_BLANK_UNBLANK, info);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -1151,7 +1151,7 @@ static void sh_hdmi_edid_work_fn(struct work_struct *work)
ch = info->par;
acquire_console_sem();
console_lock();
/* HDMI plug in */
if (!sh_hdmi_must_reconfigure(hdmi) &&
@ -1171,7 +1171,7 @@ static void sh_hdmi_edid_work_fn(struct work_struct *work)
fb_set_suspend(info, 0);
}
release_console_sem();
console_unlock();
} else {
ret = 0;
if (!hdmi->info)
@ -1181,12 +1181,12 @@ static void sh_hdmi_edid_work_fn(struct work_struct *work)
fb_destroy_modedb(hdmi->monspec.modedb);
hdmi->monspec.modedb = NULL;
acquire_console_sem();
console_lock();
/* HDMI disconnect */
fb_set_suspend(hdmi->info, 1);
release_console_sem();
console_unlock();
pm_runtime_put(hdmi->dev);
}

View File

@ -912,9 +912,9 @@ static int sh_mobile_release(struct fb_info *info, int user)
/* Nothing to reconfigure, when called from fbcon */
if (user) {
acquire_console_sem();
console_lock();
sh_mobile_fb_reconfig(info);
release_console_sem();
console_unlock();
}
mutex_unlock(&ch->open_lock);

View File

@ -2010,9 +2010,9 @@ static int sm501fb_suspend_fb(struct sm501fb_info *info,
/* tell console/fb driver we are suspending */
acquire_console_sem();
console_lock();
fb_set_suspend(fbi, 1);
release_console_sem();
console_unlock();
/* backup copies in case chip is powered down over suspend */
@ -2069,9 +2069,9 @@ static void sm501fb_resume_fb(struct sm501fb_info *info,
memcpy_toio(par->cursor.k_addr, par->store_cursor,
par->cursor.size);
acquire_console_sem();
console_lock();
fb_set_suspend(fbi, 0);
release_console_sem();
console_unlock();
vfree(par->store_fb);
vfree(par->store_cursor);

View File

@ -25,7 +25,7 @@
#include <linux/fb.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
/* Why should fb driver call console functions? because acquire_console_sem() */
/* Why should fb driver call console functions? because console_lock() */
#include <linux/console.h>
#include <linux/mfd/core.h>
#include <linux/mfd/tmio.h>
@ -944,7 +944,7 @@ static int tmiofb_suspend(struct platform_device *dev, pm_message_t state)
struct mfd_cell *cell = dev->dev.platform_data;
int retval = 0;
acquire_console_sem();
console_lock();
fb_set_suspend(info, 1);
@ -965,7 +965,7 @@ static int tmiofb_suspend(struct platform_device *dev, pm_message_t state)
if (cell->suspend)
retval = cell->suspend(dev);
release_console_sem();
console_unlock();
return retval;
}
@ -976,7 +976,7 @@ static int tmiofb_resume(struct platform_device *dev)
struct mfd_cell *cell = dev->dev.platform_data;
int retval = 0;
acquire_console_sem();
console_lock();
if (cell->resume) {
retval = cell->resume(dev);
@ -992,7 +992,7 @@ static int tmiofb_resume(struct platform_device *dev)
fb_set_suspend(info, 0);
out:
release_console_sem();
console_unlock();
return retval;
}
#else

View File

@ -1674,17 +1674,17 @@ static int parse_mode(const char *str, u32 *xres, u32 *yres)
#ifdef CONFIG_PM
static int viafb_suspend(void *unused)
{
acquire_console_sem();
console_lock();
fb_set_suspend(viafbinfo, 1);
viafb_sync(viafbinfo);
release_console_sem();
console_unlock();
return 0;
}
static int viafb_resume(void *unused)
{
acquire_console_sem();
console_lock();
if (viaparinfo->shared->vdev->engine_mmio)
viafb_reset_engine(viaparinfo);
viafb_set_par(viafbinfo);
@ -1692,7 +1692,7 @@ static int viafb_resume(void *unused)
viafb_set_par(viafbinfo1);
fb_set_suspend(viafbinfo, 0);
release_console_sem();
console_unlock();
return 0;
}

View File

@ -23,7 +23,7 @@
#include <linux/svga.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/console.h> /* Why should fb driver call console functions? because acquire_console_sem() */
#include <linux/console.h> /* Why should fb driver call console functions? because console_lock() */
#include <video/vga.h>
#ifdef CONFIG_MTRR
@ -819,12 +819,12 @@ static int vt8623_pci_suspend(struct pci_dev* dev, pm_message_t state)
dev_info(info->device, "suspend\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if ((state.event == PM_EVENT_FREEZE) || (par->ref_count == 0)) {
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -835,7 +835,7 @@ static int vt8623_pci_suspend(struct pci_dev* dev, pm_message_t state)
pci_set_power_state(dev, pci_choose_state(dev, state));
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}
@ -850,7 +850,7 @@ static int vt8623_pci_resume(struct pci_dev* dev)
dev_info(info->device, "resume\n");
acquire_console_sem();
console_lock();
mutex_lock(&(par->open_lock));
if (par->ref_count == 0)
@ -869,7 +869,7 @@ static int vt8623_pci_resume(struct pci_dev* dev)
fail:
mutex_unlock(&(par->open_lock));
release_console_sem();
console_unlock();
return 0;
}

View File

@ -491,12 +491,12 @@ xenfb_make_preferred_console(void)
if (console_set_on_cmdline)
return;
acquire_console_sem();
console_lock();
for_each_console(c) {
if (!strcmp(c->name, "tty") && c->index == 0)
break;
}
release_console_sem();
console_unlock();
if (c) {
unregister_console(c);
c->flags |= CON_CONSDEV;

View File

@ -67,7 +67,7 @@ static void *c_start(struct seq_file *m, loff_t *pos)
struct console *con;
loff_t off = 0;
acquire_console_sem();
console_lock();
for_each_console(con)
if (off++ == *pos)
break;
@ -84,7 +84,7 @@ static void *c_next(struct seq_file *m, void *v, loff_t *pos)
static void c_stop(struct seq_file *m, void *v)
{
release_console_sem();
console_unlock();
}
static const struct seq_operations consoles_op = {

View File

@ -139,9 +139,9 @@ extern int update_console_cmdline(char *name, int idx, char *name_new, int idx_n
extern void register_console(struct console *);
extern int unregister_console(struct console *);
extern struct console *console_drivers;
extern void acquire_console_sem(void);
extern int try_acquire_console_sem(void);
extern void release_console_sem(void);
extern void console_lock(void);
extern int console_trylock(void);
extern void console_unlock(void);
extern void console_conditional_schedule(void);
extern void console_unblank(void);
extern struct tty_driver *console_device(int *);

View File

@ -97,7 +97,7 @@ static int console_locked, console_suspended;
/*
* logbuf_lock protects log_buf, log_start, log_end, con_start and logged_chars
* It is also used in interesting ways to provide interlocking in
* release_console_sem().
* console_unlock();.
*/
static DEFINE_SPINLOCK(logbuf_lock);
@ -501,7 +501,7 @@ static void _call_console_drivers(unsigned start,
/*
* Call the console drivers, asking them to write out
* log_buf[start] to log_buf[end - 1].
* The console_sem must be held.
* The console_lock must be held.
*/
static void call_console_drivers(unsigned start, unsigned end)
{
@ -604,11 +604,11 @@ static int have_callable_console(void)
*
* This is printk(). It can be called from any context. We want it to work.
*
* We try to grab the console_sem. If we succeed, it's easy - we log the output and
* We try to grab the console_lock. If we succeed, it's easy - we log the output and
* call the console drivers. If we fail to get the semaphore we place the output
* into the log buffer and return. The current holder of the console_sem will
* notice the new output in release_console_sem() and will send it to the
* consoles before releasing the semaphore.
* notice the new output in console_unlock(); and will send it to the
* consoles before releasing the lock.
*
* One effect of this deferred printing is that code which calls printk() and
* then changes console_loglevel may break. This is because console_loglevel
@ -659,19 +659,19 @@ static inline int can_use_console(unsigned int cpu)
/*
* Try to get console ownership to actually show the kernel
* messages from a 'printk'. Return true (and with the
* console_semaphore held, and 'console_locked' set) if it
* console_lock held, and 'console_locked' set) if it
* is successful, false otherwise.
*
* This gets called with the 'logbuf_lock' spinlock held and
* interrupts disabled. It should return with 'lockbuf_lock'
* released but interrupts still disabled.
*/
static int acquire_console_semaphore_for_printk(unsigned int cpu)
static int console_trylock_for_printk(unsigned int cpu)
__releases(&logbuf_lock)
{
int retval = 0;
if (!try_acquire_console_sem()) {
if (console_trylock()) {
retval = 1;
/*
@ -827,12 +827,12 @@ asmlinkage int vprintk(const char *fmt, va_list args)
* actual magic (print out buffers, wake up klogd,
* etc).
*
* The acquire_console_semaphore_for_printk() function
* The console_trylock_for_printk() function
* will release 'logbuf_lock' regardless of whether it
* actually gets the semaphore or not.
*/
if (acquire_console_semaphore_for_printk(this_cpu))
release_console_sem();
if (console_trylock_for_printk(this_cpu))
console_unlock();
lockdep_on();
out_restore_irqs:
@ -993,7 +993,7 @@ void suspend_console(void)
if (!console_suspend_enabled)
return;
printk("Suspending console(s) (use no_console_suspend to debug)\n");
acquire_console_sem();
console_lock();
console_suspended = 1;
up(&console_sem);
}
@ -1004,7 +1004,7 @@ void resume_console(void)
return;
down(&console_sem);
console_suspended = 0;
release_console_sem();
console_unlock();
}
/**
@ -1027,21 +1027,21 @@ static int __cpuinit console_cpu_notify(struct notifier_block *self,
case CPU_DYING:
case CPU_DOWN_FAILED:
case CPU_UP_CANCELED:
acquire_console_sem();
release_console_sem();
console_lock();
console_unlock();
}
return NOTIFY_OK;
}
/**
* acquire_console_sem - lock the console system for exclusive use.
* console_lock - lock the console system for exclusive use.
*
* Acquires a semaphore which guarantees that the caller has
* Acquires a lock which guarantees that the caller has
* exclusive access to the console system and the console_drivers list.
*
* Can sleep, returns nothing.
*/
void acquire_console_sem(void)
void console_lock(void)
{
BUG_ON(in_interrupt());
down(&console_sem);
@ -1050,21 +1050,29 @@ void acquire_console_sem(void)
console_locked = 1;
console_may_schedule = 1;
}
EXPORT_SYMBOL(acquire_console_sem);
EXPORT_SYMBOL(console_lock);
int try_acquire_console_sem(void)
/**
* console_trylock - try to lock the console system for exclusive use.
*
* Tried to acquire a lock which guarantees that the caller has
* exclusive access to the console system and the console_drivers list.
*
* returns 1 on success, and 0 on failure to acquire the lock.
*/
int console_trylock(void)
{
if (down_trylock(&console_sem))
return -1;
return 0;
if (console_suspended) {
up(&console_sem);
return -1;
return 0;
}
console_locked = 1;
console_may_schedule = 0;
return 0;
return 1;
}
EXPORT_SYMBOL(try_acquire_console_sem);
EXPORT_SYMBOL(console_trylock);
int is_console_locked(void)
{
@ -1095,20 +1103,20 @@ void wake_up_klogd(void)
}
/**
* release_console_sem - unlock the console system
* console_unlock - unlock the console system
*
* Releases the semaphore which the caller holds on the console system
* Releases the console_lock which the caller holds on the console system
* and the console driver list.
*
* While the semaphore was held, console output may have been buffered
* by printk(). If this is the case, release_console_sem() emits
* the output prior to releasing the semaphore.
* While the console_lock was held, console output may have been buffered
* by printk(). If this is the case, console_unlock(); emits
* the output prior to releasing the lock.
*
* If there is output waiting for klogd, we wake it up.
*
* release_console_sem() may be called from any context.
* console_unlock(); may be called from any context.
*/
void release_console_sem(void)
void console_unlock(void)
{
unsigned long flags;
unsigned _con_start, _log_end;
@ -1141,7 +1149,7 @@ void release_console_sem(void)
if (wake_klogd)
wake_up_klogd();
}
EXPORT_SYMBOL(release_console_sem);
EXPORT_SYMBOL(console_unlock);
/**
* console_conditional_schedule - yield the CPU if required
@ -1150,7 +1158,7 @@ EXPORT_SYMBOL(release_console_sem);
* if this CPU should yield the CPU to another task, do
* so here.
*
* Must be called within acquire_console_sem().
* Must be called within console_lock();.
*/
void __sched console_conditional_schedule(void)
{
@ -1171,14 +1179,14 @@ void console_unblank(void)
if (down_trylock(&console_sem) != 0)
return;
} else
acquire_console_sem();
console_lock();
console_locked = 1;
console_may_schedule = 0;
for_each_console(c)
if ((c->flags & CON_ENABLED) && c->unblank)
c->unblank();
release_console_sem();
console_unlock();
}
/*
@ -1189,7 +1197,7 @@ struct tty_driver *console_device(int *index)
struct console *c;
struct tty_driver *driver = NULL;
acquire_console_sem();
console_lock();
for_each_console(c) {
if (!c->device)
continue;
@ -1197,7 +1205,7 @@ struct tty_driver *console_device(int *index)
if (driver)
break;
}
release_console_sem();
console_unlock();
return driver;
}
@ -1208,17 +1216,17 @@ struct tty_driver *console_device(int *index)
*/
void console_stop(struct console *console)
{
acquire_console_sem();
console_lock();
console->flags &= ~CON_ENABLED;
release_console_sem();
console_unlock();
}
EXPORT_SYMBOL(console_stop);
void console_start(struct console *console)
{
acquire_console_sem();
console_lock();
console->flags |= CON_ENABLED;
release_console_sem();
console_unlock();
}
EXPORT_SYMBOL(console_start);
@ -1340,7 +1348,7 @@ void register_console(struct console *newcon)
* Put this console in the list - keep the
* preferred driver at the head of the list.
*/
acquire_console_sem();
console_lock();
if ((newcon->flags & CON_CONSDEV) || console_drivers == NULL) {
newcon->next = console_drivers;
console_drivers = newcon;
@ -1352,14 +1360,14 @@ void register_console(struct console *newcon)
}
if (newcon->flags & CON_PRINTBUFFER) {
/*
* release_console_sem() will print out the buffered messages
* console_unlock(); will print out the buffered messages
* for us.
*/
spin_lock_irqsave(&logbuf_lock, flags);
con_start = log_start;
spin_unlock_irqrestore(&logbuf_lock, flags);
}
release_console_sem();
console_unlock();
console_sysfs_notify();
/*
@ -1396,7 +1404,7 @@ int unregister_console(struct console *console)
return braille_unregister_console(console);
#endif
acquire_console_sem();
console_lock();
if (console_drivers == console) {
console_drivers=console->next;
res = 0;
@ -1418,7 +1426,7 @@ int unregister_console(struct console *console)
if (console_drivers != NULL && console->flags & CON_CONSDEV)
console_drivers->flags |= CON_CONSDEV;
release_console_sem();
console_unlock();
console_sysfs_notify();
return res;
}