* Re: [Pv-drivers] [PATCH 04/10] VMCI: device driver implementaton.
From: Dmitry Torokhov @ 2012-10-25 21:15 UTC (permalink / raw)
To: pv-drivers
Cc: Greg KH, linux-kernel, virtualization, vm-crosstalk,
Bhavesh Davda, George Zhang
In-Reply-To: <20121025210320.GA12352@kroah.com>
On Thursday, October 25, 2012 02:03:20 PM Greg KH wrote:
> On Thu, Oct 25, 2012 at 01:43:50PM -0700, Bhavesh Davda wrote:
> > Hi Greg,
> >
> > > You can't just say "general GPL issues aside". Honestly, given your
> > > company's prior actions in regards to Linux kernel drivers and the
> > > licenses of them, I don't trust them at all. To help gain that trust
> > > back, marking the exports in this manner will be a great improvement.
> >
> > You don't expect us to just let that comment slide :) Can you be more
> > specific about which "prior actions" in regards to which kernel
> > drivers, and when?
>
> For many many years, you shipped closed source Linux kernel drivers for
> your products. Only recently has this changed.
That was in the past. As far as I know our Linux drivers have been open
for more than 5 years, so not that recently.
Thanks,
Dmitry
^ permalink raw reply
* Re: [Pv-drivers] [PATCH 04/10] VMCI: device driver implementaton.
From: Bhavesh Davda @ 2012-10-25 21:18 UTC (permalink / raw)
To: Greg KH
Cc: Dmitry Torokhov, pv-drivers, linux-kernel, virtualization,
vm-crosstalk, George Zhang
In-Reply-To: <20121025210448.GB12352@kroah.com>
> For many many years, you shipped closed source Linux kernel drivers
> for
> your products. Only recently has this changed.
and
> > all our Linux drivers, even if not all are upstream [yet], are GPL.
>
> That's nice to hear, although without proof of that, we have to take
> your word :)
The following VMware drivers are in mainline Linux now (thanks to you and other members of the kernel community for that!)
vmxnet3: Tue Oct 13 00:15:51 2009 -0700
vmw_pvscsi: Tue Oct 13 14:51:05 2009 -0700
vmwgfx: Thu Dec 10 00:19:58 2009 +0000
vmw_balloon: Fri Apr 23 13:18:08 2010 -0400
Thanks
- Bhavesh
^ permalink raw reply
* [PATCH] VIRTIO: Remove reference to now non-existent __KERNEL__ check.
From: Robert P. J. Day @ 2012-10-26 11:34 UTC (permalink / raw)
To: virtualization; +Cc: mst
Since the header file is now under uapi/, there is no __KERNEL__check,
so fix the comment.
Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
---
diff --git a/include/uapi/linux/virtio_config.h b/include/uapi/linux/virtio_config.h
index b7cda39..72a09e1 100644
--- a/include/uapi/linux/virtio_config.h
+++ b/include/uapi/linux/virtio_config.h
@@ -1,7 +1,7 @@
#ifndef _UAPI_LINUX_VIRTIO_CONFIG_H
#define _UAPI_LINUX_VIRTIO_CONFIG_H
-/* This header, excluding the #ifdef __KERNEL__ part, is BSD licensed so
- * anyone can use the definitions to implement compatible drivers/servers.
+/* This header is BSD licensed so anyone can use the definitions to
+ * implement compatible drivers/servers.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
^ permalink raw reply related
* Call for Workshops: ACM HPDC 2013 -- deadline extended to November 1, 2012
From: Ioan Raicu @ 2012-10-26 17:43 UTC (permalink / raw)
To: virtualization, micro_publicity, infodir_SIGARCH, infodir_sigcomm,
performance, sigplan-l
[-- Attachment #1.1: Type: text/plain, Size: 3063 bytes --]
Call for Workshops
The organizers of the /22nd International ACM Symposium on
High-Performance Parallel and Distributed Computing/ (HPDC'13) *call for
proposals for workshops* to be held with HPDC'13. The workshops will be
held on June 17-18, 2013.
Workshops should provide forums for discussion among researchers and
practitioners on focused topics or emerging research areas relevant to
the HPDC community. Organizers may structure workshops as they see fit,
including invited talks, panel discussions, presentations of work in
progress, fully peer-reviewed papers, or some combination. Workshops
could be scheduled for half a day or a full day, depending on interest,
space constraints, and organizer preference. Organizers should design
workshops for approximately 20-40 participants, to balance impact and
effective discussion.
*Workshop proposals* must be sent in PDF format to the HPDC'13 Workshops
Chair, Abhishek Chandra (Email: chandra AT cs DOT umn DOT edu
<mailto:chandra@cs.umn.edu>) with the subject line *"HPDC 2013 Workshop
Proposal"*, and should include:
* The name and acronym of the workshop
* A description (0.5-1 page) of the theme of the workshop
* A description (one paragraph) of the relation between the theme of
the workshop and of HPDC
* A list of topics of interest
* The names and affiliations of the workshop organizers, and if
applicable, of a significant portion of the program committee
* A description of the expected structure of the workshop (papers,
invited talks, panel discussions, etc.)
* Data about previous offerings of the workshop (if any), including
the attendance, the numbers of papers or presentations submitted and
accepted, and the links to the corresponding websites
* A publicity plan for attracting submissions and attendees. Please
also include expected number of submissions, accepted papers, and
attendees that you anticipate for a successful workshop.
Due to publication deadlines, workshops must operate within roughly the
following timeline: papers due mid February (2-3 weeks after the HPDC
deadline), and selected and sent to the publisher by mid April.
Important dates:
*Workshop Proposals Due: * *November 1, 2012*
Notifications: November 7, 2012
Workshop CFPs Online and Distributed: November 25, 2012
--
=================================================================
Ioan Raicu, Ph.D.
Assistant Professor, Illinois Institute of Technology (IIT)
Guest Research Faculty, Argonne National Laboratory (ANL)
=================================================================
Data-Intensive Distributed Systems Laboratory, CS/IIT
Distributed Systems Laboratory, MCS/ANL
=================================================================
Cel: 1-847-722-0876
Office: 1-312-567-5704
Email: iraicu@cs.iit.edu
Web: http://www.cs.iit.edu/~iraicu/
Web: http://datasys.cs.iit.edu/
=================================================================
=================================================================
[-- Attachment #1.2: Type: text/html, Size: 4164 bytes --]
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* CFP: 22nd Int. ACM Symposium on High-Performance Parallel and Distributed Computing (HPDC'13)
From: Ioan Raicu @ 2012-10-26 18:13 UTC (permalink / raw)
To: virtualization, micro_publicity, infodir_SIGARCH, infodir_sigcomm,
performance, sigplan-l
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=windows-1252; format=flowed, Size: 8140 bytes --]
**** CALL FOR PAPERS ****
The 22nd International ACM Symposium on
High-Performance Parallel and Distributed Computing
(HPDC'13)
New York City, USA - June 17-21, 2013
http://www.hpdc.org/2013
The ACM International Symposium on High-Performance Parallel and Distributed Computing (HPDC)
is the premier annual conference for presenting the latest research on the design,
implementation, evaluation, and the use of parallel and distributed systems for high-end computing.
In 2013, the 22nd HPDC and affiliated workshops will take place in the heart of iconic New York
City from June 17-21.
**** SUBMISSION DEADLINES ****
Abstracts: 14 January 2013
Papers: 21 January 2013 (no extensions)
**** HPDC'13 GENERAL CO-CHAIRS ****
Manish Parashar, Rutgers University
Jon Weissman, University of Minnesota
**** HPDC'13 PROGRAM CO-CHAIRS ****
Dick Epema, Delft University of Technology
Renato Figueiredo, University of Florida
**** HPDC'13 WORKSHOPS CHAIR ****
Abhishek Chandra, University of Minnesota
**** HPDC'13 LOCAL ARRANGEMENTS CHAIR ****
Daniele Scarpazza, DEShaw Research
**** HPDC'13 SPONSORSHIP CHAIR ****
Dean Hildebrand, IBM Almaden
**** HPDC'13 PUBLICITY CO-CHAIRS ****
Alexandru Iosup, Delft University of Technology, the Netherlands
Ioan Raicu, Illinois Institute of Technology, USA
Kenjiro Taura, University of Tokyo, Japan
Bruno Schulze, National Laboratory for Scientific Computing, Brazil
**** SCOPE AND TOPICS ****
Submissions are welcomed on high-performance parallel and distributed computing topics including but not limited to:
clusters, clouds, grids, data-intensive computing, massively multicore, and global-scale computing systems.
New scholarly research showing empirical and reproducible results in architectures, systems, and networks is strongly encouraged,
as are experience reports of operational deployments that can provide insights for future research on HPDC applications and systems.
All papers will be evaluated for their originality, technical depth and correctness, potential impact,
relevance to the conference, and quality of presentation. Research papers must clearly demonstrate research contributions and novelty,
while experience reports must clearly describe lessons learned and demonstrate impact.
In the context of high-‐performance parallel and distributed computing, the topics of interest include, but are not limited to:
* Systems, networks, and architectures for high-end computing
* Massively multicore systems
* Resource virtualization
* Programming languages and environments
* I/O, storage systems, and data management
* Resource management and scheduling, including energy-‐aware techniques
* Performance modeling and analysis
* Fault tolerance, reliability, and availability
* Data-intensive computing
* Applications of parallel and distributed computing
**** PAPER SUBMISSION GUIDELINES ****
Authors are invited to submit technical papers of at most 12 pages in PDF format, including figures and references.
Papers should be formatted in the ACM Proceedings Style and submitted via the conference web site.
No changes to the margins, spacing, or font sizes as specified by the style file are allowed.
Accepted papers will appear in the conference proceedings, and will be incorporated into the ACM Digital Library.
A limited number of papers will be accepted as posters.
Papers must be self-contained and provide the technical substance required for the program committee to evaluate their contributions.
Papers should thoughtfully address all related work, particularly work presented at previous HPDC events.
Submitted papers must be original work that has not appeared in and is not under consideration for another conference or a journal.
See the ACM Prior Publication Policy for more details.
**** IMPORTANT DATES ****
Abstracts Due: 14 January 2013
Papers Due: 21 January 2013 (no extensions)
**** Program Committee ****
David Abramson, Monash University, Australia
Kento Aida, National Institute of Informatics, Japan
Gabriel Antoniu INRIA, France
Henri Bal, Vrije Universiteit, the Netherlands
Adam Barker, University of St Andrews, UK
Michela Becchi, University of Missouri - Columbia, USA
John Bent, EMC, USA
Ali Butt, Virginia Tech, USA
Kirk Cameron, Virginia Tech, USA
Franck Cappello, INRIA, France and University of Illinois at Urbana-Champaign, USA
Henri Casanova, University of Hawaii, USA
Abhishek Chandra, University of Minnesota, USA
Andrew Chien, University of Chicago and Argonne National Laboratory, USA
Paolo Costa, Imperial College London, UK
Peter Dinda, Northwestern University, USA
Gilles Fedak, INRIA, France
Ian Foster, University of Chicago and Argonne National Laboratory, USA
Clemens Grelck, University of Amsterdam, the Netherlands
Dean Hildebrand, IBM Research, USA
Fabrice Huet, INRIA-University of Nice, France
Adriana Iamnitchi, University of South Florida, USA
Alexandru Iosup, Delft University of Technology, the Netherlands
Kate Keahey, Argonne National Laboratory, USA
Thilo Kielmann, Vrije Universiteit, the Netherlands
Charles Kilian, Purdue University, USA
Zhiling Lan, Illinois Institute of Technology, USA
John Lange, University of Pittsburgh, USA
Barney Maccabe, Oak Ridge National Laboratory, USA
Carlos Maltzahn, University of California, Santa Cruz, USA
Naoya Maruyama, RIKEN Advanced Institute for Computational Science, Japan
Satoshi Matsuoka, Tokyo Institute of Technology, Japan
Manish Parashar, Rutgers University, USA
Judy Qiu, Indiana University, USA
Ioan Raicu, Illinois Institute of Technology, USA
Philip Rhodes, University of Mississippi, USA
Matei Ripeanu, University of British Columbia, Canada
Prasenjit Sarkar, IBM Research, USA
Daniele Scarpazza, D.E. Shaw Research, USA
Karsten Schwan, Georgia Institute of Technology, USA
Martin Swany, Indiana University, USA
Michela Taufer, University of Delaware, USA
Kenjiro Taura, University of Tokyo, Japan
Douglas Thain, University of Notre Dame, USA
Cristian Ungureanu, NEC Research, USA
Ana Varbanescu, Delft University of Technology, the Netherlands
Chuliang Weng, Shanghai Jiao Tong University, China
Jon Weissman, University of Minnesota, USA
Yongwei Wu, Tsinghua University, China
Dongyan Xu, Purdue University, USA
Ming Zhao, Florida International University, USA
**** Steering Committee ****
Henri Bal, Vrije Universiteit, the Netherlands
Andrew A. Chien, University of Chicago and Argonne National Laboratory, USA
Peter Dinda, Northwestern University, USA
Dick Epema, Delft University of Technology, the Netherlands
Ian Foster, University of Chicago and Argonne National Laboratory, USA
Salim Hariri, University of Arizona, USA
Thilo Kielmann, Vrije Universiteit, the Netherlands
Dieter Kranzlmueller, Ludwig-Maximilians-Universitaet Muenchen, Germany
Arthur "Barney" Maccabe, Oak Ridge National Laboratory, USA
Satoshi Matsuoka, Tokyo Institute of Technology, Japan
Manish Parashar, Rutgers University, USA
Matei Ripeanu, University of British Columbia, Canada
Karsten Schwan, Georgia Tech, USA
Doug Thain, University of Notre Dame, USA
Jon Weissman, University of Minnesota (Chair), USA
--
=================================================================
Ioan Raicu, Ph.D.
Assistant Professor, Illinois Institute of Technology (IIT)
Guest Research Faculty, Argonne National Laboratory (ANL)
=================================================================
Data-Intensive Distributed Systems Laboratory, CS/IIT
Distributed Systems Laboratory, MCS/ANL
=================================================================
Cel: 1-847-722-0876
Office: 1-312-567-5704
Email: iraicu@cs.iit.edu
Web: http://www.cs.iit.edu/~iraicu/
Web: http://datasys.cs.iit.edu/
=================================================================
=================================================================
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* CFP: The 13th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGrid 2013)
From: Ioan Raicu @ 2012-10-26 18:26 UTC (permalink / raw)
To: virtualization, micro_publicity, infodir_SIGARCH, infodir_sigcomm,
performance, sigplan-l
**** CALL FOR PAPERS ****
The 13th IEEE/ACM International Symposium on
Cluster, Cloud and Grid Computing
(CCGrid 2013)
Delft University of Technology, Delft, the Netherlands
May 13-16, 2013
http://www.pds.ewi.tudelft.nl/ccgrid2013
Rapid advances in architectures, networks, and systems and middleware technologies
are leading to new concepts in and platforms for computing, ranging from Clusters and
Grids to Clouds and Datacenters. CCGrid is a series of very successful conferences,
sponsored by the IEEE Computer Society Technical Committee on Scalable Computing (TCSC)
and the ACM, with the overarching goal of bringing together international researchers,
developers, and users to provide an international forum to present leading research
activities and results on a broad range of topics related to these concepts and platforms,
and their applications. The conference features keynotes, technical presentations,
workshops, tutorials, and posters, as well as the SCALE challenge featuring live demonstrations.
In 2013, CCGrid will come to the Netherlands for the first time, and will be held in Delft,
a historical, picturesque city that is less than one hour away from Amsterdam-Schiphol airport.
The main conference will be held on May 14-16 (Tuesday to Thursday), with tutorials and
affiliated workshops taking place on May 13 (Monday).
**** IMPORTANT DATES ****
Papers Due: 12 November 2012
Author Notifications: 24 January 2013
Final Papers Due: 22 February 2013
**** TOPICS OF INTEREST ****
CCGrid 2013 will have a focus on important and immediate issues that are significantly
influencing all aspects of cluster, cloud and grid computing. Topics of interest include,
but are not limited to:
* Applications and Experiences: Applications to real and complex problems in science,
engineering, business, and society; User studies; Experiences with large-scale deployments,
systems, or applications
* Architecture: System architectures, design and deployment; Power and cooling; Security
and reliability; High availability solutions
* Autonomic Computing and Cyberinfrastructure: Self-managed behavior, models and technologies;
Autonomic paradigms and systems (control-based, bio-inspired, emergent, etc.); Bio-inspired
optimizations and computing
* Cloud Computing: Cloud architectures; Software tools and techniques for clouds
* Multicore and Accelerator-based Computing: Software and application techniques to utilize
multicore architectures and accelerators in clusters, grids, and clouds
* Performance Modeling and Evaluation: Performance prediction and modeling; Monitoring and
evaluation tools; Analysis of system and application performance; Benchmarks and testbeds
* Programming Models, Systems, and Fault-Tolerant Computing: Programming models and
environments for cluster, cloud, and grid computing; Fault-tolerant systems, programs and
algorithms; Systems software to support efficient computing
* Scheduling and Resource Management: Techniques to schedule jobs and resources on cluster,
cloud, and grid computing platforms; SLA definition and enforcement
**** PAPER SUBMISSION GUIDELINES ****
Authors are invited to submit papers electronically in PDF format. Submitted manuscripts
should be structured as technical papers and may not exceed 8 letter-size (8.5 x 11) pages
including figures, tables and references using the IEEE format for conference proceedings.
Submissions not conforming to these guidelines may be returned without review. Authors
should make sure that their file will print on a printer that uses letter-size (8.5 x 11)
paper. The official language of the conference is English. All manuscripts will be reviewed
and will be judged on correctness, originality, technical strength, significance, quality of
presentation, and interest and relevance to the conference attendees.
Submitted papers must represent original unpublished research that is not currently under
review for any other conference or journal. Papers not following these guidelines will be
rejected without review and further action may be taken, including (but not limited to)
notifications sent to the heads of the institutions of the authors and sponsors of the
conference. Submissions received after the due date, exceeding the page limit, or not
appropriately structured may not be considered. Authors may contact the conference chairs
for more information. The proceedings will be published through the IEEE Computer Society
Press, USA, and will be made available online through the IEEE Digital Library.
**** CALL FOR TUTORIAL AND WORKSHOP PROPOSALS ****
Tutorials and workshops affiliated with CCGrid 2013 will be held on May 13 (Monday). For
more information on the tutorials and workshops and for the complete Call for Tutorial and
Workshop Proposals, please see the conference website.
**** GENERAL CHAIR ****
Dick Epema, Delft University of Technology, the Netherlands
**** PROGRAM CHAIR ****
Thomas Fahringer, University of Innsbruck, Austria
**** PROGRAM VICE-CHAIRS ****
Rosa Badia, Barcelona Supercomputing Center, Spain
Henri Bal, Vrije Universiteit, the Netherlands
Marios Dikaiakos, University of Cyprus, Cyprus
Kirk Cameron, VirginiaTech, USA
Daniel Katz, University of Chicago & Argonne Nat Lab, USA
Kate Keahey, Argonne National Laboratory, USA
Martin Schulz, Lawrence Livermore National Laboratory, USA
Douglas Thain, University of Notre Dame, USA
Cheng-Zhong Xu, Shenzhen Inst. of Advanced Techn, China
**** WORKSHOPS CO-CHAIRS ****
Shantenu Jha, Rutgers and Louisana State University, USA
Ioan Raicu, Illinois Institute of Technology, USA
**** TOTORIALS CHAIR ****
Radu Prodan, University of Innsbruck, Austria
**** DOCTORAL SYMPOSIUM CO-CHAIRS ****
Yogesh Simmhan, University of Southern California, USA
Ana Varbanescu, Delft Univ of Technology, the Netherlands
**** SUBMISSIONS AND PROCEEDINGS CHAIR ****
Pavan Balaji, Argonne National Laboratory, USA
**** FINANCE AND REGISTRATION CHAIR ****
Alexandru Iosup, Delft Univ of Technology, the Netherlands
**** PUBLICITY CHAIRS ****
Nazareno Andrade, University Federal de Campina Grance, Brazil
Gabriel Antoniu, INRIA, France
Bahman Javadi, University of Western Sysney, Australia
Ioan Raicu, Illinois Institute of Technology and Argonne National Laboratory, USA
Kin Choong Yow, Shenzhen Inst. of Advanced Technology, China
**** CYBER CHAIR ****
Stephen van der Laan, Delft University of Technology, the Netherlands
--
=================================================================
Ioan Raicu, Ph.D.
Assistant Professor, Illinois Institute of Technology (IIT)
Guest Research Faculty, Argonne National Laboratory (ANL)
=================================================================
Data-Intensive Distributed Systems Laboratory, CS/IIT
Distributed Systems Laboratory, MCS/ANL
=================================================================
Cel: 1-847-722-0876
Office: 1-312-567-5704
Email: iraicu@cs.iit.edu
Web: http://www.cs.iit.edu/~iraicu/
Web: http://datasys.cs.iit.edu/
=================================================================
=================================================================
^ permalink raw reply
* Re: [Pv-drivers] [PATCH 04/10] VMCI: device driver implementaton.
From: Andy King @ 2012-10-26 20:02 UTC (permalink / raw)
To: Greg KH; +Cc: pv-drivers, linux-kernel, George Zhang, virtualization
In-Reply-To: <723255296.2652440.1351199329247.JavaMail.root@vmware.com>
Hi Greg,
> in the next few days with that change along with any modifications
> necessary after a sparse sanity check.
We have a change that fixes things, but I wanted to check if you
had any additional comments before we send out more patches. In
all likelihood you'd probably already given up in disgust after
the vanilla exports, but I wanted to be sure :)
Also, would you prefer a complete refresh of the series or just
diffs?
Thanks!
- Andy
^ permalink raw reply
* Re: [Pv-drivers] [PATCH 04/10] VMCI: device driver implementaton.
From: Greg KH @ 2012-10-26 20:11 UTC (permalink / raw)
To: Andy King; +Cc: pv-drivers, linux-kernel, George Zhang, virtualization
In-Reply-To: <1734741434.3740170.1351281773036.JavaMail.root@vmware.com>
On Fri, Oct 26, 2012 at 01:02:53PM -0700, Andy King wrote:
> Hi Greg,
>
> > in the next few days with that change along with any modifications
> > necessary after a sparse sanity check.
>
> We have a change that fixes things, but I wanted to check if you
> had any additional comments before we send out more patches. In
> all likelihood you'd probably already given up in disgust after
> the vanilla exports, but I wanted to be sure :)
Yes, I stopped reviewing at this point.
> Also, would you prefer a complete refresh of the series or just
> diffs?
Complete refresh, with a short summary on the 00/10 patch of what the
changes are. That's the usual way to do this type of thing.
thanks,
greg k-h
^ permalink raw reply
* [PATCH 00/16] treewide: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
From: Joe Perches @ 2012-10-28 8:05 UTC (permalink / raw)
To: linux-ide, linux-arm-kernel, dri-devel, netdev, linux-wireless,
linux-pci, linux-pcmcia, linux-scsi, devel, virtualization,
linux-watchdog
Cc: alsa-devel, linux-usb, linux-kernel, linux-i2c
dev_<level> create smaller objects than dev_printk(KERN_<LEVEL>.
Convert non-debug calls to this form.
Joe Perches (16):
tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
ata: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
drivers: base: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
block: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
pcmcia: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
dma: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
gpu: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
i2c: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
wireless: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
ethernet: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
pci: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
scsi: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
usb: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
watchdog: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
arch/tile/kernel/pci_gx.c | 15 ++---
drivers/ata/pata_cmd64x.c | 6 +-
drivers/base/attribute_container.c | 2 +-
drivers/base/devres.c | 4 +-
drivers/block/umem.c | 97 ++++++++++++--------------
drivers/char/pcmcia/cm4040_cs.c | 5 +-
drivers/dma/at_hdmac_regs.h | 8 +-
drivers/dma/iop-adma.c | 45 ++++++------
drivers/dma/mv_xor.c | 62 ++++++++----------
drivers/gpu/drm/gma500/cdv_intel_crt.c | 3 +-
drivers/gpu/drm/gma500/cdv_intel_lvds.c | 7 +-
drivers/gpu/drm/gma500/psb_intel_lvds.c | 7 +-
drivers/gpu/drm/i915/intel_opregion.c | 8 +-
drivers/i2c/busses/i2c-piix4.c | 5 +-
drivers/net/ethernet/chelsio/cxgb3/common.h | 7 +-
drivers/net/ethernet/marvell/pxa168_eth.c | 7 +-
drivers/net/wireless/at76c50x-usb.c | 85 +++++++++++------------
drivers/net/wireless/iwlegacy/common.h | 5 +-
drivers/net/wireless/iwlwifi/pcie/trans.c | 28 +++-----
drivers/pci/irq.c | 10 ++--
drivers/pci/pci-stub.c | 2 +-
drivers/pci/pcie/aspm.c | 7 +--
drivers/pcmcia/cistpl.c | 10 +--
drivers/pcmcia/cs.c | 28 +++-----
drivers/pcmcia/ds.c | 38 +++++------
drivers/pcmcia/pcmcia_cis.c | 4 +-
drivers/pcmcia/pcmcia_resource.c | 11 +--
drivers/pcmcia/rsrc_nonstatic.c | 24 +++----
drivers/pcmcia/ti113x.h | 80 +++++++++++------------
drivers/pcmcia/yenta_socket.c | 61 ++++++++---------
drivers/scsi/53c700.c | 2 +-
drivers/scsi/aic7xxx/aic79xx_osm_pci.c | 4 +-
drivers/scsi/aic7xxx/aic7xxx_osm_pci.c | 4 +-
drivers/scsi/aic94xx/aic94xx_tmf.c | 4 +-
drivers/scsi/bfa/bfad.c | 32 ++++-----
drivers/scsi/fcoe/fcoe_sysfs.c | 3 +-
drivers/scsi/lasi700.c | 2 +-
drivers/scsi/libsas/sas_task.c | 9 +--
drivers/scsi/lpfc/lpfc_attr.c | 8 +-
drivers/scsi/lpfc/lpfc_debugfs.h | 6 +-
drivers/scsi/lpfc/lpfc_hbadisc.c | 4 +-
drivers/scsi/lpfc/lpfc_init.c | 45 ++++++-------
drivers/scsi/mpt2sas/mpt2sas_transport.c | 91 ++++++++++++-------------
drivers/scsi/mvsas/mv_64xx.c | 2 +-
drivers/scsi/mvsas/mv_chips.h | 8 +-
drivers/scsi/mvsas/mv_init.c | 14 ++--
drivers/scsi/mvsas/mv_sas.c | 9 +--
drivers/scsi/pm8001/pm8001_init.c | 10 +--
drivers/scsi/pm8001/pm8001_sas.c | 4 +-
drivers/scsi/raid_class.c | 8 +-
drivers/scsi/scsi_scan.c | 3 +-
drivers/scsi/scsi_transport_fc.c | 31 ++++-----
drivers/scsi/scsi_transport_sas.c | 7 +-
drivers/scsi/sni_53c710.c | 2 +-
drivers/scsi/zalon.c | 4 +-
drivers/usb/core/hub.c | 2 +-
drivers/virtio/virtio_balloon.c | 7 +-
drivers/watchdog/mpcore_wdt.c | 19 +++---
sound/pci/asihpi/hpidspcd.c | 22 +++----
sound/pci/asihpi/hpioctl.c | 17 ++---
60 files changed, 485 insertions(+), 579 deletions(-)
--
1.7.8.112.g3fd21
^ permalink raw reply
* [PATCH 14/16] virtio: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
From: Joe Perches @ 2012-10-28 8:05 UTC (permalink / raw)
To: Rusty Russell, Michael S. Tsirkin; +Cc: linux-kernel, virtualization
In-Reply-To: <cover.1351411047.git.joe@perches.com>
dev_<level> calls take less code than dev_printk(KERN_<LEVEL>
and reducing object size is good.
Convert if (printk_ratelimit()) dev_printk to dev_<level>_ratelimited.
Signed-off-by: Joe Perches <joe@perches.com>
---
drivers/virtio/virtio_balloon.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index 0908e60..586395c 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -130,10 +130,9 @@ static void fill_balloon(struct virtio_balloon *vb, size_t num)
struct page *page = alloc_page(GFP_HIGHUSER | __GFP_NORETRY |
__GFP_NOMEMALLOC | __GFP_NOWARN);
if (!page) {
- if (printk_ratelimit())
- dev_printk(KERN_INFO, &vb->vdev->dev,
- "Out of puff! Can't get %zu pages\n",
- num);
+ dev_info_ratelimited(&vb->vdev->dev,
+ "Out of puff! Can't get %zu pages\n",
+ num);
/* Sleep for at least 1/5 of a second before retry. */
msleep(200);
break;
--
1.7.8.112.g3fd21
^ permalink raw reply related
* Re: [PATCH 00/16] treewide: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
From: Sergei Shtylyov @ 2012-10-28 10:54 UTC (permalink / raw)
To: Joe Perches
Cc: alsa-devel, linux-usb, linux-watchdog, linux-scsi, linux-pci,
linux-pcmcia, linux-wireless, linux-kernel, dri-devel,
virtualization, linux-ide, devel, netdev, linux-arm-kernel,
linux-i2c
In-Reply-To: <cover.1351411047.git.joe@perches.com>
Hello.
On 28-10-2012 12:05, Joe Perches wrote:
> dev_<level> create smaller objects than dev_printk(KERN_<LEVEL>.
> Convert non-debug calls to this form.
> Joe Perches (16):
> tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
[...]
> tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
[...]
> tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
Hm, somehow this patch is repeated thrice?
MBR, Sergei
^ permalink raw reply
* Re: [PATCH 00/16] treewide: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
From: Joe Perches @ 2012-10-28 12:12 UTC (permalink / raw)
To: Sergei Shtylyov
Cc: alsa-devel, linux-usb, linux-watchdog, linux-scsi, linux-pci,
linux-pcmcia, linux-wireless, linux-kernel, dri-devel,
virtualization, linux-ide, devel, netdev, linux-arm-kernel,
linux-i2c
In-Reply-To: <508D0ECA.8040008@mvista.com>
On Sun, 2012-10-28 at 14:54 +0400, Sergei Shtylyov wrote:
> Hello.
Hi Sergei.
> On 28-10-2012 12:05, Joe Perches wrote:
>
> > dev_<level> create smaller objects than dev_printk(KERN_<LEVEL>.
> > Convert non-debug calls to this form.
>
> > Joe Perches (16):
> > tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
> [...]
> > tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
> [...]
> > tile: Convert dev_printk(KERN_<LEVEL> to dev_<level>(
>
> Hm, somehow this patch is repeated thrice?
Nope, I forgot to edit the 0000 file after I edited
patches locally when I noticed I forgot to update
the subject lines. Patches are corrected, 0000 not.
I don't think it's a bit deal, I could repost just the 0000
if you want though.
cheers, Joe
^ permalink raw reply
* Re: [PATCHv7 4/4] virtio_console: Add support for remoteproc serial
From: Sjur Brændeland @ 2012-10-28 21:58 UTC (permalink / raw)
To: Rusty Russell
Cc: Michael S. Tsirkin, Linus Walleij, linux-kernel, virtualization,
Masami Hiramatsu, Amit Shah
In-Reply-To: <878vayhsca.fsf@rustcorp.com.au>
Hi Rusty,
> The free-outside-interrupt issue is usually dealt with by offloading to
> a wq, but your variant works (and isn't too ugly).
Ok, thanks.
>> +static void reclaim_dma_bufs(void)
>> +{
>> + unsigned long flags;
>> + struct port_buffer *buf, *tmp;
>> + LIST_HEAD(tmp_list);
>> +
>> + if (list_empty(&pending_free_dma_bufs))
>> + return;
...
> Looks like this should be an easy noop even if !is_rproc_serial.
Ok, I'll drop the superfluous check before calling reclaim_dma_bufs().
>> @@ -1415,7 +1524,16 @@ static void remove_port_data(struct port *port)
>>
>> /* Remove buffers we queued up for the Host to send us data in. */
>> while ((buf = virtqueue_detach_unused_buf(port->in_vq)))
>> - free_buf(buf);
>> + free_buf(buf, true);
>> +
>> + /*
>> + * Remove buffers from out queue for rproc-serial. We cannot afford
>> + * to leak any DMA mem, so reclaim this memory even if this might be
>> + * racy for the remote processor.
>> + */
>> + if (is_rproc_serial(port->portdev->vdev))
>> + while ((buf = virtqueue_detach_unused_buf(port->out_vq)))
>> + free_buf(buf, true);
>> }
>
> This seems wrong; either this is needed even if !is_rproc_serial(), or
> it's not necessary as the out_vq is empty.
>
> Every path I can see has the device reset (in which case the queues
> should not be active), or we got a VIRTIO_CONSOLE_PORT_REMOVE event (in
> which case, the same).
>
> I think we can have non-blocking writes which could leave buffers in
> out_vq: Amit?
Hm, the remote device could potentially freeze whenever. So I think we
should handle the situation where buffer are stuck in the out-queue for
the rproc_serial device. But I'll move this piece of code into a new
follow-up patch so we can handle this issue separately.
Thanks,
Sjur
^ permalink raw reply
* [PATCH] Some virtio-ccw clarifications.
From: Cornelia Huck @ 2012-10-29 13:02 UTC (permalink / raw)
To: Rusty Russell; +Cc: virtualization
Hi Rusty,
here are some clarifications for virtio-ccw: feature bit endianess
and how setting the indicator location works (with the channel
data address only being 32 bit wide).
Cornelia Huck (1):
virtio-ccw: Clarifications.
virtio-spec.lyx | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
--
1.7.5.4
^ permalink raw reply
* [PATCH] virtio-ccw: Clarifications.
From: Cornelia Huck @ 2012-10-29 13:02 UTC (permalink / raw)
To: Rusty Russell; +Cc: virtualization
In-Reply-To: <1351515758-22295-1-git-send-email-cornelia.huck@de.ibm.com>
Clarify how indicator location is communicated and that the
feature bits are little-endian.
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
virtio-spec.lyx | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/virtio-spec.lyx b/virtio-spec.lyx
index b0532ef..83f2771 100644
--- a/virtio-spec.lyx
+++ b/virtio-spec.lyx
@@ -9973,9 +9973,10 @@ Handling Device Features
\begin_layout Standard
-\change_inserted -385801441 1345027079
+\change_inserted -385801441 1351067713
Feature bits are arranged in an array of 32 bit values, making for a total
of 8192 feature bits.
+ Feature bits are in little-endian byte order.
\end_layout
\begin_layout Standard
@@ -10112,10 +10113,10 @@ Setting Up Indicators
\begin_layout Standard
-\change_inserted -385801441 1347015710
+\change_inserted -385801441 1351067651
To communicate the location of the indicator bits for host->guest notification,
- the guest uses the CCW_CMD_SET_IND command which sends the guest address
- of the indicators in a 64 bit value.
+ the guest uses the CCW_CMD_SET_IND command, pointing to a location containing
+ the guest address of the indicators in a 64 bit value.
\end_layout
\begin_layout Standard
--
1.7.5.4
^ permalink raw reply related
* [PATCH net-next 0/8] enable/disable zero copy tx dynamically
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
tun supports zero copy transmit since 0690899b4d4501b3505be069b9a687e68ccbe15b,
however you can only enable this mode if you know your workload does not
trigger heavy guest to host/host to guest traffic - otherwise you
get a (minor) performance regression.
This patchset addresses this problem by notifying the owner
device when callback is invoked because of a data copy.
This makes it possible to detect whether zero copy is appropriate
dynamically: we start in zero copy mode, when we detect
data copied we disable zero copy for a while.
With this patch applied, I get the same performance for
guest to host and guest to guest both with and without zero copy tx.
Michael S. Tsirkin (8):
skb: report completion status for zero copy skbs
skb: api to report errors for zero copy skbs
tun: report orphan frags errors to zero copy callback
vhost-net: cleanup macros for DMA status tracking
vhost: track zero copy failures using DMA length
vhost: move -net specific code out
vhost-net: select tx zero copy dynamically
vhost-net: reduce vq polling on tx zerocopy
drivers/net/tun.c | 1 +
drivers/vhost/net.c | 109 +++++++++++++++++++++++++++++++++++++++++++---
drivers/vhost/tcm_vhost.c | 1 +
drivers/vhost/vhost.c | 52 +++-------------------
drivers/vhost/vhost.h | 11 ++---
include/linux/skbuff.h | 5 ++-
net/core/skbuff.c | 23 +++++++++-
7 files changed, 141 insertions(+), 61 deletions(-)
--
MST
^ permalink raw reply
* [PATCH net-next 1/8] skb: report completion status for zero copy skbs
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
Even if skb is marked for zero copy, net core might still decide
to copy it later which is somewhat slower than a copy in user context:
besides copying the data we need to pin/unpin the pages.
Add a parameter reporting such cases through zero copy callback:
if this happens a lot, device can take this into account
and switch to copying in user context.
This patch updates all users but ignores the passed value for now:
it will be used by follow-up patches.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/vhost.c | 2 +-
drivers/vhost/vhost.h | 2 +-
include/linux/skbuff.h | 4 +++-
net/core/skbuff.c | 4 ++--
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 99ac2cb..92308b6 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -1600,7 +1600,7 @@ void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *ubufs)
kfree(ubufs);
}
-void vhost_zerocopy_callback(struct ubuf_info *ubuf)
+void vhost_zerocopy_callback(struct ubuf_info *ubuf, int zerocopy_status)
{
struct vhost_ubuf_ref *ubufs = ubuf->ctx;
struct vhost_virtqueue *vq = ubufs->vq;
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index 1125af3..eb7263c3 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -191,7 +191,7 @@ bool vhost_enable_notify(struct vhost_dev *, struct vhost_virtqueue *);
int vhost_log_write(struct vhost_virtqueue *vq, struct vhost_log *log,
unsigned int log_num, u64 len);
-void vhost_zerocopy_callback(struct ubuf_info *);
+void vhost_zerocopy_callback(struct ubuf_info *, int);
int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq);
#define vq_err(vq, fmt, ...) do { \
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 6a2c34e..8bac11b 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -235,11 +235,13 @@ enum {
/*
* The callback notifies userspace to release buffers when skb DMA is done in
* lower device, the skb last reference should be 0 when calling this.
+ * The zerocopy_status argument is 0 if zero copy transmit occurred,
+ * 1 on successful data copy; < 0 on out of memory error.
* The ctx field is used to track device context.
* The desc field is used to track userspace buffer index.
*/
struct ubuf_info {
- void (*callback)(struct ubuf_info *);
+ void (*callback)(struct ubuf_info *, int zerocopy_status);
void *ctx;
unsigned long desc;
};
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 6e04b1f..eb31f6e 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -519,7 +519,7 @@ static void skb_release_data(struct sk_buff *skb)
uarg = skb_shinfo(skb)->destructor_arg;
if (uarg->callback)
- uarg->callback(uarg);
+ uarg->callback(uarg, 0);
}
if (skb_has_frag_list(skb))
@@ -797,7 +797,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask)
for (i = 0; i < num_frags; i++)
skb_frag_unref(skb, i);
- uarg->callback(uarg);
+ uarg->callback(uarg, 1);
/* skb frags point to kernel buffers */
for (i = num_frags - 1; i >= 0; i--) {
--
MST
^ permalink raw reply related
* [PATCH net-next 2/8] skb: api to report errors for zero copy skbs
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
Orphaning frags for zero copy skbs needs to allocate data in atomic
context so is has a chance to fail. If it does we currently discard
the skb which is safe, but we don't report anything to the caller,
so it can not recover by e.g. disabling zero copy.
Add an API to free skb reporting such errors: this is used
by tun in case orphaning frags fails.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/linux/skbuff.h | 1 +
net/core/skbuff.c | 19 +++++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 8bac11b..0644432 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -568,6 +568,7 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb)
}
extern void kfree_skb(struct sk_buff *skb);
+extern void skb_tx_error(struct sk_buff *skb, int err);
extern void consume_skb(struct sk_buff *skb);
extern void __kfree_skb(struct sk_buff *skb);
extern struct kmem_cache *skbuff_head_cache;
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index eb31f6e..ad99c64 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -635,6 +635,25 @@ void kfree_skb(struct sk_buff *skb)
EXPORT_SYMBOL(kfree_skb);
/**
+ * kfree_skb_on_error - report an sk_buff xmit error
+ * @skb: buffer that triggered an error
+ *
+ * Report xmit error if a device callback is tracking this skb.
+ */
+void skb_tx_error(struct sk_buff *skb, int err)
+{
+ if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
+ struct ubuf_info *uarg;
+
+ uarg = skb_shinfo(skb)->destructor_arg;
+ if (uarg->callback)
+ uarg->callback(uarg, err);
+ skb_shinfo(skb)->tx_flags &= ~SKBTX_DEV_ZEROCOPY;
+ }
+}
+EXPORT_SYMBOL(skb_tx_error);
+
+/**
* consume_skb - free an skbuff
* @skb: buffer to free
*
--
MST
^ permalink raw reply related
* [PATCH net-next 3/8] tun: report orphan frags errors to zero copy callback
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
When tun transmits a zero copy skb, it orphans the frags
which might need to allocate extra memory, in atomic context.
If that fails, notify ubufs callback before freeing the skb
as a hint that device should disable zerocopy mode.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/net/tun.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 3157519..613f826 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -433,6 +433,7 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
drop:
dev->stats.tx_dropped++;
+ skb_tx_error(skb, -ENOMEM);
kfree_skb(skb);
return NETDEV_TX_OK;
}
--
MST
^ permalink raw reply related
* [PATCH net-next 8/8] vhost-net: reduce vq polling on tx zerocopy
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
It seems that to avoid deadlocks it is enough to poll vq before
we are going to use the last buffer. This should be faster than
c70aa540c7a9f67add11ad3161096fb95233aa2e.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/net.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 8e9de79..3967f82 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -197,8 +197,16 @@ static void vhost_zerocopy_callback(struct ubuf_info *ubuf, int status)
{
struct vhost_ubuf_ref *ubufs = ubuf->ctx;
struct vhost_virtqueue *vq = ubufs->vq;
-
- vhost_poll_queue(&vq->poll);
+ int cnt = atomic_read(&ubufs->kref.refcount);
+
+ /*
+ * Trigger polling thread if guest stopped submitting new buffers:
+ * in this case, the refcount after decrement will eventually reach 1
+ * so here it is 2.
+ * We also trigger polling periodically after each 16 packets.
+ */
+ if (cnt <= 2 || !(cnt % 16))
+ vhost_poll_queue(&vq->poll);
/* set len to mark this desc buffers done DMA */
vq->heads[ubuf->desc].len = status ?
VHOST_DMA_FAILED_LEN : VHOST_DMA_DONE_LEN;
--
MST
^ permalink raw reply related
* [PATCH net-next 4/8] vhost-net: cleanup macros for DMA status tracking
From: Michael S. Tsirkin @ 2012-10-29 15:49 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
Better document macros for DMA tracking. Add an
explicit one for DMA in progress instead of
relying on user supplying len != 1.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/net.c | 3 ++-
drivers/vhost/vhost.c | 2 +-
drivers/vhost/vhost.h | 12 +++++++++---
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 072cbba..f80ae5f 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -237,7 +237,8 @@ static void handle_tx(struct vhost_net *net)
} else {
struct ubuf_info *ubuf = &vq->ubuf_info[head];
- vq->heads[vq->upend_idx].len = len;
+ vq->heads[vq->upend_idx].len =
+ VHOST_DMA_IN_PROGRESS;
ubuf->callback = vhost_zerocopy_callback;
ubuf->ctx = vq->ubufs;
ubuf->desc = vq->upend_idx;
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 92308b6..906fd9f 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -1606,7 +1606,7 @@ void vhost_zerocopy_callback(struct ubuf_info *ubuf, int zerocopy_status)
struct vhost_virtqueue *vq = ubufs->vq;
vhost_poll_queue(&vq->poll);
- /* set len = 1 to mark this desc buffers done DMA */
+ /* set len to mark this desc buffers done DMA */
vq->heads[ubuf->desc].len = VHOST_DMA_DONE_LEN;
kref_put(&ubufs->kref, vhost_zerocopy_done_signal);
}
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index eb7263c3..ad72a1f 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -13,9 +13,15 @@
#include <linux/virtio_ring.h>
#include <linux/atomic.h>
-/* This is for zerocopy, used buffer len is set to 1 when lower device DMA
- * done */
-#define VHOST_DMA_DONE_LEN 1
+/*
+ * For transmit, used buffer len is unused; we override it to track buffer
+ * status internally; used for zerocopy tx only.
+ */
+/* Lower device DMA done */
+#define VHOST_DMA_DONE_LEN 2
+/* Lower device DMA in progress */
+#define VHOST_DMA_IN_PROGRESS 1
+/* Buffer unused */
#define VHOST_DMA_CLEAR_LEN 0
struct vhost_device;
--
MST
^ permalink raw reply related
* [PATCH net-next 5/8] vhost: track zero copy failures using DMA length
From: Michael S. Tsirkin @ 2012-10-29 15:50 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
This will be used to disable zerocopy when error rate
is high.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/vhost.c | 7 ++++---
drivers/vhost/vhost.h | 4 ++++
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 906fd9f..5affce3 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -425,7 +425,7 @@ int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq)
int j = 0;
for (i = vq->done_idx; i != vq->upend_idx; i = (i + 1) % UIO_MAXIOV) {
- if ((vq->heads[i].len == VHOST_DMA_DONE_LEN)) {
+ if (VHOST_DMA_IS_DONE(vq->heads[i].len)) {
vq->heads[i].len = VHOST_DMA_CLEAR_LEN;
vhost_add_used_and_signal(vq->dev, vq,
vq->heads[i].id, 0);
@@ -1600,13 +1600,14 @@ void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *ubufs)
kfree(ubufs);
}
-void vhost_zerocopy_callback(struct ubuf_info *ubuf, int zerocopy_status)
+void vhost_zerocopy_callback(struct ubuf_info *ubuf, int status)
{
struct vhost_ubuf_ref *ubufs = ubuf->ctx;
struct vhost_virtqueue *vq = ubufs->vq;
vhost_poll_queue(&vq->poll);
/* set len to mark this desc buffers done DMA */
- vq->heads[ubuf->desc].len = VHOST_DMA_DONE_LEN;
+ vq->heads[ubuf->desc].len = status ?
+ VHOST_DMA_FAILED_LEN : VHOST_DMA_DONE_LEN;
kref_put(&ubufs->kref, vhost_zerocopy_done_signal);
}
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index ad72a1f..6fdf31d 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -17,6 +17,8 @@
* For transmit, used buffer len is unused; we override it to track buffer
* status internally; used for zerocopy tx only.
*/
+/* Lower device DMA failed */
+#define VHOST_DMA_FAILED_LEN 3
/* Lower device DMA done */
#define VHOST_DMA_DONE_LEN 2
/* Lower device DMA in progress */
@@ -24,6 +26,8 @@
/* Buffer unused */
#define VHOST_DMA_CLEAR_LEN 0
+#define VHOST_DMA_IS_DONE(len) ((len) >= VHOST_DMA_DONE_LEN)
+
struct vhost_device;
struct vhost_work;
--
MST
^ permalink raw reply related
* [PATCH net-next 6/8] vhost: move -net specific code out
From: Michael S. Tsirkin @ 2012-10-29 15:50 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
Zerocopy handling code is vhost-net specific.
Move it from vhost.c/vhost.h out to net.c
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/net.c | 45 ++++++++++++++++++++++++++++++++++++++++
drivers/vhost/tcm_vhost.c | 1 +
drivers/vhost/vhost.c | 53 +++++++----------------------------------------
drivers/vhost/vhost.h | 21 +++----------------
4 files changed, 56 insertions(+), 64 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index f80ae5f..532fc88 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -126,6 +126,42 @@ static void tx_poll_start(struct vhost_net *net, struct socket *sock)
net->tx_poll_state = VHOST_NET_POLL_STARTED;
}
+/* In case of DMA done not in order in lower device driver for some reason.
+ * upend_idx is used to track end of used idx, done_idx is used to track head
+ * of used idx. Once lower device DMA done contiguously, we will signal KVM
+ * guest used idx.
+ */
+int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq)
+{
+ int i;
+ int j = 0;
+
+ for (i = vq->done_idx; i != vq->upend_idx; i = (i + 1) % UIO_MAXIOV) {
+ if (VHOST_DMA_IS_DONE(vq->heads[i].len)) {
+ vq->heads[i].len = VHOST_DMA_CLEAR_LEN;
+ vhost_add_used_and_signal(vq->dev, vq,
+ vq->heads[i].id, 0);
+ ++j;
+ } else
+ break;
+ }
+ if (j)
+ vq->done_idx = i;
+ return j;
+}
+
+static void vhost_zerocopy_callback(struct ubuf_info *ubuf, int status)
+{
+ struct vhost_ubuf_ref *ubufs = ubuf->ctx;
+ struct vhost_virtqueue *vq = ubufs->vq;
+
+ vhost_poll_queue(&vq->poll);
+ /* set len to mark this desc buffers done DMA */
+ vq->heads[ubuf->desc].len = status ?
+ VHOST_DMA_FAILED_LEN : VHOST_DMA_DONE_LEN;
+ vhost_ubuf_put(ubufs);
+}
+
/* Expects to be always run from workqueue - which acts as
* read-size critical section for our kind of RCU. */
static void handle_tx(struct vhost_net *net)
@@ -594,9 +630,18 @@ static int vhost_net_release(struct inode *inode, struct file *f)
struct vhost_net *n = f->private_data;
struct socket *tx_sock;
struct socket *rx_sock;
+ int i;
vhost_net_stop(n, &tx_sock, &rx_sock);
vhost_net_flush(n);
+ vhost_dev_stop(&n->dev);
+ for (i = 0; i < n->dev.nvqs; ++i) {
+ /* Wait for all lower device DMAs done. */
+ if (n->dev.vqs[i].ubufs)
+ vhost_ubuf_put_and_wait(n->dev.vqs[i].ubufs);
+
+ vhost_zerocopy_signal_used(n, &n->dev.vqs[i]);
+ }
vhost_dev_cleanup(&n->dev, false);
if (tx_sock)
fput(tx_sock->file);
diff --git a/drivers/vhost/tcm_vhost.c b/drivers/vhost/tcm_vhost.c
index aa31692..23c138f 100644
--- a/drivers/vhost/tcm_vhost.c
+++ b/drivers/vhost/tcm_vhost.c
@@ -895,6 +895,7 @@ static int vhost_scsi_release(struct inode *inode, struct file *f)
vhost_scsi_clear_endpoint(s, &backend);
}
+ vhost_dev_stop(&s->dev);
vhost_dev_cleanup(&s->dev, false);
kfree(s);
return 0;
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 5affce3..ef8f598 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -26,10 +26,6 @@
#include <linux/kthread.h>
#include <linux/cgroup.h>
-#include <linux/net.h>
-#include <linux/if_packet.h>
-#include <linux/if_arp.h>
-
#include "vhost.h"
enum {
@@ -414,28 +410,16 @@ long vhost_dev_reset_owner(struct vhost_dev *dev)
return 0;
}
-/* In case of DMA done not in order in lower device driver for some reason.
- * upend_idx is used to track end of used idx, done_idx is used to track head
- * of used idx. Once lower device DMA done contiguously, we will signal KVM
- * guest used idx.
- */
-int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq)
+void vhost_dev_stop(struct vhost_dev *dev)
{
int i;
- int j = 0;
-
- for (i = vq->done_idx; i != vq->upend_idx; i = (i + 1) % UIO_MAXIOV) {
- if (VHOST_DMA_IS_DONE(vq->heads[i].len)) {
- vq->heads[i].len = VHOST_DMA_CLEAR_LEN;
- vhost_add_used_and_signal(vq->dev, vq,
- vq->heads[i].id, 0);
- ++j;
- } else
- break;
+
+ for (i = 0; i < dev->nvqs; ++i) {
+ if (dev->vqs[i].kick && dev->vqs[i].handle_kick) {
+ vhost_poll_stop(&dev->vqs[i].poll);
+ vhost_poll_flush(&dev->vqs[i].poll);
+ }
}
- if (j)
- vq->done_idx = i;
- return j;
}
/* Caller should have device mutex if and only if locked is set */
@@ -444,17 +428,6 @@ void vhost_dev_cleanup(struct vhost_dev *dev, bool locked)
int i;
for (i = 0; i < dev->nvqs; ++i) {
- if (dev->vqs[i].kick && dev->vqs[i].handle_kick) {
- vhost_poll_stop(&dev->vqs[i].poll);
- vhost_poll_flush(&dev->vqs[i].poll);
- }
- /* Wait for all lower device DMAs done. */
- if (dev->vqs[i].ubufs)
- vhost_ubuf_put_and_wait(dev->vqs[i].ubufs);
-
- /* Signal guest as appropriate. */
- vhost_zerocopy_signal_used(&dev->vqs[i]);
-
if (dev->vqs[i].error_ctx)
eventfd_ctx_put(dev->vqs[i].error_ctx);
if (dev->vqs[i].error)
@@ -1599,15 +1572,3 @@ void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *ubufs)
wait_event(ubufs->wait, !atomic_read(&ubufs->kref.refcount));
kfree(ubufs);
}
-
-void vhost_zerocopy_callback(struct ubuf_info *ubuf, int status)
-{
- struct vhost_ubuf_ref *ubufs = ubuf->ctx;
- struct vhost_virtqueue *vq = ubufs->vq;
-
- vhost_poll_queue(&vq->poll);
- /* set len to mark this desc buffers done DMA */
- vq->heads[ubuf->desc].len = status ?
- VHOST_DMA_FAILED_LEN : VHOST_DMA_DONE_LEN;
- kref_put(&ubufs->kref, vhost_zerocopy_done_signal);
-}
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index 6fdf31d..5e19e3d 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -7,27 +7,11 @@
#include <linux/mutex.h>
#include <linux/poll.h>
#include <linux/file.h>
-#include <linux/skbuff.h>
#include <linux/uio.h>
#include <linux/virtio_config.h>
#include <linux/virtio_ring.h>
#include <linux/atomic.h>
-/*
- * For transmit, used buffer len is unused; we override it to track buffer
- * status internally; used for zerocopy tx only.
- */
-/* Lower device DMA failed */
-#define VHOST_DMA_FAILED_LEN 3
-/* Lower device DMA done */
-#define VHOST_DMA_DONE_LEN 2
-/* Lower device DMA in progress */
-#define VHOST_DMA_IN_PROGRESS 1
-/* Buffer unused */
-#define VHOST_DMA_CLEAR_LEN 0
-
-#define VHOST_DMA_IS_DONE(len) ((len) >= VHOST_DMA_DONE_LEN)
-
struct vhost_device;
struct vhost_work;
@@ -80,6 +64,8 @@ struct vhost_ubuf_ref *vhost_ubuf_alloc(struct vhost_virtqueue *, bool zcopy);
void vhost_ubuf_put(struct vhost_ubuf_ref *);
void vhost_ubuf_put_and_wait(struct vhost_ubuf_ref *);
+struct ubuf_info;
+
/* The virtqueue structure describes a queue attached to a device. */
struct vhost_virtqueue {
struct vhost_dev *dev;
@@ -177,6 +163,7 @@ long vhost_dev_init(struct vhost_dev *, struct vhost_virtqueue *vqs, int nvqs);
long vhost_dev_check_owner(struct vhost_dev *);
long vhost_dev_reset_owner(struct vhost_dev *);
void vhost_dev_cleanup(struct vhost_dev *, bool locked);
+void vhost_dev_stop(struct vhost_dev *);
long vhost_dev_ioctl(struct vhost_dev *, unsigned int ioctl, unsigned long arg);
int vhost_vq_access_ok(struct vhost_virtqueue *vq);
int vhost_log_access_ok(struct vhost_dev *);
@@ -201,8 +188,6 @@ bool vhost_enable_notify(struct vhost_dev *, struct vhost_virtqueue *);
int vhost_log_write(struct vhost_virtqueue *vq, struct vhost_log *log,
unsigned int log_num, u64 len);
-void vhost_zerocopy_callback(struct ubuf_info *, int);
-int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq);
#define vq_err(vq, fmt, ...) do { \
pr_debug(pr_fmt(fmt), ##__VA_ARGS__); \
--
MST
^ permalink raw reply related
* [PATCH net-next 7/8] vhost-net: select tx zero copy dynamically
From: Michael S. Tsirkin @ 2012-10-29 15:50 UTC (permalink / raw)
Cc: Alexander Duyck, Ian Campbell, kvm, Michael S. Tsirkin, netdev,
linux-kernel, virtualization, Eric Dumazet, Andrew Morton,
David S. Miller
In-Reply-To: <cover.1351524501.git.mst@redhat.com>
Even when vhost-net is in zero-copy transmit mode,
net core might still decide to copy the skb later
which is somewhat slower than a copy in user
context: data copy overhead is added to the cost of
page pin/unpin. The result is that enabling tx zero copy
option leads to higher CPU utilization for guest to guest
and guest to host traffic.
To fix this, suppress zero copy tx after a given number of
packets triggered late data copy. Re-enable periodically
to detect workload changes.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
drivers/vhost/net.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 50 insertions(+), 5 deletions(-)
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 532fc88..8e9de79 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -42,6 +42,21 @@ MODULE_PARM_DESC(experimental_zcopytx, "Enable Experimental Zero Copy TX");
#define VHOST_MAX_PEND 128
#define VHOST_GOODCOPY_LEN 256
+/*
+ * For transmit, used buffer len is unused; we override it to track buffer
+ * status internally; used for zerocopy tx only.
+ */
+/* Lower device DMA failed */
+#define VHOST_DMA_FAILED_LEN 3
+/* Lower device DMA done */
+#define VHOST_DMA_DONE_LEN 2
+/* Lower device DMA in progress */
+#define VHOST_DMA_IN_PROGRESS 1
+/* Buffer unused */
+#define VHOST_DMA_CLEAR_LEN 0
+
+#define VHOST_DMA_IS_DONE(len) ((len) >= VHOST_DMA_DONE_LEN)
+
enum {
VHOST_NET_VQ_RX = 0,
VHOST_NET_VQ_TX = 1,
@@ -62,8 +77,33 @@ struct vhost_net {
* We only do this when socket buffer fills up.
* Protected by tx vq lock. */
enum vhost_net_poll_state tx_poll_state;
+ /* Number of TX recently submitted.
+ * Protected by tx vq lock. */
+ unsigned tx_packets;
+ /* Number of times zerocopy TX recently failed.
+ * Protected by tx vq lock. */
+ unsigned tx_zcopy_err;
};
+static void vhost_net_tx_packet(struct vhost_net *net)
+{
+ ++net->tx_packets;
+ if (net->tx_packets < 1024)
+ return;
+ net->tx_packets = 0;
+ net->tx_zcopy_err = 0;
+}
+
+static void vhost_net_tx_err(struct vhost_net *net)
+{
+ ++net->tx_zcopy_err;
+}
+
+static bool vhost_net_tx_select_zcopy(struct vhost_net *net)
+{
+ return net->tx_packets / 64 >= net->tx_zcopy_err;
+}
+
static bool vhost_sock_zcopy(struct socket *sock)
{
return unlikely(experimental_zcopytx) &&
@@ -131,12 +171,15 @@ static void tx_poll_start(struct vhost_net *net, struct socket *sock)
* of used idx. Once lower device DMA done contiguously, we will signal KVM
* guest used idx.
*/
-int vhost_zerocopy_signal_used(struct vhost_virtqueue *vq)
+static int vhost_zerocopy_signal_used(struct vhost_net *net,
+ struct vhost_virtqueue *vq)
{
int i;
int j = 0;
for (i = vq->done_idx; i != vq->upend_idx; i = (i + 1) % UIO_MAXIOV) {
+ if (vq->heads[i].len == VHOST_DMA_FAILED_LEN)
+ vhost_net_tx_err(net);
if (VHOST_DMA_IS_DONE(vq->heads[i].len)) {
vq->heads[i].len = VHOST_DMA_CLEAR_LEN;
vhost_add_used_and_signal(vq->dev, vq,
@@ -208,7 +251,7 @@ static void handle_tx(struct vhost_net *net)
for (;;) {
/* Release DMAs done buffers first */
if (zcopy)
- vhost_zerocopy_signal_used(vq);
+ vhost_zerocopy_signal_used(net, vq);
head = vhost_get_vq_desc(&net->dev, vq, vq->iov,
ARRAY_SIZE(vq->iov),
@@ -263,7 +306,8 @@ static void handle_tx(struct vhost_net *net)
/* use msg_control to pass vhost zerocopy ubuf info to skb */
if (zcopy) {
vq->heads[vq->upend_idx].id = head;
- if (len < VHOST_GOODCOPY_LEN) {
+ if (!vhost_net_tx_select_zcopy(net) ||
+ len < VHOST_GOODCOPY_LEN) {
/* copy don't need to wait for DMA done */
vq->heads[vq->upend_idx].len =
VHOST_DMA_DONE_LEN;
@@ -305,8 +349,9 @@ static void handle_tx(struct vhost_net *net)
if (!zcopy)
vhost_add_used_and_signal(&net->dev, vq, head, 0);
else
- vhost_zerocopy_signal_used(vq);
+ vhost_zerocopy_signal_used(net, vq);
total_len += len;
+ vhost_net_tx_packet(net);
if (unlikely(total_len >= VHOST_NET_WEIGHT)) {
vhost_poll_queue(&vq->poll);
break;
@@ -774,7 +819,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
if (oldubufs) {
vhost_ubuf_put_and_wait(oldubufs);
mutex_lock(&vq->mutex);
- vhost_zerocopy_signal_used(vq);
+ vhost_zerocopy_signal_used(n, vq);
mutex_unlock(&vq->mutex);
}
--
MST
^ permalink raw reply related
* [PATCH 00/12] VMCI for Linux upstreaming
From: George Zhang @ 2012-10-30 1:03 UTC (permalink / raw)
To: linux-kernel, georgezhang, virtualization; +Cc: pv-drivers, gregkh
* * *
This series of VMCI linux upstreaming patches include latest udpate from
VMware.
-split guest, host and core driver code into different files
-use EXPORT_SYMBOLS_GPL
-remove vmci_device_get and vmci_device_release APIs
-simplify the event deliver mechanism
-driver ioctl code cleanup
-sparse clean
* * *
In an effort to improve the out-of-the-box experience with Linux
kernels for VMware users, VMware is working on readying the Virtual
Machine Communication Interface (vmw_vmci) and VMCI Sockets
(vmw_vsock) kernel modules for inclusion in the Linux kernel. The
purpose of this post is to acquire feedback on the vmw_vmci kernel
module. The vmw_vsock kernel module will be presented in a later post.
* * *
VMCI allows virtual machines to communicate with host kernel modules
and the VMware hypervisors. User level applications both in a virtual
machine and on the host can use vmw_vmci through VMCI Sockets, a socket
address family designed to be compatible with UDP and TCP at the
interface level. Today, VMCI and VMCI Sockets are used by the VMware
shared folders (HGFS) and various VMware Tools components inside the
guest for zero-config, network-less access to VMware host services. In
addition to this, VMware's users are using VMCI Sockets for various
applications, where network access of the virtual machine is
restricted or non-existent. Examples of this are VMs communicating
with device proxies for proprietary hardware running as host
applications and automated testing of applications running within
virtual machines.
In a virtual machine, VMCI is exposed as a regular PCI device. The
primary communication mechanisms supported are a point-to-point
bidirectional transport based on a pair of memory-mapped queues, and
asynchronous notifications in the form of datagrams and
doorbells. These features are available to kernel level components
such as HGFS and VMCI Sockets through the VMCI kernel API. In addition
to this, the VMCI kernel API provides support for receiving events
related to the state of the VMCI communication channels, and the
virtual machine itself.
Outside the virtual machine, the host side support of the VMCI kernel
module makes the same VMCI kernel API available to VMCI endpoints on
the host. In addition to this, the host side manages each VMCI device
in a virtual machine through a context object. This context object
serves to identify the virtual machine for communication, and to track
the resource consumption of the given VMCI device. Both operations
related to communication between the virtual machine and the host
kernel, and those related to the management of the VMCI device state
in the host kernel, are invoked by the user level component of the
hypervisor through a set of ioctls on the VMCI device node. To
provide seamless support for nested virtualization, where a virtual
machine may use both a VMCI PCI device to talk to its hypervisor, and
the VMCI host side support to run nested virtual machines, the VMCI
host and virtual machine support are combined in a single kernel
module.
For additional information about the use of VMCI and in particular
VMCI Sockets, please refer to the VMCI Socket Programming Guide
available at https://www.vmware.com/support/developer/vmci-sdk/.
---
George Zhang (12):
VMCI: context implementation.
VMCI: datagram implementation.
VMCI: doorbell implementation.
VMCI: device driver implementaton.
VMCI: event handling implementation.
VMCI: handle array implementation.
VMCI: queue pairs implementation.
VMCI: resource object implementation.
VMCI: routing implementation.
VMCI: guest side driver implementation.
VMCI: host side driver implementation.
VMCI: Some header and config files.
drivers/misc/Kconfig | 1
drivers/misc/Makefile | 2
drivers/misc/vmw_vmci/Kconfig | 16
drivers/misc/vmw_vmci/Makefile | 43
drivers/misc/vmw_vmci/vmci_common_int.h | 34
drivers/misc/vmw_vmci/vmci_context.c | 1290 +++++++++++
drivers/misc/vmw_vmci/vmci_context.h | 177 +
drivers/misc/vmw_vmci/vmci_datagram.c | 520 ++++
drivers/misc/vmw_vmci/vmci_datagram.h | 55
drivers/misc/vmw_vmci/vmci_doorbell.c | 673 +++++
drivers/misc/vmw_vmci/vmci_doorbell.h | 53
drivers/misc/vmw_vmci/vmci_driver.c | 159 +
drivers/misc/vmw_vmci/vmci_driver.h | 50
drivers/misc/vmw_vmci/vmci_event.c | 371 +++
drivers/misc/vmw_vmci/vmci_event.h | 25
drivers/misc/vmw_vmci/vmci_guest.c | 765 ++++++
drivers/misc/vmw_vmci/vmci_handle_array.c | 162 +
drivers/misc/vmw_vmci/vmci_handle_array.h | 46
drivers/misc/vmw_vmci/vmci_host.c | 1046 +++++++++
drivers/misc/vmw_vmci/vmci_queue_pair.c | 3556 +++++++++++++++++++++++++++++
drivers/misc/vmw_vmci/vmci_queue_pair.h | 191 ++
drivers/misc/vmw_vmci/vmci_resource.c | 237 ++
drivers/misc/vmw_vmci/vmci_resource.h | 59
drivers/misc/vmw_vmci/vmci_route.c | 237 ++
drivers/misc/vmw_vmci/vmci_route.h | 30
include/linux/vmw_vmci_api.h | 85 +
include/linux/vmw_vmci_defs.h | 977 ++++++++
27 files changed, 10860 insertions(+), 0 deletions(-)
create mode 100644 drivers/misc/vmw_vmci/Kconfig
create mode 100644 drivers/misc/vmw_vmci/Makefile
create mode 100644 drivers/misc/vmw_vmci/vmci_common_int.h
create mode 100644 drivers/misc/vmw_vmci/vmci_context.c
create mode 100644 drivers/misc/vmw_vmci/vmci_context.h
create mode 100644 drivers/misc/vmw_vmci/vmci_datagram.c
create mode 100644 drivers/misc/vmw_vmci/vmci_datagram.h
create mode 100644 drivers/misc/vmw_vmci/vmci_doorbell.c
create mode 100644 drivers/misc/vmw_vmci/vmci_doorbell.h
create mode 100644 drivers/misc/vmw_vmci/vmci_driver.c
create mode 100644 drivers/misc/vmw_vmci/vmci_driver.h
create mode 100644 drivers/misc/vmw_vmci/vmci_event.c
create mode 100644 drivers/misc/vmw_vmci/vmci_event.h
create mode 100644 drivers/misc/vmw_vmci/vmci_guest.c
create mode 100644 drivers/misc/vmw_vmci/vmci_handle_array.c
create mode 100644 drivers/misc/vmw_vmci/vmci_handle_array.h
create mode 100644 drivers/misc/vmw_vmci/vmci_host.c
create mode 100644 drivers/misc/vmw_vmci/vmci_queue_pair.c
create mode 100644 drivers/misc/vmw_vmci/vmci_queue_pair.h
create mode 100644 drivers/misc/vmw_vmci/vmci_resource.c
create mode 100644 drivers/misc/vmw_vmci/vmci_resource.h
create mode 100644 drivers/misc/vmw_vmci/vmci_route.c
create mode 100644 drivers/misc/vmw_vmci/vmci_route.h
create mode 100644 include/linux/vmw_vmci_api.h
create mode 100644 include/linux/vmw_vmci_defs.h
--
Signature
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox