Am Dienstag, 25. November 2008 schrieb Rusty Russell: > > Also, the x86_64 allmodconfig build failed like this: > > > > ERROR: "hvc_resize" [drivers/char/virtio_console.ko] undefined! > > > > hvc_resize is currently not exported to modules. > > > > I have dropped the rr tree again. > > OK, I've dropped Christian's patch for the moment until he fixes this. I'm > travelling to Sydney for the day so I won't get a chance to fix this if it > breaks tomorrow :( Ok. Sorry about that. allmodconfig on s390 and i386 select VIRTIO_CONSOLE as (y) and not as (m), therefore my tests did not trigger this problem. I will try to get an x86_64 box to test on in the future. This version of the patch adds an EXPORT_SYMBOL_GPL. Feel free to add it whenever it fits your schedule. [PATCH 1/2]: virtio_console: support console resizing From: Christian Borntraeger <borntraeger@xxxxxxxxxx> this patch uses the new hvc callback hvc_resize to set the window site which allows to change the tty size of hvc_console via a hvc_resize function. I have added a new feature bit VIRTIO_CONSOLE_F_SIZE. The driver will change the window size on tty open and via the config_changed callback of the transport. Currently lguest and kvm_s390 have not implemented this callback, but the callback can be implemented at a later point in time. Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> --- drivers/char/hvc_console.c | 1 + drivers/char/virtio_console.c | 30 +++++++++++++++++++++++++++++- include/linux/virtio_console.h | 11 +++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) Index: kvm/drivers/char/hvc_console.c =================================================================== --- kvm.orig/drivers/char/hvc_console.c +++ kvm/drivers/char/hvc_console.c @@ -694,6 +694,7 @@ void hvc_resize(struct hvc_struct *hp, s schedule_work(&hp->tty_resize); } } +EXPORT_SYMBOL_GPL(hvc_resize); /* * This kthread is either polling or interrupt driven. This is determined by Index: kvm/drivers/char/virtio_console.c =================================================================== --- kvm.orig/drivers/char/virtio_console.c +++ kvm/drivers/char/virtio_console.c @@ -138,12 +138,33 @@ int __init virtio_cons_early_init(int (* } /* + * virtio console configuration. This supports: + * - console resize + */ +static void virtcons_apply_config(struct virtio_device *dev) +{ + struct winsize ws; + + if (virtio_has_feature(dev, VIRTIO_CONSOLE_F_SIZE)) { + dev->config->get(dev, + offsetof(struct virtio_console_config, cols), + &ws.ws_col, sizeof(u16)); + dev->config->get(dev, + offsetof(struct virtio_console_config, rows), + &ws.ws_row, sizeof(u16)); + hvc_resize(hvc, ws); + } +} + +/* * we support only one console, the hvc struct is a global var - * There is no need to do anything + * We set the configuration at this point, since we now have a tty */ static int notifier_add_vio(struct hvc_struct *hp, int data) { hp->irq_requested = 1; + virtcons_apply_config(vdev); + return 0; } @@ -234,11 +255,18 @@ static struct virtio_device_id id_table[ { 0 }, }; +static unsigned int features[] = { + VIRTIO_CONSOLE_F_SIZE, +}; + static struct virtio_driver virtio_console = { + .feature_table = features, + .feature_table_size = ARRAY_SIZE(features), .driver.name = KBUILD_MODNAME, .driver.owner = THIS_MODULE, .id_table = id_table, .probe = virtcons_probe, + .config_changed = virtcons_apply_config, }; static int __init init(void) Index: kvm/include/linux/virtio_console.h =================================================================== --- kvm.orig/include/linux/virtio_console.h +++ kvm/include/linux/virtio_console.h @@ -7,6 +7,17 @@ /* The ID for virtio console */ #define VIRTIO_ID_CONSOLE 3 +/* Feature bits */ +#define VIRTIO_CONSOLE_F_SIZE 0 /* Does host provide console size? */ + +struct virtio_console_config { + /* colums of the screens */ + __u16 cols; + /* rows of the screens */ + __u16 rows; +} __attribute__((packed)); + + #ifdef __KERNEL__ int __init virtio_cons_early_init(int (*put_chars)(u32, const char *, int)); #endif /* __KERNEL__ */ -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html