Commit 05e4cb7c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'char-misc-3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc patches from Greg KH:
 "Here are some char/misc patches for 3.11-rc3.  It's pretty much just:
   - mei fixes
   - hyperv fixes
   - new ja_JP translation update
  all tiny stuff, but fixes for issues people have reported."

* tag 'char-misc-3.11-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc:
  HOWTO ja_JP sync
  mei: me: fix waiting for hw ready
  mei: don't have to clean the state on power up
  mei: me: fix reset state machine
  mei: hbm: fix typo in error message
  Tools: hv: KVP: Fix a bug in IPV6 subnet enumeration
  Drivers: hv: balloon: Do not post pressure status if interrupted
  Drivers: hv: balloon: Fix a bug in the hot-add code
  Drivers: hv: vmbus: incorrect device name is printed when child device is unregistered
parents 8f074a55 9b0ee8cf
...@@ -11,14 +11,14 @@ for non English (read: Japanese) speakers and is not intended as a ...@@ -11,14 +11,14 @@ for non English (read: Japanese) speakers and is not intended as a
fork. So if you have any comments or updates for this file, please try fork. So if you have any comments or updates for this file, please try
to update the original English file first. to update the original English file first.
Last Updated: 2011/03/31 Last Updated: 2013/07/19
================================== ==================================
これは、 これは、
linux-2.6.38/Documentation/HOWTO linux-3.10/Documentation/HOWTO
の和訳です。 の和訳です。
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 翻訳団体: JF プロジェクト < http://linuxjf.sourceforge.jp/ >
翻訳日: 2011/3/28 翻訳日: 2013/7/19
翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com> 翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
校正者: 松倉さん <nbh--mats at nifty dot com> 校正者: 松倉さん <nbh--mats at nifty dot com>
小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp> 小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
...@@ -245,7 +245,7 @@ Linux カーネルソースツリーの中に含まれる、きれいにし、 ...@@ -245,7 +245,7 @@ Linux カーネルソースツリーの中に含まれる、きれいにし、
自己参照方式で、索引がついた web 形式で、ソースコードを参照することが 自己参照方式で、索引がついた web 形式で、ソースコードを参照することが
できます。この最新の素晴しいカーネルコードのリポジトリは以下で見つかり できます。この最新の素晴しいカーネルコードのリポジトリは以下で見つかり
ます- ます-
http://sosdg.org/~qiyong/lxr/ http://lxr.linux.no/+trees
開発プロセス 開発プロセス
----------------------- -----------------------
...@@ -253,24 +253,24 @@ Linux カーネルソースツリーの中に含まれる、きれいにし、 ...@@ -253,24 +253,24 @@ Linux カーネルソースツリーの中に含まれる、きれいにし、
Linux カーネルの開発プロセスは現在幾つかの異なるメインカーネル「ブラン Linux カーネルの開発プロセスは現在幾つかの異なるメインカーネル「ブラン
チ」と多数のサブシステム毎のカーネルブランチから構成されます。 チ」と多数のサブシステム毎のカーネルブランチから構成されます。
これらのブランチとは- これらのブランチとは-
- メインの 2.6.x カーネルツリー - メインの 3.x カーネルツリー
- 2.6.x.y -stable カーネルツリー - 3.x.y -stable カーネルツリー
- 2.6.x -git カーネルパッチ - 3.x -git カーネルパッチ
- サブシステム毎のカーネルツリーとパッチ - サブシステム毎のカーネルツリーとパッチ
- 統合テストのための 2.6.x -next カーネルツリー - 統合テストのための 3.x -next カーネルツリー
2.6.x カーネルツリー 3.x カーネルツリー
----------------- -----------------
2.6.x カーネルは Linus Torvalds によってメンテナンスされ、kernel.org 3.x カーネルは Linus Torvalds によってメンテナンスされ、kernel.org
の pub/linux/kernel/v2.6/ ディレクトリに存在します。この開発プロセスは の pub/linux/kernel/v3.x/ ディレクトリに存在します。この開発プロセスは
以下のとおり- 以下のとおり-
- 新しいカーネルがリリースされた直後に、2週間の特別期間が設けられ、 - 新しいカーネルがリリースされた直後に、2週間の特別期間が設けられ、
この期間中に、メンテナ達は Linus に大きな差分を送ることができます。 この期間中に、メンテナ達は Linus に大きな差分を送ることができます。
このような差分は通常 -next カーネルに数週間含まれてきたパッチです。 このような差分は通常 -next カーネルに数週間含まれてきたパッチです。
大きな変更は git(カーネルのソース管理ツール、詳細は 大きな変更は git(カーネルのソース管理ツール、詳細は
http://git-scm.com/ 参照) を使って送るのが好ましいやり方ですが、パッ http://git-scm.com/ 参照) を使って送るのが好ましいやり方ですが、パッ
チファイルの形式のまま送るのでも十分です。 チファイルの形式のまま送るのでも十分です。
- 2週間後、-rc1 カーネルがリリースされ、この後にはカーネル全体の安定 - 2週間後、-rc1 カーネルがリリースされ、この後にはカーネル全体の安定
...@@ -302,20 +302,20 @@ Andrew Morton が Linux-kernel メーリングリストにカーネルリリー ...@@ -302,20 +302,20 @@ Andrew Morton が Linux-kernel メーリングリストにカーネルリリー
実に認識されたバグの状況によりリリースされるのであり、前もって決めら 実に認識されたバグの状況によりリリースされるのであり、前もって決めら
れた計画によってリリースされるものではないからです。」 れた計画によってリリースされるものではないからです。」
2.6.x.y -stable カーネルツリー 3.x.y -stable カーネルツリー
--------------------------- ---------------------------
バージョン番号が4つの数字に分かれているカーネルは -stable カーネルです。 バージョン番号が3つの数字に分かれているカーネルは -stable カーネルです。
これには、2.6.x カーネルで見つかったセキュリティ問題や重大な後戻りに対 これには、3.x カーネルで見つかったセキュリティ問題や重大な後戻りに対
する比較的小さい重要な修正が含まれます。 する比較的小さい重要な修正が含まれます。
これは、開発/実験的バージョンのテストに協力することに興味が無く、 これは、開発/実験的バージョンのテストに協力することに興味が無く、
最新の安定したカーネルを使いたいユーザに推奨するブランチです。 最新の安定したカーネルを使いたいユーザに推奨するブランチです。
もし、2.6.x.y カーネルが存在しない場合には、番号が一番大きい 2.6.x が もし、3.x.y カーネルが存在しない場合には、番号が一番大きい 3.x が
最新の安定版カーネルです。 最新の安定版カーネルです。
2.6.x.y は "stable" チーム <stable@kernel.org> でメンテされており、必 3.x.y は "stable" チーム <stable@kernel.org> でメンテされており、必
要に応じてリリースされます。通常のリリース期間は 2週間毎ですが、差し迫っ 要に応じてリリースされます。通常のリリース期間は 2週間毎ですが、差し迫っ
た問題がなければもう少し長くなることもあります。セキュリティ関連の問題 た問題がなければもう少し長くなることもあります。セキュリティ関連の問題
の場合はこれに対してだいたいの場合、すぐにリリースがされます。 の場合はこれに対してだいたいの場合、すぐにリリースがされます。
...@@ -324,7 +324,7 @@ Andrew Morton が Linux-kernel メーリングリストにカーネルリリー ...@@ -324,7 +324,7 @@ Andrew Morton が Linux-kernel メーリングリストにカーネルリリー
イルにはどのような種類の変更が -stable ツリーに受け入れ可能か、またリ イルにはどのような種類の変更が -stable ツリーに受け入れ可能か、またリ
リースプロセスがどう動くかが記述されています。 リースプロセスがどう動くかが記述されています。
2.6.x -git パッチ 3.x -git パッチ
------------------ ------------------
git リポジトリで管理されているLinus のカーネルツリーの毎日のスナップ git リポジトリで管理されているLinus のカーネルツリーの毎日のスナップ
...@@ -358,14 +358,14 @@ quilt シリーズとして公開されているパッチキューも使われ ...@@ -358,14 +358,14 @@ quilt シリーズとして公開されているパッチキューも使われ
をつけることができます。大部分のこれらの patchwork のサイトは をつけることができます。大部分のこれらの patchwork のサイトは
http://patchwork.kernel.org/ でリストされています。 http://patchwork.kernel.org/ でリストされています。
統合テストのための 2.6.x -next カーネルツリー 統合テストのための 3.x -next カーネルツリー
--------------------------------------------- ---------------------------------------------
サブシステムツリーの更新内容がメインラインの 2.6.x ツリーにマージされ サブシステムツリーの更新内容がメインラインの 3.x ツリーにマージされ
る前に、それらは統合テストされる必要があります。この目的のため、実質的 る前に、それらは統合テストされる必要があります。この目的のため、実質的
に全サブシステムツリーからほぼ毎日プルされてできる特別なテスト用のリ に全サブシステムツリーからほぼ毎日プルされてできる特別なテスト用のリ
ポジトリが存在します- ポジトリが存在します-
http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git
http://linux.f-seidel.de/linux-next/pmwiki/ http://linux.f-seidel.de/linux-next/pmwiki/
このやり方によって、-next カーネルは次のマージ機会でどんなものがメイン このやり方によって、-next カーネルは次のマージ機会でどんなものがメイン
......
...@@ -562,7 +562,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size, ...@@ -562,7 +562,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size,
struct hv_hotadd_state *has) struct hv_hotadd_state *has)
{ {
int ret = 0; int ret = 0;
int i, nid, t; int i, nid;
unsigned long start_pfn; unsigned long start_pfn;
unsigned long processed_pfn; unsigned long processed_pfn;
unsigned long total_pfn = pfn_count; unsigned long total_pfn = pfn_count;
...@@ -607,14 +607,11 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size, ...@@ -607,14 +607,11 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size,
/* /*
* Wait for the memory block to be onlined. * Wait for the memory block to be onlined.
* Since the hot add has succeeded, it is ok to
* proceed even if the pages in the hot added region
* have not been "onlined" within the allowed time.
*/ */
t = wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ); wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ);
if (t == 0) {
pr_info("hot_add memory timedout\n");
has->ha_end_pfn -= HA_CHUNK;
has->covered_end_pfn -= processed_pfn;
break;
}
} }
...@@ -978,6 +975,14 @@ static void post_status(struct hv_dynmem_device *dm) ...@@ -978,6 +975,14 @@ static void post_status(struct hv_dynmem_device *dm)
dm->num_pages_ballooned + dm->num_pages_ballooned +
compute_balloon_floor(); compute_balloon_floor();
/*
* If our transaction ID is no longer current, just don't
* send the status. This can happen if we were interrupted
* after we picked our transaction ID.
*/
if (status.hdr.trans_id != atomic_read(&trans_id))
return;
vmbus_sendpacket(dm->dev->channel, &status, vmbus_sendpacket(dm->dev->channel, &status,
sizeof(struct dm_status), sizeof(struct dm_status),
(unsigned long)NULL, (unsigned long)NULL,
......
...@@ -690,7 +690,7 @@ int vmbus_device_register(struct hv_device *child_device_obj) ...@@ -690,7 +690,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
if (ret) if (ret)
pr_err("Unable to register child device\n"); pr_err("Unable to register child device\n");
else else
pr_info("child device %s registered\n", pr_debug("child device %s registered\n",
dev_name(&child_device_obj->device)); dev_name(&child_device_obj->device));
return ret; return ret;
...@@ -702,14 +702,14 @@ int vmbus_device_register(struct hv_device *child_device_obj) ...@@ -702,14 +702,14 @@ int vmbus_device_register(struct hv_device *child_device_obj)
*/ */
void vmbus_device_unregister(struct hv_device *device_obj) void vmbus_device_unregister(struct hv_device *device_obj)
{ {
pr_debug("child device %s unregistered\n",
dev_name(&device_obj->device));
/* /*
* Kick off the process of unregistering the device. * Kick off the process of unregistering the device.
* This will call vmbus_remove() and eventually vmbus_device_release() * This will call vmbus_remove() and eventually vmbus_device_release()
*/ */
device_unregister(&device_obj->device); device_unregister(&device_obj->device);
pr_info("child device %s unregistered\n",
dev_name(&device_obj->device));
} }
......
...@@ -167,7 +167,7 @@ int mei_hbm_start_req(struct mei_device *dev) ...@@ -167,7 +167,7 @@ int mei_hbm_start_req(struct mei_device *dev)
dev->hbm_state = MEI_HBM_IDLE; dev->hbm_state = MEI_HBM_IDLE;
if (mei_write_message(dev, mei_hdr, dev->wr_msg.data)) { if (mei_write_message(dev, mei_hdr, dev->wr_msg.data)) {
dev_err(&dev->pdev->dev, "version message writet failed\n"); dev_err(&dev->pdev->dev, "version message write failed\n");
dev->dev_state = MEI_DEV_RESETTING; dev->dev_state = MEI_DEV_RESETTING;
mei_reset(dev, 1); mei_reset(dev, 1);
return -ENODEV; return -ENODEV;
......
...@@ -239,14 +239,18 @@ static int mei_me_hw_ready_wait(struct mei_device *dev) ...@@ -239,14 +239,18 @@ static int mei_me_hw_ready_wait(struct mei_device *dev)
if (mei_me_hw_is_ready(dev)) if (mei_me_hw_is_ready(dev))
return 0; return 0;
dev->recvd_hw_ready = false;
mutex_unlock(&dev->device_lock); mutex_unlock(&dev->device_lock);
err = wait_event_interruptible_timeout(dev->wait_hw_ready, err = wait_event_interruptible_timeout(dev->wait_hw_ready,
dev->recvd_hw_ready, MEI_INTEROP_TIMEOUT); dev->recvd_hw_ready,
mei_secs_to_jiffies(MEI_INTEROP_TIMEOUT));
mutex_lock(&dev->device_lock); mutex_lock(&dev->device_lock);
if (!err && !dev->recvd_hw_ready) { if (!err && !dev->recvd_hw_ready) {
if (!err)
err = -ETIMEDOUT;
dev_err(&dev->pdev->dev, dev_err(&dev->pdev->dev,
"wait hw ready failed. status = 0x%x\n", err); "wait hw ready failed. status = %d\n", err);
return -ETIMEDOUT; return err;
} }
dev->recvd_hw_ready = false; dev->recvd_hw_ready = false;
...@@ -483,7 +487,9 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id) ...@@ -483,7 +487,9 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
/* check if ME wants a reset */ /* check if ME wants a reset */
if (!mei_hw_is_ready(dev) && if (!mei_hw_is_ready(dev) &&
dev->dev_state != MEI_DEV_RESETTING && dev->dev_state != MEI_DEV_RESETTING &&
dev->dev_state != MEI_DEV_INITIALIZING) { dev->dev_state != MEI_DEV_INITIALIZING &&
dev->dev_state != MEI_DEV_POWER_DOWN &&
dev->dev_state != MEI_DEV_POWER_UP) {
dev_dbg(&dev->pdev->dev, "FW not ready.\n"); dev_dbg(&dev->pdev->dev, "FW not ready.\n");
mei_reset(dev, 1); mei_reset(dev, 1);
mutex_unlock(&dev->device_lock); mutex_unlock(&dev->device_lock);
......
...@@ -148,7 +148,8 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled) ...@@ -148,7 +148,8 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
dev->hbm_state = MEI_HBM_IDLE; dev->hbm_state = MEI_HBM_IDLE;
if (dev->dev_state != MEI_DEV_INITIALIZING) { if (dev->dev_state != MEI_DEV_INITIALIZING &&
dev->dev_state != MEI_DEV_POWER_UP) {
if (dev->dev_state != MEI_DEV_DISABLED && if (dev->dev_state != MEI_DEV_DISABLED &&
dev->dev_state != MEI_DEV_POWER_DOWN) dev->dev_state != MEI_DEV_POWER_DOWN)
dev->dev_state = MEI_DEV_RESETTING; dev->dev_state = MEI_DEV_RESETTING;
......
...@@ -1026,9 +1026,10 @@ kvp_get_ip_info(int family, char *if_name, int op, ...@@ -1026,9 +1026,10 @@ kvp_get_ip_info(int family, char *if_name, int op,
if (sn_offset == 0) if (sn_offset == 0)
strcpy(sn_str, cidr_mask); strcpy(sn_str, cidr_mask);
else else {
strcat((char *)ip_buffer->sub_net, ";");
strcat(sn_str, cidr_mask); strcat(sn_str, cidr_mask);
strcat((char *)ip_buffer->sub_net, ";"); }
sn_offset += strlen(sn_str) + 1; sn_offset += strlen(sn_str) + 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment