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:
parent
3689456b4b
commit
ac751efa6a
|
@ -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) {
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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 = ®istered_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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
/***********************************************************************
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 *);
|
||||
|
|
100
kernel/printk.c
100
kernel/printk.c
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue