Hi all,

I am trying to bring  virtual network interface in non-root cell and also i am 
trying to understand how virtual network will initialize while loading non-root 
cell, i am putting some print statements in ivshmem-net.c file i.e present in 
kernel source[drivers/net/ivshmem-net.c]. 

In ivshm_net_state_change function we have couple of cases like 
IVSHM_NET_STATE_RESET, IVSHM_NET_STATE_INIT, IVSHM_NET_STATE_READY etc.. i 
added some of print statements in this cases, i am able to see logs from case 
IVSHM_NET_STATE_RESET after that i am not able to see any logs from other cases.

Assumption:
>From the above behavior i assume my ivshmem-net is not brought up properly, 
>because i am not able to see the logs from IVSHM_NET_STATE_INIT, 
>IVSHM_NET_STATE_READY cases. 

Can anyone please tell me my assumption is correct or not? 
I am attaching my ivshmem-net.c file[added with logs], and also my non-root 
cell logs[search RH in non-root cell logs, that line is from ivshmem-net.c]

I am adding below configuration to both root and non-root cell. the non-root 
cell have JAILHOUSE_MEM_ROOTSHARED flag. shmem_region has changed based on the 
index value in non-root cell.

                {
                        .type = JAILHOUSE_PCI_TYPE_IVSHMEM,
                        .iommu = 1,
                        .domain = 0x0,
                        .bdf = 0x0e << 3,
                        .bar_mask = {
                                0xffffff00, 0xffffffff, 0x00000000,
                                0x00000000, 0xffffffe0, 0xffffffff,
                        },
                        .num_msix_vectors = 1,
                        .shmem_region = 75,
                        .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VETH,
                },

                /* MemRegion: 3f200000 : IVSHMEM-net*/
                {
                        .phys_start = 0x3f200000,
                        .virt_start = 0x3f200000,
                        .size = 0x100000,
                        .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
                },

After loading non-root cell i am able to see the virtual network interfaces is 
coming up by issuing command like ifconfig -a, and i can pci device is also 
added. I can see interrupt is registered with ivshmem-net.

But i am not able to do any operation using these virtual network interface[ if 
i try to ping any other network or root-cell network, i am not able to ping, i 
am not seeing any changes in the interrupt number].

I have another question regarding interrupts, how can i know interrupt is 
working or not? whether i need to trigger the interrupt externally?-> if it is 
yes means how can i trigger the interrupts   

Thanks
Prajwal
  
  

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
/*
 * Copyright 2016 Mans Rullgard <[email protected]>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/io.h>
#include <linux/bitops.h>
#include <linux/interrupt.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/rtnetlink.h>
#include <linux/virtio_ring.h>

#define DRV_NAME "ivshmem-net"

#define JAILHOUSE_CFG_SHMEM_PTR	0x40
#define JAILHOUSE_CFG_SHMEM_SZ	0x48

#define IVSHMEM_INTX_ENABLE	0x1

#define IVSHM_NET_STATE_RESET	0
#define IVSHM_NET_STATE_INIT	1
#define IVSHM_NET_STATE_READY	2
#define IVSHM_NET_STATE_RUN	3

#define IVSHM_NET_FLAG_RUN	0

#define IVSHM_NET_MTU_MIN 256
#define IVSHM_NET_MTU_MAX 65535
#define IVSHM_NET_MTU_DEF 16384

#define IVSHM_NET_FRAME_SIZE(s) ALIGN(18 + (s), SMP_CACHE_BYTES)

#define IVSHM_NET_VQ_ALIGN 64

struct ivshmem_regs {
	u32 intxctrl;
	u32 istat;
	u32 ivpos;
	u32 doorbell;
	u32 lstate;
	u32 rstate;
};

struct ivshm_net_queue {
	struct vring vr;
	u32 free_head;
	u32 num_free;
	u32 num_added;
	u16 last_avail_idx;
	u16 last_used_idx;

	void *data;
	void *end;
	u32 size;
	u32 head;
	u32 tail;
};

struct ivshm_net_stats {
	u32 interrupts;
	u32 tx_packets;
	u32 tx_notify;
	u32 tx_pause;
	u32 rx_packets;
	u32 rx_notify;
	u32 napi_poll;
	u32 napi_complete;
	u32 napi_poll_n[10];
};

struct ivshm_net {
	struct ivshm_net_queue rx;
	struct ivshm_net_queue tx;

	u32 vrsize;
	u32 qlen;
	u32 qsize;

	spinlock_t tx_free_lock;
	spinlock_t tx_clean_lock;

	struct napi_struct napi;

	u32 lstate;
	u32 rstate;

	unsigned long flags;

	struct workqueue_struct *state_wq;
	struct work_struct state_work;

	struct ivshm_net_stats stats;

	struct ivshmem_regs __iomem *ivshm_regs;
	void *shm;
	phys_addr_t shmaddr;
	resource_size_t shmlen;
	u32 peer_id;

	struct pci_dev *pdev;
};

static void *ivshm_net_desc_data(struct ivshm_net *in,
				 struct ivshm_net_queue *q,
				 struct vring_desc *desc,
				 u32 *len)
{
	u64 offs = READ_ONCE(desc->addr);
	u32 dlen = READ_ONCE(desc->len);
	u16 flags = READ_ONCE(desc->flags);
	void *data;

	if (flags)
		return NULL;

	if (offs >= in->shmlen)
		return NULL;

	data = in->shm + offs;

	if (data < q->data || data >= q->end)
		return NULL;

	if (dlen > q->end - data)
		return NULL;

	*len = dlen;

	return data;
}

static void ivshm_net_init_queue(struct ivshm_net *in,
				 struct ivshm_net_queue *q,
				 void *mem, unsigned int len)
{
	memset(q, 0, sizeof(*q));

	vring_init(&q->vr, len, mem, IVSHM_NET_VQ_ALIGN);
	q->data = mem + in->vrsize;
	q->end = q->data + in->qsize;
	q->size = in->qsize;
}

static void ivshm_net_init_queues(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);
	int ivpos = readl(&in->ivshm_regs->ivpos);
	void *tx;
	void *rx;
	int i;

	tx = in->shm +  ivpos * in->shmlen / 2;
	rx = in->shm + !ivpos * in->shmlen / 2;

	memset(tx, 0, in->shmlen / 2);

	ivshm_net_init_queue(in, &in->rx, rx, in->qlen);
	ivshm_net_init_queue(in, &in->tx, tx, in->qlen);

	swap(in->rx.vr.used, in->tx.vr.used);

	in->tx.num_free = in->tx.vr.num;

	for (i = 0; i < in->tx.vr.num - 1; i++)
		in->tx.vr.desc[i].next = i + 1;
}

static int ivshm_net_calc_qsize(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);
	unsigned int vrsize;
	unsigned int qsize;
	unsigned int qlen;

	for (qlen = 4096; qlen > 32; qlen >>= 1) {
		vrsize = vring_size(qlen, IVSHM_NET_VQ_ALIGN);
		vrsize = ALIGN(vrsize, IVSHM_NET_VQ_ALIGN);
		if (vrsize < in->shmlen / 16)
			break;
	}

	if (vrsize > in->shmlen / 2)
		return -EINVAL;

	qsize = in->shmlen / 2 - vrsize;

	if (qsize < 4 * IVSHM_NET_MTU_MIN)
		return -EINVAL;

	in->vrsize = vrsize;
	in->qlen = qlen;
	in->qsize = qsize;

	return 0;
}

static void ivshm_net_notify_tx(struct ivshm_net *in, unsigned int num)
{
	u16 evt, old, new;

	virt_mb();

	evt = READ_ONCE(vring_avail_event(&in->tx.vr));
	old = in->tx.last_avail_idx - num;
	new = in->tx.last_avail_idx;

	if (vring_need_event(evt, new, old)) {
		writel(in->peer_id << 16, &in->ivshm_regs->doorbell);
		in->stats.tx_notify++;
	}
}

static void ivshm_net_enable_rx_irq(struct ivshm_net *in)
{
	vring_avail_event(&in->rx.vr) = in->rx.last_avail_idx;
	virt_wmb();
}

static void ivshm_net_notify_rx(struct ivshm_net *in, unsigned int num)
{
	u16 evt, old, new;

	virt_mb();

	evt = vring_used_event(&in->rx.vr);
	old = in->rx.last_used_idx - num;
	new = in->rx.last_used_idx;

	if (vring_need_event(evt, new, old)) {
		writel(in->peer_id << 16, &in->ivshm_regs->doorbell);
		in->stats.rx_notify++;
	}
}

static void ivshm_net_enable_tx_irq(struct ivshm_net *in)
{
	vring_used_event(&in->tx.vr) = in->tx.last_used_idx;
	virt_wmb();
}

static bool ivshm_net_rx_avail(struct ivshm_net *in)
{
	virt_mb();
	return READ_ONCE(in->rx.vr.avail->idx) != in->rx.last_avail_idx;
}

static size_t ivshm_net_tx_space(struct ivshm_net *in)
{
	struct ivshm_net_queue *tx = &in->tx;
	u32 tail = tx->tail;
	u32 head = tx->head;
	u32 space;

	if (head < tail)
		space = tail - head;
	else
		space = max(tx->size - head, tail);

	return space;
}

static bool ivshm_net_tx_ok(struct ivshm_net *in, unsigned int mtu)
{
	return in->tx.num_free >= 2 &&
		ivshm_net_tx_space(in) >= 2 * IVSHM_NET_FRAME_SIZE(mtu);
}

static u32 ivshm_net_tx_advance(struct ivshm_net_queue *q, u32 *pos, u32 len)
{
	u32 p = *pos;

	len = IVSHM_NET_FRAME_SIZE(len);

	if (q->size - p < len)
		p = 0;
	*pos = p + len;

	return p;
}

static int ivshm_net_tx_frame(struct net_device *ndev, struct sk_buff *skb)
{
	struct ivshm_net *in = netdev_priv(ndev);
	struct ivshm_net_queue *tx = &in->tx;
	struct vring *vr = &tx->vr;
	struct vring_desc *desc;
	unsigned int desc_idx;
	unsigned int avail;
	u32 head;
	void *buf;

	BUG_ON(tx->num_free < 1);

	spin_lock(&in->tx_free_lock);
	desc_idx = tx->free_head;
	desc = &vr->desc[desc_idx];
	tx->free_head = desc->next;
	tx->num_free--;
	spin_unlock(&in->tx_free_lock);

	head = ivshm_net_tx_advance(tx, &tx->head, skb->len);

	buf = tx->data + head;
	skb_copy_and_csum_dev(skb, buf);

	desc->addr = buf - in->shm;
	desc->len = skb->len;
	desc->flags = 0;

	avail = tx->last_avail_idx++ & (vr->num - 1);
	vr->avail->ring[avail] = desc_idx;
	tx->num_added++;

	if (!skb->xmit_more) {
		virt_store_release(&vr->avail->idx, tx->last_avail_idx);
		ivshm_net_notify_tx(in, tx->num_added);
		tx->num_added = 0;
	}

	return 0;
}

static void ivshm_net_tx_clean(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);
	struct ivshm_net_queue *tx = &in->tx;
	struct vring_used_elem *used;
	struct vring *vr = &tx->vr;
	struct vring_desc *desc;
	struct vring_desc *fdesc;
	unsigned int num;
	u16 used_idx;
	u16 last;
	u32 fhead;

	if (!spin_trylock(&in->tx_clean_lock))
		return;

	used_idx = virt_load_acquire(&vr->used->idx);
	last = tx->last_used_idx;

	fdesc = NULL;
	fhead = 0;
	num = 0;

	while (last != used_idx) {
		void *data;
		u32 len;
		u32 tail;

		used = vr->used->ring + (last % vr->num);
		if (used->id >= vr->num || used->len != 1) {
			netdev_err(ndev, "invalid tx used->id %d ->len %d\n",
				   used->id, used->len);
			break;
		}

		desc = &vr->desc[used->id];

		data = ivshm_net_desc_data(in, &in->tx, desc, &len);
		if (!data) {
			netdev_err(ndev, "bad tx descriptor, data == NULL\n");
			break;
		}

		tail = ivshm_net_tx_advance(tx, &tx->tail, len);
		if (data != tx->data + tail) {
			netdev_err(ndev, "bad tx descriptor\n");
			break;
		}

		if (!num)
			fdesc = desc;
		else
			desc->next = fhead;

		fhead = used->id;
		last++;
		num++;
	}

	tx->last_used_idx = last;

	spin_unlock(&in->tx_clean_lock);

	if (num) {
		spin_lock(&in->tx_free_lock);
		fdesc->next = tx->free_head;
		tx->free_head = fhead;
		tx->num_free += num;
		BUG_ON(tx->num_free > vr->num);
		spin_unlock(&in->tx_free_lock);
	}
}

static struct vring_desc *ivshm_net_rx_desc(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);
	struct ivshm_net_queue *rx = &in->rx;
	struct vring *vr = &rx->vr;
	unsigned int avail;
	u16 avail_idx;

	avail_idx = virt_load_acquire(&vr->avail->idx);

	if (avail_idx == rx->last_avail_idx)
		return NULL;

	avail = vr->avail->ring[rx->last_avail_idx++ & (vr->num - 1)];
	if (avail >= vr->num) {
		netdev_err(ndev, "invalid rx avail %d\n", avail);
		return NULL;
	}

	return &vr->desc[avail];
}

static void ivshm_net_rx_finish(struct ivshm_net *in, struct vring_desc *desc)
{
	struct ivshm_net_queue *rx = &in->rx;
	struct vring *vr = &rx->vr;
	unsigned int desc_id = desc - vr->desc;
	unsigned int used;

	used = rx->last_used_idx++ & (vr->num - 1);
	vr->used->ring[used].id = desc_id;
	vr->used->ring[used].len = 1;

	virt_store_release(&vr->used->idx, rx->last_used_idx);
}

static int ivshm_net_poll(struct napi_struct *napi, int budget)
{
	struct net_device *ndev = napi->dev;
	struct ivshm_net *in = container_of(napi, struct ivshm_net, napi);
	int received = 0;

	in->stats.napi_poll++;

	ivshm_net_tx_clean(ndev);

	while (received < budget) {
		struct vring_desc *desc;
		struct sk_buff *skb;
		void *data;
		u32 len;

		desc = ivshm_net_rx_desc(ndev);
		if (!desc)
			break;

		data = ivshm_net_desc_data(in, &in->rx, desc, &len);
		if (!data) {
			netdev_err(ndev, "bad rx descriptor\n");
			break;
		}

		skb = napi_alloc_skb(napi, len);

		if (skb) {
			memcpy(skb_put(skb, len), data, len);
			skb->protocol = eth_type_trans(skb, ndev);
			napi_gro_receive(napi, skb);
		}

		ndev->stats.rx_packets++;
		ndev->stats.rx_bytes += len;

		ivshm_net_rx_finish(in, desc);
		received++;
	}

	if (received < budget) {
		in->stats.napi_complete++;
		napi_complete_done(napi, received);
		ivshm_net_enable_rx_irq(in);
		if (ivshm_net_rx_avail(in))
			napi_schedule(napi);
	}

	if (received)
		ivshm_net_notify_rx(in, received);

	in->stats.rx_packets += received;
	in->stats.napi_poll_n[received ? 1 + min(ilog2(received), 8) : 0]++;

	if (ivshm_net_tx_ok(in, ndev->mtu))
		netif_wake_queue(ndev);

	return received;
}

static netdev_tx_t ivshm_net_xmit(struct sk_buff *skb, struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);

	ivshm_net_tx_clean(ndev);

	if (!ivshm_net_tx_ok(in, ndev->mtu)) {
		ivshm_net_enable_tx_irq(in);
		netif_stop_queue(ndev);
		skb->xmit_more = 0;
		in->stats.tx_pause++;
	}

	ivshm_net_tx_frame(ndev, skb);

	in->stats.tx_packets++;
	ndev->stats.tx_packets++;
	ndev->stats.tx_bytes += skb->len;

	pr_info("RH: ivshm_net_xmit() : tx_packets:(%d):: tx_bytes:(%d)\n",ndev->stats.tx_packets,ndev->stats.tx_bytes);
	dev_consume_skb_any(skb);

	return NETDEV_TX_OK;
}

static void ivshm_net_set_state(struct ivshm_net *in, u32 state)
{
	virt_wmb();
	WRITE_ONCE(in->lstate, state);
	writel(state, &in->ivshm_regs->lstate);

	pr_info("RH: ivshm_net_set_state() : lstate is:(%d)\n",in->lstate);
}

static void ivshm_net_run(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);

	if (in->lstate < IVSHM_NET_STATE_READY)
		return;

	if (!netif_running(ndev))
		return;

	if (test_and_set_bit(IVSHM_NET_FLAG_RUN, &in->flags))
		return;

	netif_start_queue(ndev);
	napi_enable(&in->napi);
	napi_schedule(&in->napi);
	ivshm_net_set_state(in, IVSHM_NET_STATE_RUN);
}

static void ivshm_net_do_stop(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);

	ivshm_net_set_state(in, IVSHM_NET_STATE_RESET);

	if (!test_and_clear_bit(IVSHM_NET_FLAG_RUN, &in->flags))
		return;

	netif_stop_queue(ndev);
	napi_disable(&in->napi);
}

static void ivshm_net_state_change(struct work_struct *work)
{
	struct ivshm_net *in = container_of(work, struct ivshm_net, state_work);
	struct net_device *ndev = in->napi.dev;
	u32 rstate = readl(&in->ivshm_regs->rstate);


pr_info("RH: ivshm_net_set_state(): rstate(%d)\n", rstate);
	switch (in->lstate) {
	case IVSHM_NET_STATE_RESET:
pr_info("RH: ivshm_net_set_state(): in IVSHM_NET_STATE_RESET case: rstate(%d), lstate(%d)\n", rstate, in->lstate);
		if (rstate < IVSHM_NET_STATE_READY)
		{
			pr_info("RH: ivshm_net_set_state() : inside IVSHM_NET_STATE_READY if cond\n");
			ivshm_net_set_state(in, IVSHM_NET_STATE_INIT);
		}
		break;

	case IVSHM_NET_STATE_INIT:
//pr_info("RH: %s(): in IVSHM_NET_STATE_INIT\n", __func__);
pr_info("RH: ivshm_net_set_state(): in IVSHM_NET_STATE_INIT case: rstate(%d), lstate(%d)\n", rstate, in->lstate);
		//if (rstate > IVSHM_NET_STATE_RESET) 	//JH original
		if (rstate >= IVSHM_NET_STATE_RESET) {
			pr_info("RH: ivshm_net_set_state() : inside case: IVSHM_NET_STATE_INIT if cond\n");
			ivshm_net_init_queues(ndev);
			ivshm_net_set_state(in, IVSHM_NET_STATE_READY);

			rtnl_lock();
			call_netdevice_notifiers(NETDEV_CHANGEADDR, ndev);
			rtnl_unlock();
		}
		break;

	case IVSHM_NET_STATE_READY:
	case IVSHM_NET_STATE_RUN:
//pr_info("JH: %s(): in IVSHM_NET_STATE_RUN | IVSHM_NET_STATE_READY\n", __func__);
		if (rstate >= IVSHM_NET_STATE_READY) {
pr_info("RH: ivshm_net_set_state(): in IVSHM_NET_STATE_READY case: rstate(%d), lstate(%d)\n", rstate, in->lstate);
			netif_carrier_on(ndev);
			ivshm_net_run(ndev);
		} else {
pr_info("RH: ivshm_net_set_state(): in IVSHM_NET_STATE_RUN case: rstate(%d), lstate(%d)\n", rstate, in->lstate);
			netif_carrier_off(ndev);
			ivshm_net_do_stop(ndev);
		}
		break;
	}

	virt_wmb();
	WRITE_ONCE(in->rstate, rstate);
}

static void ivshm_net_check_state(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);
	u32 rstate = readl(&in->ivshm_regs->rstate);

	pr_info("RH:%s(): rstate(%d)\n", __func__, rstate);

	if (rstate != in->rstate || !test_bit(IVSHM_NET_FLAG_RUN, &in->flags))
	{
		
		pr_info("RH:%s(): state-work-value in ivshm_net_check_state(%d)\n", __func__, in->state_work.data);
		queue_work(in->state_wq, &in->state_work);
	}
}

static irqreturn_t ivshm_net_int(int irq, void *data)
{
	struct net_device *ndev = data;
	struct ivshm_net *in = netdev_priv(ndev);
pr_info("RH:%s(): IRQ numbr(%d)\n", __func__, irq);

	in->stats.interrupts++;

	ivshm_net_check_state(ndev);
	napi_schedule_irqoff(&in->napi);

	return IRQ_HANDLED;
}

static int ivshm_net_open(struct net_device *ndev)
{
	netdev_reset_queue(ndev);
	ndev->operstate = IF_OPER_UP;
	ivshm_net_run(ndev);

	return 0;
}

static int ivshm_net_stop(struct net_device *ndev)
{
	ndev->operstate = IF_OPER_DOWN;
	ivshm_net_do_stop(ndev);

	return 0;
}

static int ivshm_net_change_mtu(struct net_device *ndev, int mtu)
{
	struct ivshm_net *in = netdev_priv(ndev);
	struct ivshm_net_queue *tx = &in->tx;

	if (mtu < IVSHM_NET_MTU_MIN || mtu > IVSHM_NET_MTU_MAX)
		return -EINVAL;

	if (in->tx.size / mtu < 4)
		return -EINVAL;

	if (ivshm_net_tx_space(in) < 2 * IVSHM_NET_FRAME_SIZE(mtu))
		return -EBUSY;

	if (in->tx.size - tx->head < IVSHM_NET_FRAME_SIZE(mtu) &&
	    tx->head < tx->tail)
		return -EBUSY;

	netif_tx_lock_bh(ndev);
	if (in->tx.size - tx->head < IVSHM_NET_FRAME_SIZE(mtu))
		tx->head = 0;
	netif_tx_unlock_bh(ndev);

	ndev->mtu = mtu;

	return 0;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
static void ivshm_net_poll_controller(struct net_device *ndev)
{
	struct ivshm_net *in = netdev_priv(ndev);

	napi_schedule(&in->napi);
}
#endif

static const struct net_device_ops ivshm_net_ops = {
	.ndo_open		= ivshm_net_open,
	.ndo_stop		= ivshm_net_stop,
	.ndo_start_xmit		= ivshm_net_xmit,
	.ndo_change_mtu		= ivshm_net_change_mtu,
	.ndo_set_mac_address 	= eth_mac_addr,
	.ndo_validate_addr	= eth_validate_addr,
#ifdef CONFIG_NET_POLL_CONTROLLER
	.ndo_poll_controller	= ivshm_net_poll_controller,
#endif
};

static const char ivshm_net_stats[][ETH_GSTRING_LEN] = {
	"interrupts",
	"tx_packets",
	"tx_notify",
	"tx_pause",
	"rx_packets",
	"rx_notify",
	"napi_poll",
	"napi_complete",
	"napi_poll_0",
	"napi_poll_1",
	"napi_poll_2",
	"napi_poll_4",
	"napi_poll_8",
	"napi_poll_16",
	"napi_poll_32",
	"napi_poll_64",
	"napi_poll_128",
	"napi_poll_256",
};

#define NUM_STATS ARRAY_SIZE(ivshm_net_stats)

static int ivshm_net_get_sset_count(struct net_device *ndev, int sset)
{
	if (sset == ETH_SS_STATS)
		return NUM_STATS;

	return -EOPNOTSUPP;
}

static void ivshm_net_get_strings(struct net_device *ndev, u32 sset, u8 *buf)
{
	if (sset == ETH_SS_STATS)
		memcpy(buf, &ivshm_net_stats, sizeof(ivshm_net_stats));
}

static void ivshm_net_get_ethtool_stats(struct net_device *ndev,
					struct ethtool_stats *estats, u64 *st)
{
	struct ivshm_net *in = netdev_priv(ndev);
	unsigned int n = 0;
	unsigned int i;

	st[n++] = in->stats.interrupts;
	st[n++] = in->stats.tx_packets;
	st[n++] = in->stats.tx_notify;
	st[n++] = in->stats.tx_pause;
	st[n++] = in->stats.rx_packets;
	st[n++] = in->stats.rx_notify;
	st[n++] = in->stats.napi_poll;
	st[n++] = in->stats.napi_complete;

	for (i = 0; i < ARRAY_SIZE(in->stats.napi_poll_n); i++)
		st[n++] = in->stats.napi_poll_n[i];

	memset(&in->stats, 0, sizeof(in->stats));
}

#define IVSHM_NET_REGS_LEN	(3 * sizeof(u32) + 6 * sizeof(u16))

static int ivshm_net_get_regs_len(struct net_device *ndev)
{
	return IVSHM_NET_REGS_LEN;
}

static void ivshm_net_get_regs(struct net_device *ndev,
			       struct ethtool_regs *regs, void *p)
{
	struct ivshm_net *in = netdev_priv(ndev);
	u32 *reg32 = p;
	u16 *reg16;

	*reg32++ = in->lstate;
	*reg32++ = in->rstate;
	*reg32++ = in->qlen;

	reg16 = (u16 *)reg32;

	*reg16++ = in->tx.vr.avail ? in->tx.vr.avail->idx : 0;
	*reg16++ = in->tx.vr.used ? in->tx.vr.used->idx : 0;
	*reg16++ = in->tx.vr.avail ? vring_avail_event(&in->tx.vr) : 0;

	*reg16++ = in->rx.vr.avail ? in->rx.vr.avail->idx : 0;
	*reg16++ = in->rx.vr.used ? in->rx.vr.used->idx : 0;
	*reg16++ = in->rx.vr.avail ? vring_avail_event(&in->rx.vr) : 0;
}

static const struct ethtool_ops ivshm_net_ethtool_ops = {
	.get_sset_count		= ivshm_net_get_sset_count,
	.get_strings		= ivshm_net_get_strings,
	.get_ethtool_stats	= ivshm_net_get_ethtool_stats,
	.get_regs_len		= ivshm_net_get_regs_len,
	.get_regs		= ivshm_net_get_regs,
};

static int ivshm_net_probe(struct pci_dev *pdev,
			   const struct pci_device_id *id)
{
	struct net_device *ndev;
	struct ivshm_net *in;
	struct ivshmem_regs __iomem *regs;
	resource_size_t shmaddr;
	resource_size_t shmlen;
	char *device_name;
	void *shm;
	u32 ivpos;
	int ret;

	ret = pcim_enable_device(pdev);
//pr_info("RH: %s(): ret(%d)\n", __func__, ret);
	if (ret) {
		dev_err(&pdev->dev, "pci_enable_device: %d\n", ret);
		return ret;
	}

	ret = pcim_iomap_regions(pdev, BIT(0), DRV_NAME);
	if (ret) {
		dev_err(&pdev->dev, "pcim_iomap_regions: %d\n", ret);
		return ret;
	}

	regs = pcim_iomap_table(pdev)[0];
	pr_info("RH: %s(): regs(0x%p) for L|R|state\n", __func__, regs);

	shmlen = pci_resource_len(pdev, 2);

	if (shmlen) {
		shmaddr = pci_resource_start(pdev, 2);
		pr_info("RH: %s() shmaddr(%lld)\n", __func__, shmaddr);
	} else {
		union { u64 v; u32 hl[2]; } val;

		pci_read_config_dword(pdev, JAILHOUSE_CFG_SHMEM_PTR,
				      &val.hl[0]);
		pci_read_config_dword(pdev, JAILHOUSE_CFG_SHMEM_PTR + 4,
				      &val.hl[1]);
		shmaddr = val.v;
pr_info("RH: %s() in else : shmaddr(%lld)\n", __func__, val.v);

		pci_read_config_dword(pdev, JAILHOUSE_CFG_SHMEM_SZ,
				      &val.hl[0]);
		pci_read_config_dword(pdev, JAILHOUSE_CFG_SHMEM_SZ + 4,
				      &val.hl[1]);
		shmlen = val.v;
pr_info("RH: %s() in else : shmlen(%lld)\n", __func__, val.v);
	}


	if (!devm_request_mem_region(&pdev->dev, shmaddr, shmlen, DRV_NAME))
		return -EBUSY;

	shm = devm_memremap(&pdev->dev, shmaddr, shmlen, MEMREMAP_WB);
	if (!shm)
		return -ENOMEM;

	ivpos = readl(&regs->ivpos);
	if (ivpos > 1) {
		dev_err(&pdev->dev, "invalid IVPosition %d\n", ivpos);
		return -EINVAL;
	}

	device_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s[%s]", DRV_NAME,
				     dev_name(&pdev->dev));
	if (!device_name)
		return -ENOMEM;
	pr_info("RH:%s(): device name of virtual pci is %s\n", __func__, device_name);

	ndev = alloc_etherdev(sizeof(*in));
	if (!ndev)
		return -ENOMEM;

	pci_set_drvdata(pdev, ndev);
	SET_NETDEV_DEV(ndev, &pdev->dev);

	in = netdev_priv(ndev);
	in->ivshm_regs = regs;
	in->shm = shm;
	in->shmaddr = shmaddr;
	in->shmlen = shmlen;
	in->peer_id = !ivpos;
	in->pdev = pdev;
	spin_lock_init(&in->tx_free_lock);
	spin_lock_init(&in->tx_clean_lock);

	ret = ivshm_net_calc_qsize(ndev);
	if (ret)
		goto err_free;

	in->state_wq = alloc_ordered_workqueue(device_name, 0);
	if (!in->state_wq)
		goto err_free;

	pr_info("RH: %s() : state_work:(%d)\n",__func__,in->state_work.data);

	INIT_WORK(&in->state_work, ivshm_net_state_change);

	pr_info("RH: %s() : ndev->dev_addr:(%d)\n",__func__,ndev->dev_addr);
	eth_random_addr(ndev->dev_addr);
	ndev->netdev_ops = &ivshm_net_ops;
	ndev->ethtool_ops = &ivshm_net_ethtool_ops;
	ndev->mtu = min_t(u32, IVSHM_NET_MTU_DEF, in->qsize / 16);
	ndev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG;
	ndev->features = ndev->hw_features;

	netif_carrier_off(ndev);
	netif_napi_add(ndev, &in->napi, ivshm_net_poll, NAPI_POLL_WEIGHT);

	ret = register_netdev(ndev);
	if (ret)
		goto err_wq;

#if 1 // JH original
	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_LEGACY | PCI_IRQ_MSIX);
#endif

#if 0   
	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_MSIX);
#endif

	
	pr_info("RH: %s() : return value of pci_alloc_irq_vectors:(%d)\n",__func__,ret);
	if (ret < 0)
		goto err_alloc_irq;
#if 1 // JH original
	ret = request_irq(pci_irq_vector(pdev, 0), ivshm_net_int, 0,
			  device_name, ndev);
#endif

#if 0
	ret = request_irq(pci_irq_vector(pdev, 0), ivshm_net_int, IRQF_SHARED,
			  device_name, ndev);
#endif
	if (ret)
		goto err_request_irq;

	pci_set_master(pdev);
	if (!pdev->msix_enabled)
		writel(IVSHMEM_INTX_ENABLE, &in->ivshm_regs->intxctrl);

	writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);
	ivshm_net_check_state(ndev);

	return 0;

err_request_irq:
	pci_free_irq_vectors(pdev);
err_alloc_irq:
	unregister_netdev(ndev);
err_wq:
	destroy_workqueue(in->state_wq);
err_free:
	free_netdev(ndev);

	return ret;
}

static void ivshm_net_remove(struct pci_dev *pdev)
{
	struct net_device *ndev = pci_get_drvdata(pdev);
	struct ivshm_net *in = netdev_priv(ndev);

	writel(IVSHM_NET_STATE_RESET, &in->ivshm_regs->lstate);

	if (!pdev->msix_enabled)
		writel(0, &in->ivshm_regs->intxctrl);
	free_irq(pci_irq_vector(pdev, 0), ndev);
	pci_free_irq_vectors(pdev);

	unregister_netdev(ndev);
	cancel_work_sync(&in->state_work);
	destroy_workqueue(in->state_wq);
	free_netdev(ndev);
}

static const struct pci_device_id ivshm_net_id_table[] = {
	{ PCI_DEVICE(PCI_VENDOR_ID_REDHAT_QUMRANET, 0x1110),
		(PCI_CLASS_OTHERS << 16) | (0x01 << 8), 0xffff00 },
	{ 0 }
};
MODULE_DEVICE_TABLE(pci, ivshm_net_id_table);

static struct pci_driver ivshm_net_driver = {
	.name		= DRV_NAME,
	.id_table	= ivshm_net_id_table,
	.probe		= ivshm_net_probe,
	.remove		= ivshm_net_remove,
};
module_pci_driver(ivshm_net_driver);

MODULE_AUTHOR("Mans Rullgard <[email protected]>");
MODULE_LICENSE("GPL");
Started cell "Linux 4.9.47 non root"
[    0.000000] Linux version 4.9.47-rt37+-RedHawk-7.4-custom 
([email protected]) (gcc version 5.4.0 (GCC) ) #67 SMP PREEMPT Fri Apr 
28
[    0.000000] Command line: console=ttyS0,115200
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point 
registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, 
using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x00000000000fffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000000100fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000200000-0x00000000c01fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] extended physical RAM map:
[    0.000000] reserve setup_data: [mem 0x0000000000000000-0x0000000000006fff] 
usable
[    0.000000] reserve setup_data: [mem 0x0000000000007000-0x0000000000007127] 
usable
[    0.000000] reserve setup_data: [mem 0x0000000000007128-0x00000000000fffff] 
usable
[    0.000000] reserve setup_data: [mem 0x0000000000100000-0x0000000000100fff] 
reserved
[    0.000000] reserve setup_data: [mem 0x0000000000200000-0x00000000c01fffff] 
usable
[    0.000000] DMI not present or invalid.
[    0.000000] Hypervisor detected: Jailhouse
[    0.000000] e820: last_pfn = 0xc0200 max_arch_pfn = 0x400000000
[    0.000000] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WC  UC- WT  
[    0.000000] Scanning 2 areas for low memory corruption
[    0.000000] Using GB pages for direct mapping
[    0.000000] RAMDISK: [mem 0x05d43000-0x23f77fff]
[    0.000000] No NUMA configuration found
[    0.000000] Faking a node at [mem 0x0000000000000000-0x00000000c01fffff]
[    0.000000] NODE_DATA(0) allocated [mem 0xc01fc000-0xc01fffff]
[    0.000000] cma: Reserved 16 MiB at 0x00000000bf000000
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]
[    0.000000]   DMA32    [mem 0x0000000001000000-0x00000000c01fffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000001000-0x000000000009ffff]
[    0.000000]   node   0: [mem 0x0000000000200000-0x00000000c01fffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x00000000c01fffff]
[    0.000000] SFI: Simple Firmware Interface v0.81 http://simplefirmware.org
[    0.000000] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23
[    0.000000] smpboot: Allowing 2 CPUs, 0 hotplug CPUs
[    0.000000] e820: [mem 0xc0200000-0xffffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 
0xffffffff, max_idle_ns: 1910969940391419 ns
[    0.000000] setup_percpu: NR_CPUS:256 nr_cpumask_bits:256 nr_cpu_ids:2 
nr_node_ids:1
[    0.000000] percpu: Embedded 115 pages/cpu @ffff8800bee00000 s430280 r8192 
d32568 u1048576
[    0.000000] kexec_core: kexec records boot cpu as 0
[    0.000000] Built 1 zonelists in Node order, mobility grouping on.  Total 
pages: 774278
[    0.000000] Policy zone: DMA32
[    0.000000] Kernel command line: console=ttyS0,115200
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Memory: 2525580K/3146364K available (15662K kernel code, 2416K 
rwdata, 6148K rodata, 2096K init, 29176K bss, 604400K reserved, )
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] JRCU static data structures initialized.
[    0.000000] NR_IRQS:16640 nr_irqs:424 0
[    0.000000] Console: colour dummy device 80x25
[    0.000000] console [ttyS0] enabled
[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., 
Ingo Molnar
[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000000] ... MAX_LOCK_DEPTH:          48
[    0.000000] ... MAX_LOCKDEP_KEYS:        8191
[    0.000000] ... CLASSHASH_SIZE:          4096
[    0.000000] ... MAX_LOCKDEP_ENTRIES:     32768
[    0.000000] ... MAX_LOCKDEP_CHAINS:      65536
[    0.000000] ... CHAINHASH_SIZE:          32768
[    0.000000]  memory used by lock dependency info: 8159 kB
[    0.000000]  per task-struct memory footprint: 1920 bytes
[    0.000000] ODEBUG: selftest passed
[    0.000000] tsc: Detected 2099.998 MHz processor
[    0.000004] Calibrating delay loop (skipped), value calculated using timer 
frequency.. 4199.99 BogoMIPS (lpj=2099998)
[    0.010618] pid_max: default: 32768 minimum: 301
[    0.015275] Security Framework initialized
[    0.019370] SELinux:  Initializing.
[    0.023219] Dentry cache hash table entries: 524288 (order: 10, 4194304 
bytes)
[    0.031146] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.038487] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.045183] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.052968] CPU: Physical Processor ID: 0
[    0.056973] CPU: Processor Core ID: 2
[    0.060638] mce: CPU supports 22 MCE banks
[    0.064759] CPU0: Thermal monitoring enabled (TM1)
[    0.069567] process: using mwait in idle threads
[    0.074181] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8
[    0.079575] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4
[    0.085908] Freeing SMP alternatives memory: 48K
[    0.093597] ftrace: allocating 52571 entries in 206 pages
[    0.139609] smpboot: Max logical packages: 1
[    0.144097] x2apic: IRQ remapping doesn't support X2APIC mode
[    0.150055] Switched APIC routing to physical flat.
[    0.155063] smpboot: CPU0: Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 
(family: 0x6, model: 0x4f, stepping: 0x1)
[    0.165119] Performance Events: PEBS fmt2+, Broadwell events, 16-deep LBR, 
full-width counters, Intel PMU driver.
[    0.175507] ... version:                3
[    0.179514] ... bit width:              48
[    0.183611] ... generic registers:      4
[    0.187616] ... value mask:             0000ffffffffffff
[    0.192930] ... max period:             00007fffffffffff
[    0.198242] ... fixed-purpose events:   3
[    0.202255] ... event mask:             000000070000000f
[    0.214516] NMI watchdog: enabled on all CPUs, permanently consumes one 
hw-PMU counter.
[    0.228414] x86: Booting SMP configuration:
[    0.232605] .... node  #0, CPUs:      #1CPU 3 received SIPI, vector 9a
[    0.300427] x86: Booted up 1 node, 2 CPUs
[    0.304446] smpboot: Total of 2 processors activated (8293.10 BogoMIPS)
[    0.314576] devtmpfs: initialized
[    0.318116] evm: security.selinux
[    0.321444] evm: security.SMACK64
[    0.324768] evm: security.capability
[    0.328650] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, 
max_idle_ns: 1911260446275000 ns
[    0.328651] JRCU now processing callbacks.
[    0.328653] JRCU non-expedited frame rate is 20 Hz, expedited is 500 Hz, max 
is 1000 Hz.
[    0.328658] JRCU daemon running SCHED_RR at priority 1.
[    0.338517] kworker/u4:1 (20) used greatest stack depth: 14248 bytes left
[    0.362627] futex hash table entries: 512 (order: 4, 65536 bytes)
[    0.370315] xor: automatically using best checksumming function   avx       
[    0.377369] pinctrl core: initialized pinctrl subsystem
[    0.383207] NET: Registered protocol family 16
[    0.388415] kworker/u4:1 (41) used greatest stack depth: 13560 bytes left
[    0.400139] cpuidle: using governor ladder
[    0.408152] cpuidle: using governor menu
[    0.412257] PCI: Using configuration type 1 for base access
[    0.417842] PCI: ashok JH PCI MMCONFIG
[    0.421603] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 
0x80000000-0x8fffffff] (base 0x80000000)
[    0.430907] ------------[ cut here ]------------
[    0.435532] WARNING: CPU: 0 PID: 1 at arch/x86/mm/ioremap.c:121 
__ioremap_caller+0x286/0x360
[    0.443968] ioremap on RAM at 0x0000000080000000 - 0x000000008fffffff
[    0.450406] Modules linked in:
[    0.453483] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 
4.9.47-rt37+-RedHawk-7.4-custom #67
[    0.461648]  ffffc9000062bd10 ffffffff8155da23 ffffc9000062bd60 
0000000000000000
[    0.469100]  ffffc9000062bd50 ffffffff81077d1b 00000079ffffffff 
0000000010000000
[    0.476553]  0000000000000002 ffffffff81d95e7f 0000000080000000 
0000000000000000
[    0.484006] Call Trace:
[    0.486455]  [<ffffffff8155da23>] dump_stack+0x85/0xc2
[    0.491590]  [<ffffffff81077d1b>] __warn+0xcb/0xf0
[    0.496376]  [<ffffffff81d95e7f>] ? pci_mmcfg_arch_map+0x2f/0x70
[    0.502370]  [<ffffffff81077d8f>] warn_slowpath_fmt+0x4f/0x60
[    0.508107]  [<ffffffff81060c16>] __ioremap_caller+0x286/0x360
[    0.513935]  [<ffffffff810dec19>] ? vprintk_default+0x29/0x40
[    0.519680]  [<ffffffff811afde4>] ? printk+0x48/0x50
[    0.524637]  [<ffffffff82b35f15>] ? pcibios_resource_survey+0x70/0x70
[    0.531067]  [<ffffffff81060d07>] ioremap_nocache+0x17/0x20
[    0.536632]  [<ffffffff81d95e7f>] pci_mmcfg_arch_map+0x2f/0x70
[    0.542454]  [<ffffffff82b35fbd>] pci_mmcfg_arch_init+0x1d/0x42
[    0.548366]  [<ffffffff82ae0a25>] jailhouse_pci_arch_init+0x40/0x44
[    0.554620]  [<ffffffff82b35f50>] pci_arch_init+0x3b/0x66
[    0.560015]  [<ffffffff81000420>] do_one_initcall+0x50/0x190
[    0.565666]  [<ffffffff8109aa7a>] ? parse_args+0x26a/0x3f0
[    0.571151]  [<ffffffff82ac9154>] kernel_init_freeable+0x1cf/0x257
[    0.577321]  [<ffffffff81f3caf0>] ? rest_init+0x90/0x90
[    0.582536]  [<ffffffff81f3cafe>] kernel_init+0xe/0x120
[    0.587757]  [<ffffffff81f4653a>] ret_from_fork+0x2a/0x40
[    0.593177] ---[ end trace 8cd5fd5ad197e354 ]---
[    0.597800] PCI: can't map MMCONFIG at [mem 0x80000000-0x8fffffff]
[    0.605081] kworker/u4:4 (65) used greatest stack depth: 13512 bytes left
[    0.637015] kworker/u4:4 (639) used greatest stack depth: 12984 bytes left
[    0.644373] HugeTLB registered 1 GB page size, pre-allocated 0 pages
[    0.650739] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.673439] raid6: sse2x1   gen()  7507 MB/s
[    0.694306] raid6: sse2x1   xor()  5748 MB/s
[    0.715181] raid6: sse2x2   gen()  9273 MB/s
[    0.736056] raid6: sse2x2   xor()  6246 MB/s
[    0.756925] raid6: sse2x4   gen() 10945 MB/s
[    0.777793] raid6: sse2x4   xor()  7671 MB/s
[    0.798661] raid6: avx2x1   gen() 15019 MB/s
[    0.819531] raid6: avx2x2   gen() 17765 MB/s
[    0.839996] raid6: avx2x4   gen() 21515 MB/s
[    0.844272] raid6: using algorithm avx2x4 gen() 21515 MB/s
[    0.849760] raid6: using avx2x2 recovery algorithm
[    0.854801] ACPI: Interpreter disabled.
[    0.859322] vgaarb: loaded
[    0.862752] SCSI subsystem initialized
[    0.866842] usbcore: registered new interface driver usbfs
[    0.872498] usbcore: registered new interface driver hub
[    0.877894] usbcore: registered new device driver usb
[    0.883051] pps_core: LinuxPPS API ver. 1 registered
[    0.888048] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo 
Giometti <[email protected]>
[    0.897185] PTP clock support registered
[    0.901249] dmi: Firmware registration failed.
[    0.906725] PCI: Probing PCI hardware
[    0.910457] PCI host bridge to bus 0000:00
[    0.914562] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
[    0.920746] pci_bus 0000:00: root bus resource [mem 
0x00000000-0x3fffffffffff]
[    0.927968] pci_bus 0000:00: No busn resource found for root bus, will use 
[bus 00-ff]
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): outside big if cond :for ivshmem type: step-2, 
mask(ffff0000), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x11)
JH: ivshmem_pci_cfg_write(): in IVSHMEM_CFG_MSIX_CAP case
JH:in ivshmem_write_msix_control()
[    1.248995] NetLabel: Initializing
[    1.252406] NetLabel:  domain hash size = 128
[    1.256769] NetLabel:  protocols = UNLABELED CIPSOv4
[    1.261765] NetLabel:  unlabeled traffic allowed by default
[    1.267498] clocksource: Switched to clocksource refined-jiffies
[    1.327939] VFS: Disk quotas dquot_6.6.0
[    1.331895] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.339024] pnp: PnP ACPI: disabled
[    1.350779] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, 
max_idle_ns: 2085701024 ns
[    1.359667] clocksource: Switched to clocksource acpi_pm
[    1.365064] pci 0000:00:0e.0: BAR 0: assigned [mem 0x100000000-0x1000000ff 
64bit]
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100000)
JH:in ivshmem_write_command()
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100000)
JH:in ivshmem_write_command()
[    1.451890] pci 0000:00:0e.0: BAR 4: assigned [mem 0x100000100-0x10000011f 
64bit]
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100000)
JH:in ivshmem_write_command()
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): not equal to bridge type
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100000)
JH:in ivshmem_write_command()
[    1.538971] NET: Registered protocol family 2
[    1.543991] TCP established hash table entries: 32768 (order: 6, 262144 
bytes)
[    1.551381] TCP bind hash table entries: 32768 (order: 9, 2097152 bytes)
[    1.559490] TCP: Hash tables configured (established 32768 bind 32768)
[    1.566083] UDP hash table entries: 2048 (order: 6, 327680 bytes)
[    1.572412] UDP-Lite hash table entries: 2048 (order: 6, 327680 bytes)
[    1.579282] NET: Registered protocol family 1
[    1.583903] RPC: Registered named UNIX socket transport module.
[    1.589861] RPC: Registered udp transport module.
[    1.594580] RPC: Registered tcp transport module.
[    1.599289] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.605730] tsc: Refining TSC calibration synchronously, will consume one 
second...
[    2.613518] tsc: Refined TSC calibration by +0 ppm to 2099.998 MHz.
[    2.619788] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 
0x1e452ea631d, max_idle_ns: 440795244572 ns
[    2.629810] clocksource: Switched to clocksource tsc
[    2.634996] Trying to unpack rootfs image as initramfs...
[    4.226405] Freeing initrd memory: 493780K
[    4.238327] DMA-API: preallocated 65536 debug entries
[    4.243384] DMA-API: debugging enabled by kernel config
[    4.248720] Intel CQM monitoring enabled
[    4.252655] Intel MBM enabled
[    4.256204] Scanning for low memory corruption every 60 seconds
[    4.262276] Masterclock system initialized.
[    4.266494] Masterclock "none": registered, rating is 0.
[    4.271839] Masterclock "none": activated.
[    4.276228] audit: initializing netlink subsys (disabled)
[    4.281692] audit: type=2000 audit(3.490:1): initialized
[    4.287362] Initializing xtrace.
[    4.291577] workingset: timestamp_bits=40 max_order=20 bucket_order=0
[    4.310976] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    4.317528] NFS: Registering the id_resolver key type
[    4.322625] Key type id_resolver registered
[    4.326815] Key type id_legacy registered
[    4.330838] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    4.337549] NFS: objlayout_init: Registered OSD pNFS Layout Driver
[    4.343755] Installing knfsd (copyright (C) 1996 [email protected]).
[    4.351030] SGI XFS with ACLs, security attributes, realtime, no debug 
enabled
[    4.362835] async_tx: api initialized (async)
[    4.367206] Key type asymmetric registered
[    4.371338] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 
245)
[    4.378827] io scheduler noop registered
[    4.382760] io scheduler deadline registered
[    4.387215] io scheduler cfq registered (default)
[    4.393877] pci_hotplug: PCI Hot Plug PCI Core version: 0.5
[    4.399807] Max sleep state not auto-reduced to 1, as both TSC and the local 
timer are nonstoppable
[    4.409557] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
�[    4.693814] serial8250: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is 
a 16550A
[    4.973853] serial8250: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is 
a 16550A
[    4.982871] kobject: 'hpet' (ffff880023b5b810): kobject_release, parent      
     (null) (delayed 2000)
[    4.992526] Non-volatile memory driver v1.3
[    4.996835] Linux agpgart interface v0.103
[    5.001053] kobject: 'agpgart-amd64' (ffff8800237b6c00): kobject_release, 
parent ffff8800ba98a248 (delayed 2000)
[    5.011369] Loading Multiboard RCIM driver, major is 243.
[    5.016819] Initializing Multiboard RCIM UART sub-driver, major is 204.
[    5.023538] RCIM RTC emulation driver, major is 242.
[    5.028573] kobject: 'tpm_tis' (ffff8800237b7a00): kobject_release, parent 
ffff8800ba863e48 (delayed 4000)
[    5.038784] [drm] Initialized
[    5.054209] brd: module loaded
[    5.063545] loop: module loaded
[    5.066704] skd:  v2.2.1-b0260 loaded
[    5.071061] zram: Added device: zram0
[    5.074891] kobject: 'i2c-htcpld' (ffff88002350b600): kobject_release, 
parent ffff8800ba863e48 (delayed 3000)
[    5.085300] Loading iSCSI transport class v2.0-870.
[    5.092342] fnic: Cisco FCoE HBA Driver, ver 1.6.0.21
[    5.097462] fnic: Successfully Initialized Trace Buffer
[    5.102802] fnic: Successfully Initialized FC_CTLR Trace Buffer
[    5.109283] snic:Cisco SCSI NIC Driver, ver 0.0.1.18
[    5.114300] snic:Trace Facility Enabled.
[    5.114300]  Trace Buffer SZ 16 Pages.
[    5.122511] Adaptec aacraid driver 1.2-1[41066]-ms
[    5.127359] aic94xx: Adaptec aic94xx SAS/SATA driver version 1.0.3 loaded
[    5.134234] isci: Intel(R) C600 SAS Controller Driver - version 1.2.0
[    5.140803] kobject: 'ips' (ffff880023268600): kobject_release, parent 
ffff8800ba98a248 (delayed 1000)
[    5.150170] qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA Driver: 
8.07.00.38-k.
[    5.158473] iscsi: registered transport (qla4xxx)
[    5.163216] QLogic iSCSI HBA Driver
[    5.166708] Emulex LightPulse Fibre Channel SCSI driver 11.2.0.0.
[    5.172798] Copyright(c) 2004-2016 Emulex.  All rights reserved.
[    5.179053] megaraid cmm: 2.20.2.7 (Release Date: Sun Jul 16 00:01:03 EST 
2006)
[    5.186476] megaraid: 2.20.5.1 (Release Date: Thu Nov 16 15:32:35 EST 2006)
[    5.193471] megasas: 06.811.02.00-rc1
[    5.197219] mpt3sas version 13.100.00.00 loaded
[    5.202010] 3ware Storage Controller device driver for Linux v1.26.02.003.
[    5.208951] 3ware 9000 Storage Controller device driver for Linux 
v2.26.02.014.
[    5.216317] LSI 3ware SAS/SATA-RAID Controller device driver for Linux 
v3.26.02.000.
[    5.224088] ipr: IBM Power RAID SCSI Device Driver version: 2.6.3 (October 
17, 2015)
[    5.231872] RocketRAID 3xxx/4xxx Controller driver v1.10.0
[    5.237395] stex: Promise SuperTrak EX Driver version: 5.00.0000.01
[    5.243845] kobject: 'esas2r' (ffff88002326b800): kobject_release, parent 
ffff8800ba98a248 (delayed 1000)
[    5.253417] esas2r: driver will not be loaded because no ATTO esas2r devices 
were found
[    5.261418] VMware PVSCSI driver - version 1.0.7.0-k
[    5.266553] osd: LOADED open-osd 0.2.1
[    5.272037] libphy: Fixed MDIO Bus: probed
[    5.276859] libphy: mdio_driver_register: xgmiitorgmii
[    5.282312] pcnet32: pcnet32.c:v1.35 21.Apr.2008 [email protected]
[    5.289262] Atheros(R) L2 Ethernet Driver - version 2.2.3
[    5.294658] Copyright (c) 2007 Atheros Corporation.
[    5.299706] bna: QLogic BR-series 10G Ethernet driver - version: 3.2.25.1
[    5.306526] thunder-xcv, ver 1.0
[    5.309793] thunder-BGX, ver 1.0
[    5.313066] thunder-nic, ver 1.0
[    5.316329] thunder-nicvf, ver 1.0
[    6.325845] enic: Cisco VIC Ethernet NIC Driver, ver 2.3.0.20
[    6.331744] dmfe: Davicom DM9xxx net driver, version 1.36.4 (2002-01-17)
[    6.338491] v1.01-e (2.4 port) Sep-11-2006  Donald Becker <[email protected]>
[    6.338491]   http://www.scyld.com/network/drivers.html
[    6.350911] uli526x: ULi M5261/M5263 net driver, version 0.9.3 (2005-7-29)
[    6.359122] vxge: Copyright(c) 2002-2010 Exar Corp.
[    6.364013] vxge: Driver version: 2.5.3.22640-k
[    6.368584] e100: Intel(R) PRO/100 Network Driver, 3.5.24-k2-NAPI
[    6.374688] e100: Copyright(c) 1999-2006 Intel Corporation
[    6.380216] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[    6.387262] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    6.393042] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
[    6.398875] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    6.404837] jme: JMicron JMC2XX ethernet driver version 1.0.8
[    6.410652] sky2: driver version 1.30
[    6.414476] myri10ge: Version 1.5.3-1.534
[    6.418603] ns83820.c: National Semiconductor DP83820 10/100/1000 driver.
[    6.425480] nfp_netvf: NFP VF Network driver, Copyright (C) 2014-2015 
Netronome Systems
[    6.434370] ivshmem-net 0000:00:0e.0: enabling device (0000 -> 0002)
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(2)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100002)
JH:in ivshmem_write_command()
JH:ivshmem_write_command():PCI cmd MEM is requested
JH:ivshmem_write_command():ive-bar0-addr(0x100000000), 
ive-bar4-addr(0x100000100)
[    6.484484] RH: ivshm_net_probe(): regs(0xffffc9000064d000) for L|R|state
[    6.491462] RH: ivshm_net_probe() in else : shmaddr(17248026624)
[    6.497475] RH: ivshm_net_probe() in else : shmlen(1048576)
JH:in ivshmem_register_mmio()
JH: ivshmem_register_mmio(): IVPOS reg : !write mmio->value(0x1)
[    6.511259] RH:ivshm_net_probe(): device name of virtual pci is 
ivshmem-net[0000:00:0e.0]
[    6.519757] RH: ivshm_net_probe() : state_work:(0)
[    6.524957] JH: __pci_enable_msix(), NR_ENTRIES: 1
[    6.529765] JH: __pci_enable_msix(), Before return of MSIX_capability
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): outside big if cond :for ivshmem type: step-2, 
mask(ffff0000), value(0)
JH: in ivshmem_pci_cfg_write()
JH: value(0x11)
JH: ivshmem_pci_cfg_write(): in IVSHMEM_CFG_MSIX_CAP case
JH:in ivshmem_write_msix_control()
[    6.560174] JH: msix_capability_init(), calling msix_setup_entries
[    6.566572] JH: msix_capability_init(), calling pci_msi_setup_msi_irqs
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0xfee04000)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x0)
JH: ivshmem_is_msix_masked() global mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x0)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x0)
JH: ivshmem_is_msix_masked() global mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x4051)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() global mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
[    6.659074] JH: msix_capability_init(), calling msi_verify_entries
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): outside big if cond :for ivshmem type: step-2, 
mask(ffff0000), value(c0000000)
JH: in ivshmem_pci_cfg_write()
JH: value(0xc0000011)
JH: ivshmem_pci_cfg_write(): in IVSHMEM_CFG_MSIX_CAP case
JH:in ivshmem_write_msix_control()
JH:ivshmem_write_msix_control(): new value for caps of msix, 
newval-raw(0xc0000011)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() global mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio(): else of msix-table, but not of write, mmio-val(0x1)
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x1)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() global mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
[    6.756075] JH: msix_capability_init(), calling populate_msi_sysfsn
[    6.762571] JH:populate_msi_sysfs(), msi_dev_attr->attr.name: 24 
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(402)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100402)
JH:in ivshmem_write_command()
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): outside big if cond :for ivshmem type: step-2, 
mask(ffff0000), value(80000000)
JH: in ivshmem_pci_cfg_write()
JH: value(0x80000011)
JH: ivshmem_pci_cfg_write(): in IVSHMEM_CFG_MSIX_CAP case
JH:in ivshmem_write_msix_control()
JH:ivshmem_write_msix_control(): new value for caps of msix, 
newval-raw(0x80000011)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() local mask
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
[    6.848608] JH: msix_capability_init(), calling pcibios_free_irq
[    6.854841] JH: pci_alloc_irq_vectors(),vecs: 1
[    6.859375] ivshmem-net 0000:00:0e.0: JH:pci_irq_vector(): IRQ:: i(0), nr(0)
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x0)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() BUS master
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio(): else of msix-table, but not of write, 
mmio-val(0xfee04000)
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0xfee04000)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() BUS master
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x0)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() BUS master
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH:in ivshmem_msix_mmio()
JH:ivshmem_msix_mmio(): else of mmio-addr >= msix_vec(0x20)
JH:ivshmem_msix_mmio():in mmio-wr for msix_table , mmio-val(0x4051)
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() BUS master
JH: arch_ivshmem_update_msix(), ivshmem_is_msix_masked
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ffff), value(6)
JH: in ivshmem_pci_cfg_write()
JH: value(0x100006)
JH:in ivshmem_write_command()
JH: INSIDE arch_ivshmem_update_msix(),MSI_addr(0xfee04000), MSI_data(0x4051)
JH: ivshmem_is_msix_masked() return false
JH: arch_ivshmem_update_msix(), getting irq_msg
JH:X86_PCI_TRANSLATE_MSI(): for apic_irq_message
JH:ivshmem_write_command(): val of cmd_master NOT EQ cmd of CMD_master, err(0)
JH: in pci_cfg_write_moderate()
JH:pci_cfg_write_moderate(): in if cond of PCI_CONFIG_HEADER_SIZE
JH:pci_cfg_write_moderate(): in case of PCI_CFG_HDR_SZ->PCI_CONFIG_ALLOW
JH:pci_cfg_write_moderate(): for ivshmem type, calling ivshmem_pci_cfg_write() 
api step-1, mask(ff00), value(4000)
JH: in ivshmem_pci_cfg_write()
JH: value(0x4000)
JH:in ivshmem_register_mmio()
JH: ivshmem_register_mmio(): LSTATE:is_write() true : mmio->val(0)
JH: ivshmem_remote_interrupt() : ive->remote(0xfffffffff022b000)
JH: arch_ivshmem_trigger_interrupt()
JH:in ivshmem_register_mmio()
JH: ivshmem_register_mmio(): RSTATE: !is_write() true : mmio->val(0), 
remote(0xfffffffff022b000)
J[ in 7vs12e58reusstor_m rogi
er:  nsh im_rrficeerrimir ):nRSxxTE: !is_write() true : mmio->val(0), 
remote(0xfffffffff022b000)
JH:in ivshmem_register_mmio()
JH: ivshmem_register_mmio(): LSTATE:is_write() true : mmio->val(1)
JH: ivshmem_remote_interrupt() : ive->remote(0xfffffffff022b000)
JH: arch_ivshmem_trigger_interrupt()
[    7.123849] RH: ivshm_net_set_state(): rstate(0)
[    7.123850] RH: ivshm_net_set_state(): in IVSHM_NET_STATE_RESET case: 
rstate(0), lstate(0)
[    7.123850] RH: ivshm_net_set_state() : inside IVSHM_NET_STATE_READY if cond
[    7.141274] RH: ivshm_net_set_state() : lstate is:(1)
[    7.166515] Fusion MPT base driver 3.04.20
[    7.170613] Copyright (c) 1999-2008 LSI Corporation
[    7.175503] Fusion MPT SPI Host driver 3.04.20
[    7.180004] Fusion MPT FC Host driver 3.04.20
[    7.184409] Fusion MPT SAS Host driver 3.04.20
[    7.188898] Fusion MPT misc device (ioctl) driver 3.04.20
[    7.194424] mptctl: Registered with Fusion MPT base driver
[    7.199918] mptctl: /dev/mptctl @ (major,minor=10,220)
[    7.205064] Fusion MPT LAN driver 3.04.20
[    7.209373] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    7.215915] ehci-pci: EHCI PCI platform driver
[    7.220390] ehci-platform: EHCI generic platform driver
[    7.225645] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    7.231834] ohci-platform: OHCI generic platform driver
[    7.237080] uhci_hcd: USB Universal Host Controller Interface driver
[    7.243647] mousedev: PS/2 mouse device common for all mice
[    7.249824] kobject: 'rtc_cmos' (ffff88002317e400): kobject_release, parent 
ffff8800ba863e48 (delayed 1000)
[    7.259573] kobject: 'rtc_cmos' (ffff88002317e200): kobject_release, parent 
ffff8800ba8bbe48 (delayed 3000)
[    7.270194] md: linear personality registered for level -1
[    7.275723] md: raid0 personality registered for level 0
[    7.281036] md: raid1 personality registered for level 1
[    7.286346] md: raid10 personality registered for level 10
[    7.291949] md: raid6 personality registered for level 6
[    7.297271] md: raid5 personality registered for level 5
[    7.302587] md: raid4 personality registered for level 4
[    7.307900] md: multipath personality registered for level -4
[    7.313647] md: faulty personality registered for level -5
[    7.319403] device-mapper: uevent: version 1.0.3
[    7.324308] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: 
[email protected]
[    7.332947] device-mapper: multipath round-robin: version 1.2.0 loaded
[    7.339478] device-mapper: multipath queue-length: version 0.2.0 loaded
[    7.346095] device-mapper: multipath service-time: version 0.3.0 loaded
[    7.352872] hidraw: raw HID events driver (C) Jiri Kosina
[    7.358653] usbcore: registered new interface driver usbhid
[    7.364237] usbhid: USB HID core driver
[    7.368079] Initializing the frequency based scheduler.
[    7.373410] oprofile: using NMI interrupt.
[    7.377605] Netfilter messages via NETLINK v0.30.
[    7.382520] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[    7.388847] nf_tables: (c) 2007-2009 Patrick McHardy <[email protected]>
[    7.395460] Initializing XFRM netlink socket
[    7.400311] NET: Registered protocol family 10
[    7.405460] NET: Registered protocol family 17
[    7.409965] Bridge firewalling registered
[    7.413991] Ebtables v2.0 registered
[    7.417628] Key type dns_resolver registered
[    7.422337] microcode: sig=0x406f1, pf=0x1, revision=0xb000021
[    7.428393] microcode: Microcode Update Driver: v2.01 
<[email protected]>, Peter Oruba
[    7.437197] Kernel text replication: single NUMA memory node
[    7.442852] Kernel text replication is disabled.
[    7.457506] registered taskstats version 1
[    7.461640] page_owner is disabled
[    7.466032] Key type encrypted registered
[    7.470058] evm: HMAC attrs: 0x0
[    7.476016] Freeing unused kernel memory: 2096K
[    7.480558] Write protecting the kernel read-only data: 24576k

RedHawk Live Boot
[    8.237642] audit: type=1403 audit(7.445:2): policy loaded auid=4294967295 
ses=4294967295
[    8.252564] systemd[1]: Successfully loaded SELinux policy in 125.501ms.
[    8.290836] systemd[1]: Relabelled /dev and /run in 7.936ms.
[    8.299593] random: systemd: uninitialized urandom read (16 bytes read)
[    8.308288] random: systemd: uninitialized urandom read (16 bytes read)
[    8.314960] random: systemd: uninitialized urandom read (16 bytes read)
[    8.324258] systemd[1]: systemd 219 running in system mode. (+PAM +AUDIT 
+SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCR)
[    8.342387] systemd[1]: Detected virtualization other.
[    8.347548] systemd[1]: Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

[    8.359838] systemd[1]: No hostname configured.
[    8.364421] systemd[1]: Set hostname to <localhost>.
[    8.379360] random: systemd: uninitialized urandom read (16 bytes read)
[    8.394017] random: systemd-cryptse: uninitialized urandom read (16 bytes 
read)
[    8.395670] random: systemd: uninitialized urandom read (16 bytes read)
[    8.396781] random: systemd: uninitialized urandom read (16 bytes read)
[    8.404785] systemd-rc-loca (1692) used greatest stack depth: 12960 bytes 
left
[    8.406174] lvm2-activation (1684) used greatest stack depth: 12552 bytes 
left
[    8.408161] systemd-debug-g (1687) used greatest stack depth: 12360 bytes 
left
[    8.408522] random: systemd-sysv-ge: uninitialized urandom read (16 bytes 
read)
[    8.458748] systemd[1681]: 
/usr/lib/systemd/system-generators/lvm2-activation-generator failed with error 
code 127.
[    8.470135] random: systemd: uninitialized urandom read (16 bytes read)
[    8.477303] random: systemd: uninitialized urandom read (16 bytes read)
[    8.547074] systemd[1]: Mounted /.tmpfs/sfs.
[    8.551535] systemd[1]: Cannot add dependency job for unit 
lvm2-monitor.service, ignoring: Unit not found.
[    8.561280] systemd[1]: Cannot add dependency job for unit 
rhel-configure.service, ignoring: Unit is masked.
[    8.571119] systemd[1]: Cannot add dependency job for unit 
rhel-autorelabel-mark.service, ignoring: Unit is masked.
[  OK  ] Reached target Timers.
[  OK  ] Set up automount Arbitrary Executab...ats File System Automount Point.
[  OK  ] Reached target Swap.
[  OK  ] Created slice Root Slice.
[  OK  ] Listening on udev Control Socket.
[  OK  ] Listening on Delayed Shutdown Socket.
[  OK  ] Listening on Journal Socket.
[  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
[  OK  ] Created slice User and Session Slice.
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on LVM2 metadata daemon socket.
[  OK  ] Listening on LVM2 poll daemon socket.
[  OK  ] Created slice System Slice.
         Mounting Huge Pages File System...
[  OK  ] Created slice system-selinux\x2dpol...grate\x2dlocal\x2dchanges.slice.
[  OK  ] Reached target Slices.
         Mounting Debug File System...
         Mounting Temporary Directory...
         Starting Journal Service...
         Mounting NFSD configuration filesystem...
[  OK  ] Created slice system-getty.slice.
         Starting Monitoring of LVM2 mirrors... dmeventd or progress polling...
         Starting Setup Virtual Console...
         Starting Remount Root and Kernel File Systems...
[  OK  ] Created slice system-serial\x2dgetty.slice.
         Starting Create Static Device Nodes in /dev...
         Starting Apply Kernel Variables...
         Mounting Configuration File System...
         Mounting POSIX Message Queue File System...
[  OK  ] Mounted NFSD configuration filesystem.
[  OK  ] Mounted Debug File System.
[  OK  ] Mounted Configuration File System.
[  OK  ] Mounted POSIX Message Queue File System.
[  OK  ] Mounted Huge Pages File System.
[  OK  ] Mounted Temporary Directory.
[  OK  ] Started Journal Service.
[  OK  ] Started Remount Root and Kernel File Systems.
[  OK  ] Started Setup Virtual Console.
[  OK  ] Started Create Static Device Nodes in /dev.
[  OK  ] Started Apply Kernel Variables.
[  OK  ] Started LVM2 metadata daemon.
         Starting LVM2 metadata daemon...
         Starting udev Kernel Device Manager...
         Starting Load/Save Random Seed...
         Starting Rebuild Hardware Database...
         Starting Configure read-only root support...
         Starting Flush Journal to Persistent Storage...
[  OK  ] Started udev Kernel Device Manager.
[  OK  ] Started Load/Save Random Seed.
[  OK  ] Started Flush Journal to Persistent Storage.
[  OK  ] Started Configure read-only root support.
[  OK  ] Started Rebuild Hardware Database.
         Starting udev Coldplug all Devices...
[  OK  ] Started udev Coldplug all Devices.
         Starting udev Wait for Complete Device Initialization...
         Starting Show Plymouth Boot Screen...
         Starting Device-Mapper Multipath Device Controller...
[FAILED] Failed to start Device-Mapper Multipath Device Controller.
See 'systemctl status multipathd.service' for details.
[  OK  ] Started Show Plymouth Boot Screen.
         Starting Initialize the iWARP/InfiniBand/RDMA stack in the kernel...
[  OK  ] Found device /dev/ttyS0.
G[  OK  ] Started udev Wait for Complete Device Initialization.
         Starting Activation of DM RAID sets...
[  OK  ] Started Activation of DM RAID sets.
[  OK  ] Reached target Encrypted Volumes.
[  OK  ] Started Initialize the iWARP/InfiniBand/RDMA stack in the kernel.
[  OK  ] Started Monitoring of LVM2 mirrors,...ng dmeventd or progress polling.
[  OK  ] Reached target Local File Systems (Pre).
[  OK  ] Reached target Local File Systems.
         Starting Migrate local SELinux poli...tructure to the new structure...
         Starting Preprocess NFS configuration...
         Starting Tell Plymouth To Write Out Runtime Data...
         Starting Commit a transient machine-id on disk...
         Starting Rebuild Journal
CentOS Linux 7 (Core)
Kernel 4.9.47-rt37+-RedHawk-7.4-custom on an x86_64

localhost login: root
[root@localhost ~]#

Reply via email to