Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 96959
b: refs/heads/master
c: 88e6c94
h: refs/heads/master
i:
  96957: 2c8d710
  96955: acfa2c4
  96951: 7d43ef9
  96943: 39a8cf9
  96927: 64bf526
  96895: 72c99f7
v: v3
  • Loading branch information
Linus Torvalds committed May 19, 2008
1 parent a55cbcc commit 33dbf1a
Show file tree
Hide file tree
Showing 16 changed files with 83 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c85665ffa8e351a5b38f8e4ceaec527d8783c970
refs/heads/master: 88e6c9499f959cdac9ef120a1a1e857da5944052
14 changes: 7 additions & 7 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -2352,24 +2352,24 @@ S: Supported
KERNEL VIRTUAL MACHINE (KVM)
P: Avi Kivity
M: avi@qumranet.com
L: kvm-devel@lists.sourceforge.net
W: kvm.sourceforge.net
L: kvm@vger.kernel.org
W: http://kvm.qumranet.com
S: Supported

KERNEL VIRTUAL MACHINE (KVM) FOR POWERPC
P: Hollis Blanchard
M: hollisb@us.ibm.com
L: kvm-ppc-devel@lists.sourceforge.net
W: kvm.sourceforge.net
L: kvm-ppc@vger.kernel.org
W: http://kvm.qumranet.com
S: Supported

KERNEL VIRTUAL MACHINE For Itanium(KVM/IA64)
KERNEL VIRTUAL MACHINE For Itanium (KVM/IA64)
P: Anthony Xu
M: anthony.xu@intel.com
P: Xiantao Zhang
M: xiantao.zhang@intel.com
L: kvm-ia64-devel@lists.sourceforge.net
W: kvm.sourceforge.net
L: kvm-ia64@vger.kernel.org
W: http://kvm.qumranet.com
S: Supported

KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
Expand Down
3 changes: 1 addition & 2 deletions trunk/arch/ia64/kvm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ offsets-file := asm-offsets.h
always := $(offsets-file)
targets := $(offsets-file)
targets += arch/ia64/kvm/asm-offsets.s
clean-files := $(addprefix $(objtree)/,$(targets) $(obj)/memcpy.S $(obj)/memset.S)

# Default sed regexp - multiline due to syntax constraints
define sed-y
Expand Down Expand Up @@ -54,5 +53,5 @@ EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127
kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \
vtlb.o process.o
#Add link memcpy and memset to avoid possible structure assignment error
kvm-intel-objs += ../lib/memset.o ../lib/memcpy.o
kvm-intel-objs += memcpy.o memset.o
obj-$(CONFIG_KVM_INTEL) += kvm-intel.o
1 change: 1 addition & 0 deletions trunk/arch/ia64/kvm/memcpy.S
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../lib/memcpy.S"
1 change: 1 addition & 0 deletions trunk/arch/ia64/kvm/memset.S
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "../lib/memset.S"
2 changes: 1 addition & 1 deletion trunk/arch/x86/kvm/i8254.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ int pit_has_pending_timer(struct kvm_vcpu *vcpu)
{
struct kvm_pit *pit = vcpu->kvm->arch.vpit;

if (pit && vcpu->vcpu_id == 0)
if (pit && vcpu->vcpu_id == 0 && pit->pit_state.inject_pending)
return atomic_read(&pit->pit_state.pit_timer.pending);

return 0;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kvm/lapic.c
Original file line number Diff line number Diff line change
Expand Up @@ -957,7 +957,7 @@ int apic_has_pending_timer(struct kvm_vcpu *vcpu)
{
struct kvm_lapic *lapic = vcpu->arch.apic;

if (lapic)
if (lapic && apic_enabled(lapic) && apic_lvt_enabled(lapic, APIC_LVTT))
return atomic_read(&lapic->timer.pending);

return 0;
Expand Down
7 changes: 5 additions & 2 deletions trunk/arch/x86/kvm/x86_emulate.c
Original file line number Diff line number Diff line change
Expand Up @@ -677,8 +677,9 @@ static int decode_modrm(struct x86_emulate_ctxt *ctxt,
c->use_modrm_ea = 1;

if (c->modrm_mod == 3) {
c->modrm_val = *(unsigned long *)
decode_register(c->modrm_rm, c->regs, c->d & ByteOp);
c->modrm_ptr = decode_register(c->modrm_rm,
c->regs, c->d & ByteOp);
c->modrm_val = *(unsigned long *)c->modrm_ptr;
return rc;
}

Expand Down Expand Up @@ -1005,6 +1006,7 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
if ((c->d & ModRM) && c->modrm_mod == 3) {
c->src.type = OP_REG;
c->src.val = c->modrm_val;
c->src.ptr = c->modrm_ptr;
break;
}
c->src.type = OP_MEM;
Expand Down Expand Up @@ -1049,6 +1051,7 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
if ((c->d & ModRM) && c->modrm_mod == 3) {
c->dst.type = OP_REG;
c->dst.val = c->dst.orig_val = c->modrm_val;
c->dst.ptr = c->modrm_ptr;
break;
}
c->dst.type = OP_MEM;
Expand Down
40 changes: 23 additions & 17 deletions trunk/drivers/s390/kvm/kvm_virtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,27 +78,32 @@ static unsigned desc_size(const struct kvm_device_desc *desc)
+ desc->config_len;
}

/*
* This tests (and acknowleges) a feature bit.
*/
static bool kvm_feature(struct virtio_device *vdev, unsigned fbit)
/* This gets the device's feature bits. */
static u32 kvm_get_features(struct virtio_device *vdev)
{
unsigned int i;
u32 features = 0;
struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
u8 *features;
u8 *in_features = kvm_vq_features(desc);

if (fbit / 8 > desc->feature_len)
return false;
for (i = 0; i < min(desc->feature_len * 8, 32); i++)
if (in_features[i / 8] & (1 << (i % 8)))
features |= (1 << i);
return features;
}

features = kvm_vq_features(desc);
if (!(features[fbit / 8] & (1 << (fbit % 8))))
return false;
static void kvm_set_features(struct virtio_device *vdev, u32 features)
{
unsigned int i;
struct kvm_device_desc *desc = to_kvmdev(vdev)->desc;
/* Second half of bitmap is features we accept. */
u8 *out_features = kvm_vq_features(desc) + desc->feature_len;

/*
* We set the matching bit in the other half of the bitmap to tell the
* Host we want to use this feature.
*/
features[desc->feature_len + fbit / 8] |= (1 << (fbit % 8));
return true;
memset(out_features, 0, desc->feature_len);
for (i = 0; i < min(desc->feature_len * 8, 32); i++) {
if (features & (1 << i))
out_features[i / 8] |= (1 << (i % 8));
}
}

/*
Expand Down Expand Up @@ -221,7 +226,8 @@ static void kvm_del_vq(struct virtqueue *vq)
* The config ops structure as defined by virtio config
*/
static struct virtio_config_ops kvm_vq_configspace_ops = {
.feature = kvm_feature,
.get_features = kvm_get_features,
.set_features = kvm_set_features,
.get = kvm_get,
.set = kvm_set,
.get_status = kvm_get_status,
Expand Down
27 changes: 14 additions & 13 deletions trunk/fs/dlm/lowcomms.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
#include <linux/pagemap.h>
#include <linux/idr.h>
#include <linux/file.h>
#include <linux/mutex.h>
#include <linux/sctp.h>
#include <net/sctp/user.h>

Expand Down Expand Up @@ -138,7 +139,7 @@ static struct workqueue_struct *recv_workqueue;
static struct workqueue_struct *send_workqueue;

static DEFINE_IDR(connections_idr);
static DECLARE_MUTEX(connections_lock);
static DEFINE_MUTEX(connections_lock);
static int max_nodeid;
static struct kmem_cache *con_cache;

Expand Down Expand Up @@ -205,9 +206,9 @@ static struct connection *nodeid2con(int nodeid, gfp_t allocation)
{
struct connection *con;

down(&connections_lock);
mutex_lock(&connections_lock);
con = __nodeid2con(nodeid, allocation);
up(&connections_lock);
mutex_unlock(&connections_lock);

return con;
}
Expand All @@ -218,15 +219,15 @@ static struct connection *assoc2con(int assoc_id)
int i;
struct connection *con;

down(&connections_lock);
mutex_lock(&connections_lock);
for (i=0; i<=max_nodeid; i++) {
con = __nodeid2con(i, 0);
if (con && con->sctp_assoc == assoc_id) {
up(&connections_lock);
mutex_unlock(&connections_lock);
return con;
}
}
up(&connections_lock);
mutex_unlock(&connections_lock);
return NULL;
}

Expand Down Expand Up @@ -381,7 +382,7 @@ static void sctp_init_failed(void)
int i;
struct connection *con;

down(&connections_lock);
mutex_lock(&connections_lock);
for (i=1; i<=max_nodeid; i++) {
con = __nodeid2con(i, 0);
if (!con)
Expand All @@ -393,7 +394,7 @@ static void sctp_init_failed(void)
}
}
}
up(&connections_lock);
mutex_unlock(&connections_lock);
}

/* Something happened to an association */
Expand Down Expand Up @@ -930,7 +931,7 @@ static void tcp_connect_to_sock(struct connection *con)
* errors we try again until the max number of retries is reached.
*/
if (result != -EHOSTUNREACH && result != -ENETUNREACH &&
result != -ENETDOWN && result != EINVAL
result != -ENETDOWN && result != -EINVAL
&& result != -EPROTONOSUPPORT) {
lowcomms_connect_sock(con);
result = 0;
Expand Down Expand Up @@ -1417,7 +1418,7 @@ void dlm_lowcomms_stop(void)
/* Set all the flags to prevent any
socket activity.
*/
down(&connections_lock);
mutex_lock(&connections_lock);
for (i = 0; i <= max_nodeid; i++) {
con = __nodeid2con(i, 0);
if (con) {
Expand All @@ -1426,11 +1427,11 @@ void dlm_lowcomms_stop(void)
con->sock->sk->sk_user_data = NULL;
}
}
up(&connections_lock);
mutex_unlock(&connections_lock);

work_stop();

down(&connections_lock);
mutex_lock(&connections_lock);
clean_writequeues();

for (i = 0; i <= max_nodeid; i++) {
Expand All @@ -1443,7 +1444,7 @@ void dlm_lowcomms_stop(void)
}
}
max_nodeid = 0;
up(&connections_lock);
mutex_unlock(&connections_lock);
kmem_cache_destroy(con_cache);
idr_init(&connections_idr);
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/dlm/netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ int __init dlm_netlink_init(void)
return rv;
}

void __exit dlm_netlink_exit(void)
void dlm_netlink_exit(void)
{
genl_unregister_ops(&family, &dlm_nl_ops);
genl_unregister_family(&family);
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/dlm/plock.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ static ssize_t dev_write(struct file *file, const char __user *u, size_t count,
struct plock_xop *xop;
xop = (struct plock_xop *)op;
if (xop->callback)
count = dlm_plock_callback(op);
dlm_plock_callback(op);
else
wake_up(&recv_wq);
} else
Expand Down
12 changes: 9 additions & 3 deletions trunk/include/asm-ia64/kvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,13 @@
*/

#include <asm/types.h>
#include <asm/fpu.h>

#include <linux/ioctl.h>

/* Architectural interrupt line count. */
#define KVM_NR_INTERRUPTS 256

#define KVM_IOAPIC_NUM_PINS 24
#define KVM_IOAPIC_NUM_PINS 48

struct kvm_ioapic_state {
__u64 base_address;
Expand Down Expand Up @@ -61,6 +60,13 @@ struct kvm_ioapic_state {

#define KVM_CONTEXT_SIZE 8*1024

struct kvm_fpreg {
union {
unsigned long bits[2];
long double __dummy; /* force 16-byte alignment */
} u;
};

union context {
/* 8K size */
char dummy[KVM_CONTEXT_SIZE];
Expand All @@ -77,7 +83,7 @@ union context {
unsigned long ibr[8];
unsigned long dbr[8];
unsigned long pkr[8];
struct ia64_fpreg fr[128];
struct kvm_fpreg fr[128];
};
};

Expand Down
1 change: 1 addition & 0 deletions trunk/include/asm-x86/kvm_x86_emulate.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ struct decode_cache {
u8 modrm_rm;
u8 use_modrm_ea;
unsigned long modrm_ea;
void *modrm_ptr;
unsigned long modrm_val;
struct fetch_cache fetch;
};
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/linux/Kbuild
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ header-y += ixjuser.h
header-y += jffs2.h
header-y += keyctl.h
header-y += limits.h
header-y += dlm_plock.h
header-y += magic.h
header-y += major.h
header-y += matroxfb.h
Expand Down Expand Up @@ -190,6 +189,7 @@ unifdef-y += cyclades.h
unifdef-y += dccp.h
unifdef-y += dirent.h
unifdef-y += dlm.h
unifdef-y += dlm_plock.h
unifdef-y += edd.h
unifdef-y += elf.h
unifdef-y += elfcore.h
Expand Down
29 changes: 15 additions & 14 deletions trunk/virt/kvm/kvm_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,25 +758,26 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn)
*/
void kvm_vcpu_block(struct kvm_vcpu *vcpu)
{
DECLARE_WAITQUEUE(wait, current);

add_wait_queue(&vcpu->wq, &wait);

/*
* We will block until either an interrupt or a signal wakes us up
*/
while (!kvm_cpu_has_interrupt(vcpu)
&& !kvm_cpu_has_pending_timer(vcpu)
&& !signal_pending(current)
&& !kvm_arch_vcpu_runnable(vcpu)) {
set_current_state(TASK_INTERRUPTIBLE);
DEFINE_WAIT(wait);

for (;;) {
prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);

if (kvm_cpu_has_interrupt(vcpu))
break;
if (kvm_cpu_has_pending_timer(vcpu))
break;
if (kvm_arch_vcpu_runnable(vcpu))
break;
if (signal_pending(current))
break;

vcpu_put(vcpu);
schedule();
vcpu_load(vcpu);
}

__set_current_state(TASK_RUNNING);
remove_wait_queue(&vcpu->wq, &wait);
finish_wait(&vcpu->wq, &wait);
}

void kvm_resched(struct kvm_vcpu *vcpu)
Expand Down

0 comments on commit 33dbf1a

Please sign in to comment.